From: Jeffin Philip <jeffinphilip14@gmail.com>
To: jgg@ziepe.ca
Cc: leon@kernel.org, kees@kernel.org, Tatyana.E.Nikolova@intel.com,
roland@purestorage.com, linux-rdma@vger.kernel.org,
linux-kernel@vger.kernel.org, larrystevenwise@gmail.com,
pj.waskiewicz@solidfire.com, jeffinphilip14@gmail.com,
syzbot+bd317784d628820741b5@syzkaller.appspotmail.com,
stable@vger.kernel.org
Subject: [PATCH v2] RDMA/core: fix refcount bug in iwpm_get_nlmsg_request()
Date: Thu, 3 Sep 2026 15:47:42 +0530 [thread overview]
Message-ID: <20260903101742.214304-1-jeffinphilip14@gmail.com> (raw)
In-Reply-To: <20260902085213.145312-1-jeffinphilip14@gmail.com>
iwpm_get_nlmsg_request() initializes refcount _after_ list_add_tail()
making it accessible to global list where another CPU can kref_get()
on nlmsg_request causing a refcount "addition on 0" bug. Fix this
by initializing kref _before_ list_add_tail() so refcount for
nlmsg_request can be incremented/decremented normally. In addition,
also initialize every field before list_add_tail().
Reported-by: syzbot+bd317784d628820741b5@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=bd317784d628820741b5
Fixes: 30dc5e63d6a5 ("RDMA/core: Add support for iWARP Port Mapper user space service")
Cc: stable@vger.kernel.org
Signed-off-by: Jeffin Philip <jeffinphilip14@gmail.com>
---
Changelog:
Changes in v2:
Add list_add_tail() last after initializing every field as per Leon Romanovsky's
suggestion.
---
drivers/infiniband/core/iwpm_util.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/core/iwpm_util.c b/drivers/infiniband/core/iwpm_util.c
index 5d07c5756987..51af8c1c49f9 100644
--- a/drivers/infiniband/core/iwpm_util.c
+++ b/drivers/infiniband/core/iwpm_util.c
@@ -313,19 +313,20 @@ struct iwpm_nlmsg_request *iwpm_get_nlmsg_request(__u32 nlmsg_seq,
nlmsg_request = kzalloc_obj(struct iwpm_nlmsg_request, gfp);
if (!nlmsg_request)
return NULL;
+
kref_init(&nlmsg_request->kref);
kref_get(&nlmsg_request->kref);
-
- spin_lock_irqsave(&iwpm_nlmsg_req_lock, flags);
- list_add_tail(&nlmsg_request->inprocess_list, &iwpm_nlmsg_req_list);
- spin_unlock_irqrestore(&iwpm_nlmsg_req_lock, flags);
-
nlmsg_request->nlmsg_seq = nlmsg_seq;
nlmsg_request->nl_client = nl_client;
nlmsg_request->request_done = 0;
nlmsg_request->err_code = 0;
sema_init(&nlmsg_request->sem, 1);
down(&nlmsg_request->sem);
+
+ spin_lock_irqsave(&iwpm_nlmsg_req_lock, flags);
+ list_add_tail(&nlmsg_request->inprocess_list, &iwpm_nlmsg_req_list);
+ spin_unlock_irqrestore(&iwpm_nlmsg_req_lock, flags);
+
return nlmsg_request;
}
--
2.55.0
next prev parent reply other threads:[~2026-09-03 10:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 8:52 [PATCH] RDMA/core: fix refcount bug in iwpm_get_nlmsg_request() Jeffin Philip
2026-09-03 9:52 ` Leon Romanovsky
2026-09-03 10:17 ` Jeffin Philip [this message]
2026-09-03 10:23 ` [PATCH v2] " Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260903101742.214304-1-jeffinphilip14@gmail.com \
--to=jeffinphilip14@gmail.com \
--cc=Tatyana.E.Nikolova@intel.com \
--cc=jgg@ziepe.ca \
--cc=kees@kernel.org \
--cc=larrystevenwise@gmail.com \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=pj.waskiewicz@solidfire.com \
--cc=roland@purestorage.com \
--cc=stable@vger.kernel.org \
--cc=syzbot+bd317784d628820741b5@syzkaller.appspotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.