| From ee37e62191a59d253fc916b9fc763deb777211e2 Mon Sep 17 00:00:00 2001 |
| From: Yufen Yu <yuyufen@huawei.com> |
| Date: Tue, 2 Apr 2019 14:22:14 +0800 |
| Subject: md: add mddev->pers to avoid potential NULL pointer dereference |
| |
| From: Yufen Yu <yuyufen@huawei.com> |
| |
| commit ee37e62191a59d253fc916b9fc763deb777211e2 upstream. |
| |
| When doing re-add, we need to ensure rdev->mddev->pers is not NULL, |
| which can avoid potential NULL pointer derefence in fallowing |
| add_bound_rdev(). |
| |
| Fixes: a6da4ef85cef ("md: re-add a failed disk") |
| Cc: Xiao Ni <xni@redhat.com> |
| Cc: NeilBrown <neilb@suse.com> |
| Cc: <stable@vger.kernel.org> # 4.4+ |
| Reviewed-by: NeilBrown <neilb@suse.com> |
| Signed-off-by: Yufen Yu <yuyufen@huawei.com> |
| Signed-off-by: Song Liu <songliubraving@fb.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/md.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/md/md.c |
| +++ b/drivers/md/md.c |
| @@ -2694,8 +2694,10 @@ state_store(struct md_rdev *rdev, const |
| err = 0; |
| } |
| } else if (cmd_match(buf, "re-add")) { |
| - if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) && |
| - rdev->saved_raid_disk >= 0) { |
| + if (!rdev->mddev->pers) |
| + err = -EINVAL; |
| + else if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) && |
| + rdev->saved_raid_disk >= 0) { |
| /* clear_bit is performed _after_ all the devices |
| * have their local Faulty bit cleared. If any writes |
| * happen in the meantime in the local node, they |