]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
MD: Fix a potential NULL dereference in md/raid1
authorNeilBrown <neilb@suse.de>
Mon, 21 Aug 2006 00:05:26 +0000 (10:05 +1000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Aug 2006 21:13:32 +0000 (14:13 -0700)
At the point where this 'atomic_add' is, rdev could be NULL, as seen by
the fact that we test for this in the very next statement.

Further is it is really the wrong place of the add.  We could add to the
count of corrected errors once the are sure it was corrected, not before
trying to correct it.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c

drivers/md/raid1.c

index 4070eff6f0f8aca1d1c931a1505431c3d6cc1a2b..5a5449400acdceb0cab71b86dd655ec1f5aa3c90 100644 (file)
@@ -1486,7 +1486,6 @@ static void raid1d(mddev_t *mddev)
                                                        d = conf->raid_disks;
                                                d--;
                                                rdev = conf->mirrors[d].rdev;
-                                               atomic_add(s, &rdev->corrected_errors);
                                                if (rdev &&
                                                    test_bit(In_sync, &rdev->flags)) {
                                                        if (sync_page_io(rdev->bdev,
@@ -1509,6 +1508,9 @@ static void raid1d(mddev_t *mddev)
                                                                         s<<9, conf->tmppage, READ) == 0)
                                                                /* Well, this device is dead */
                                                                md_error(mddev, rdev);
+                                                       else
+                                                               atomic_add(s, &rdev->corrected_errors);
+
                                                }
                                        }
                                } else {