[PATCH 2/4] drbd: Fix variable dereference before check
Ethan Tidmore <[email protected]> Tue, 17 Mar 2026 18:23:16 -0500
| Newsgroups | dev.linux.lists.drbd-dev,org.kernel.vger.linux-block,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
The struct is 'req' is checked for NULL after resource was assigned from
a member from it.
Check 'req' for NULL before assigning resource.
Detected by Smatch:
drivers/block/drbd/drbd_req.c:1996 drbd_unplug() warn:
variable dereferenced before check 'req' (see line 1993)
Fixes: 71d075200b462 ("drbd: rework request processing for DRBD 9 multi-peer IO")
Signed-off-by: Ethan Tidmore <[email protected]>
---
drivers/block/drbd/drbd_req.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index e88b5da15c1e..4cbd9ec15157 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -1990,12 +1990,14 @@ static void drbd_unplug(struct blk_plug_cb *cb, bool from_schedule)
{
struct drbd_plug_cb *plug = container_of(cb, struct drbd_plug_cb, cb);
struct drbd_request *req = plug->most_recent_req;
- struct drbd_resource *resource = req->device->resource;
+ struct drbd_resource *resource;
kfree(cb);
if (!req)
return;
+ resource = req->device->resource;
+
read_lock_irq(&resource->state_rwlock);
/* In case the sender did not process it yet, raise the flag to
* have it followed with P_UNPLUG_REMOTE just after. */
--
2.53.0