diff options
author | Shaohua Li <shli@fb.com> | 2017-02-20 01:41:27 -0500 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-02-20 01:41:27 -0500 |
commit | af5f42a7e426a87bfa69adc9b9d8930385a1ddf6 (patch) | |
tree | b8c9f89049ad59d48251737800f8d7c70830fec6 | |
parent | 824e47daddbfc6ebe1006b8659f080620472a136 (diff) |
md/raid1: fix a use-after-free bug
Commit fd76863 (RAID1: a new I/O barrier implementation to remove resync
window) introduces a user-after-free bug.
Signed-off-by: Shaohua Li <shli@fb.com>
-rw-r--r-- | drivers/md/raid1.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index fefbbfdb440b..2e5e4805cbe1 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -203,6 +203,7 @@ static void free_r1bio(struct r1bio *r1_bio) | |||
203 | static void put_buf(struct r1bio *r1_bio) | 203 | static void put_buf(struct r1bio *r1_bio) |
204 | { | 204 | { |
205 | struct r1conf *conf = r1_bio->mddev->private; | 205 | struct r1conf *conf = r1_bio->mddev->private; |
206 | sector_t sect = r1_bio->sector; | ||
206 | int i; | 207 | int i; |
207 | 208 | ||
208 | for (i = 0; i < conf->raid_disks * 2; i++) { | 209 | for (i = 0; i < conf->raid_disks * 2; i++) { |
@@ -213,7 +214,7 @@ static void put_buf(struct r1bio *r1_bio) | |||
213 | 214 | ||
214 | mempool_free(r1_bio, conf->r1buf_pool); | 215 | mempool_free(r1_bio, conf->r1buf_pool); |
215 | 216 | ||
216 | lower_barrier(conf, r1_bio->sector); | 217 | lower_barrier(conf, sect); |
217 | } | 218 | } |
218 | 219 | ||
219 | static void reschedule_retry(struct r1bio *r1_bio) | 220 | static void reschedule_retry(struct r1bio *r1_bio) |