Commit fd0017c1 authored by Philipp Reisner's avatar Philipp Reisner

drbd: fix regression: potential NULL pointer dereference

recent commit
    drbd: always write bitmap on detach
introduced a bitmap writeout during detach,
which obviously needs some meta data device to write to.

Unfortunately, that same error path may be taken if we fail to attach,
e.g. due to UUID mismatch, after we changed state to D_ATTACHING,
but before the lower level device pointer is even assigned.

We need to test for presence of mdev->ldev.
Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 4035e4c2
...@@ -2318,6 +2318,11 @@ static inline void drbd_md_flush(struct drbd_conf *mdev) ...@@ -2318,6 +2318,11 @@ static inline void drbd_md_flush(struct drbd_conf *mdev)
{ {
int r; int r;
if (mdev->ldev == NULL) {
dev_warn(DEV, "mdev->ldev == NULL in drbd_md_flush\n");
return;
}
if (test_bit(MD_NO_FUA, &mdev->flags)) if (test_bit(MD_NO_FUA, &mdev->flags))
return; return;
......
...@@ -3235,8 +3235,12 @@ static int w_go_diskless(struct drbd_work *w, int unused) ...@@ -3235,8 +3235,12 @@ static int w_go_diskless(struct drbd_work *w, int unused)
* (Do we want a specific meta data flag for this?) * (Do we want a specific meta data flag for this?)
* *
* If that does not make it to stable storage either, * If that does not make it to stable storage either,
* we cannot do anything about that anymore. */ * we cannot do anything about that anymore.
if (mdev->bitmap) { *
* We still need to check if both bitmap and ldev are present, we may
* end up here after a failed attach, before ldev was even assigned.
*/
if (mdev->bitmap && mdev->ldev) {
if (drbd_bitmap_io_from_worker(mdev, drbd_bm_write, if (drbd_bitmap_io_from_worker(mdev, drbd_bm_write,
"detach", BM_LOCKED_MASK)) { "detach", BM_LOCKED_MASK)) {
if (test_bit(WAS_READ_ERROR, &mdev->flags)) { if (test_bit(WAS_READ_ERROR, &mdev->flags)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment