drbd: fix NULL pointer deref in blk_add_request_payload
authorLars Ellenberg <lars.ellenberg@linbit.com>
Wed, 25 Jun 2014 15:52:38 +0000 (17:52 +0200)
committerJens Axboe <axboe@fb.com>
Wed, 25 Jun 2014 15:53:47 +0000 (09:53 -0600)
Discards don't have any payload.
But the scsi layer still expects a bio_vec it can use internally,
see sd_setup_discard_cmnd() and blk_add_request_payload().

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/drbd/drbd_receiver.c

index b6c8aaf4931bc8434635e74efa004f9ddf8c0304..5b17ec88ea058e766071e66eeadf3d8fca3f4940 100644 (file)
@@ -1337,8 +1337,11 @@ int drbd_submit_peer_request(struct drbd_device *device,
                return 0;
        }
 
+       /* Discards don't have any payload.
+        * But the scsi layer still expects a bio_vec it can use internally,
+        * see sd_setup_discard_cmnd() and blk_add_request_payload(). */
        if (peer_req->flags & EE_IS_TRIM)
-               nr_pages = 0; /* discards don't have any payload. */
+               nr_pages = 1;
 
        /* In most cases, we will only need one bio.  But in case the lower
         * level restrictions happen to be different at this offset on this