瀏覽代碼

Merge tag 'md-3.5-fixes' of git://neil.brown.name/md

Pull use-after-free RAID1 bugfix from NeilBrown.

* tag 'md-3.5-fixes' of git://neil.brown.name/md:
  md/raid1: fix use-after-free bug in RAID1 data-check code.
Linus Torvalds 13 年之前
父節點
當前提交
fdb1335a82
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/md/raid1.c

+ 2 - 1
drivers/md/raid1.c

@@ -2485,9 +2485,10 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
 	 */
 	 */
 	if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
 	if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
 		atomic_set(&r1_bio->remaining, read_targets);
 		atomic_set(&r1_bio->remaining, read_targets);
-		for (i = 0; i < conf->raid_disks * 2; i++) {
+		for (i = 0; i < conf->raid_disks * 2 && read_targets; i++) {
 			bio = r1_bio->bios[i];
 			bio = r1_bio->bios[i];
 			if (bio->bi_end_io == end_sync_read) {
 			if (bio->bi_end_io == end_sync_read) {
+				read_targets--;
 				md_sync_acct(bio->bi_bdev, nr_sectors);
 				md_sync_acct(bio->bi_bdev, nr_sectors);
 				generic_make_request(bio);
 				generic_make_request(bio);
 			}
 			}