]> git.baikalelectronics.ru Git - kernel.git/commitdiff
dm raid: fix KASAN warning in raid5_remove_disk
authorMikulas Patocka <mpatocka@redhat.com>
Wed, 29 Jun 2022 17:40:01 +0000 (13:40 -0400)
committerMike Snitzer <snitzer@kernel.org>
Wed, 29 Jun 2022 23:47:36 +0000 (19:47 -0400)
There's a KASAN warning in raid5_remove_disk when running the LVM
testsuite. We fix this warning by verifying that the "number" variable is
within limits.

Cc: stable@vger.kernel.org
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/raid5.c

index 5d09256d7f81857d4a6861ef192a6f0d385118a8..ba289411f26f7dc9fbefe0a57a033be73b869043 100644 (file)
@@ -7933,7 +7933,7 @@ static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
        int err = 0;
        int number = rdev->raid_disk;
        struct md_rdev __rcu **rdevp;
-       struct disk_info *p = conf->disks + number;
+       struct disk_info *p;
        struct md_rdev *tmp;
 
        print_raid5_conf(conf);
@@ -7952,6 +7952,9 @@ static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
                log_exit(conf);
                return 0;
        }
+       if (unlikely(number >= conf->pool_size))
+               return 0;
+       p = conf->disks + number;
        if (rdev == rcu_access_pointer(p->rdev))
                rdevp = &p->rdev;
        else if (rdev == rcu_access_pointer(p->replacement))