* [PATCH] RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly
@ 2025-11-28 17:37 Jason Gunthorpe
2025-12-17 1:44 ` Jason Gunthorpe
0 siblings, 1 reply; 2+ messages in thread
From: Jason Gunthorpe @ 2025-11-28 17:37 UTC (permalink / raw)
To: Leon Romanovsky, linux-rdma
Cc: Doug Ledford, Mark Bloch, patches, stable,
syzbot+938fcd548c303fe33c1a
The netlink response for RDMA_NL_LS_OP_IP_RESOLVE should always have a
LS_NLA_TYPE_DGID attribute, it is invalid if it does not.
Use the nl parsing logic properly and call nla_parse_deprecated() to fill
the nlattrs array and then directly index that array to get the data for
the DGID. Just fail if it is NULL.
Remove the for loop searching for the nla, and squash the validation and
parsing into one function.
Fixes an uninitialized read from the stack triggered by userspace if it
does not provide the DGID to a kernel initiated RDMA_NL_LS_OP_IP_RESOLVE
query.
BUG: KMSAN: uninit-value in hex_byte_pack include/linux/hex.h:13 [inline]
BUG: KMSAN: uninit-value in ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
hex_byte_pack include/linux/hex.h:13 [inline]
ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
ip6_addr_string+0x18a/0x3e0 lib/vsprintf.c:1509
ip_addr_string+0x245/0xee0 lib/vsprintf.c:1633
pointer+0xc09/0x1bd0 lib/vsprintf.c:2542
vsnprintf+0xf8a/0x1bd0 lib/vsprintf.c:2930
vprintk_store+0x3ae/0x1530 kernel/printk/printk.c:2279
vprintk_emit+0x307/0xcd0 kernel/printk/printk.c:2426
vprintk_default+0x3f/0x50 kernel/printk/printk.c:2465
vprintk+0x36/0x50 kernel/printk/printk_safe.c:82
_printk+0x17e/0x1b0 kernel/printk/printk.c:2475
ib_nl_process_good_ip_rsep drivers/infiniband/core/addr.c:128 [inline]
ib_nl_handle_ip_res_resp+0x963/0x9d0 drivers/infiniband/core/addr.c:141
rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
rdma_nl_rcv+0xefa/0x11c0 drivers/infiniband/core/netlink.c:259
netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
netlink_unicast+0xf04/0x12b0 net/netlink/af_netlink.c:1346
netlink_sendmsg+0x10b3/0x1250 net/netlink/af_netlink.c:1896
sock_sendmsg_nosec net/socket.c:714 [inline]
__sock_sendmsg+0x333/0x3d0 net/socket.c:729
____sys_sendmsg+0x7e0/0xd80 net/socket.c:2617
___sys_sendmsg+0x271/0x3b0 net/socket.c:2671
__sys_sendmsg+0x1aa/0x300 net/socket.c:2703
__compat_sys_sendmsg net/compat.c:346 [inline]
__do_compat_sys_sendmsg net/compat.c:353 [inline]
__se_compat_sys_sendmsg net/compat.c:350 [inline]
__ia32_compat_sys_sendmsg+0xa4/0x100 net/compat.c:350
ia32_sys_call+0x3f6c/0x4310 arch/x86/include/generated/asm/syscalls_32.h:371
do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
__do_fast_syscall_32+0xb0/0x150 arch/x86/entry/syscall_32.c:306
do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:3
Cc: stable@vger.kernel.org
Fixes: ae43f8286730 ("IB/core: Add IP to GID netlink offload")
Reported-by: syzbot+938fcd548c303fe33c1a@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/r/68dc3dac.a00a0220.102ee.004f.GAE@google.com
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
---
drivers/infiniband/core/addr.c | 33 ++++++++++-----------------------
1 file changed, 10 insertions(+), 23 deletions(-)
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 61596cda2b65f3..35ba852a172aad 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -80,37 +80,25 @@ static const struct nla_policy ib_nl_addr_policy[LS_NLA_TYPE_MAX] = {
.min = sizeof(struct rdma_nla_ls_gid)},
};
-static inline bool ib_nl_is_good_ip_resp(const struct nlmsghdr *nlh)
+static void ib_nl_process_ip_rsep(const struct nlmsghdr *nlh)
{
struct nlattr *tb[LS_NLA_TYPE_MAX] = {};
+ union ib_gid gid;
+ struct addr_req *req;
+ int found = 0;
int ret;
if (nlh->nlmsg_flags & RDMA_NL_LS_F_ERR)
- return false;
+ return;
ret = nla_parse_deprecated(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
nlmsg_len(nlh), ib_nl_addr_policy, NULL);
if (ret)
- return false;
+ return;
- return true;
-}
-
-static void ib_nl_process_good_ip_rsep(const struct nlmsghdr *nlh)
-{
- const struct nlattr *head, *curr;
- union ib_gid gid;
- struct addr_req *req;
- int len, rem;
- int found = 0;
-
- head = (const struct nlattr *)nlmsg_data(nlh);
- len = nlmsg_len(nlh);
-
- nla_for_each_attr(curr, head, len, rem) {
- if (curr->nla_type == LS_NLA_TYPE_DGID)
- memcpy(&gid, nla_data(curr), nla_len(curr));
- }
+ if (!tb[LS_NLA_TYPE_DGID])
+ return;
+ memcpy(&gid, nla_data(tb[LS_NLA_TYPE_DGID]), sizeof(gid));
spin_lock_bh(&lock);
list_for_each_entry(req, &req_list, list) {
@@ -137,8 +125,7 @@ int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
!(NETLINK_CB(skb).sk))
return -EPERM;
- if (ib_nl_is_good_ip_resp(nlh))
- ib_nl_process_good_ip_rsep(nlh);
+ ib_nl_process_ip_rsep(nlh);
return 0;
}
base-commit: 80a85a771deb113cfe2e295fb9e84467a43ebfe4
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly
2025-11-28 17:37 [PATCH] RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly Jason Gunthorpe
@ 2025-12-17 1:44 ` Jason Gunthorpe
0 siblings, 0 replies; 2+ messages in thread
From: Jason Gunthorpe @ 2025-12-17 1:44 UTC (permalink / raw)
To: Leon Romanovsky, linux-rdma
Cc: Doug Ledford, Mark Bloch, patches, stable,
syzbot+938fcd548c303fe33c1a
On Fri, Nov 28, 2025 at 01:37:28PM -0400, Jason Gunthorpe wrote:
> The netlink response for RDMA_NL_LS_OP_IP_RESOLVE should always have a
> LS_NLA_TYPE_DGID attribute, it is invalid if it does not.
>
> Use the nl parsing logic properly and call nla_parse_deprecated() to fill
> the nlattrs array and then directly index that array to get the data for
> the DGID. Just fail if it is NULL.
>
> Remove the for loop searching for the nla, and squash the validation and
> parsing into one function.
>
> Fixes an uninitialized read from the stack triggered by userspace if it
> does not provide the DGID to a kernel initiated RDMA_NL_LS_OP_IP_RESOLVE
> query.
>
> BUG: KMSAN: uninit-value in hex_byte_pack include/linux/hex.h:13 [inline]
> BUG: KMSAN: uninit-value in ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
> hex_byte_pack include/linux/hex.h:13 [inline]
> ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
> ip6_addr_string+0x18a/0x3e0 lib/vsprintf.c:1509
> ip_addr_string+0x245/0xee0 lib/vsprintf.c:1633
> pointer+0xc09/0x1bd0 lib/vsprintf.c:2542
> vsnprintf+0xf8a/0x1bd0 lib/vsprintf.c:2930
> vprintk_store+0x3ae/0x1530 kernel/printk/printk.c:2279
> vprintk_emit+0x307/0xcd0 kernel/printk/printk.c:2426
> vprintk_default+0x3f/0x50 kernel/printk/printk.c:2465
> vprintk+0x36/0x50 kernel/printk/printk_safe.c:82
> _printk+0x17e/0x1b0 kernel/printk/printk.c:2475
> ib_nl_process_good_ip_rsep drivers/infiniband/core/addr.c:128 [inline]
> ib_nl_handle_ip_res_resp+0x963/0x9d0 drivers/infiniband/core/addr.c:141
> rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
> rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
> rdma_nl_rcv+0xefa/0x11c0 drivers/infiniband/core/netlink.c:259
> netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
> netlink_unicast+0xf04/0x12b0 net/netlink/af_netlink.c:1346
> netlink_sendmsg+0x10b3/0x1250 net/netlink/af_netlink.c:1896
> sock_sendmsg_nosec net/socket.c:714 [inline]
> __sock_sendmsg+0x333/0x3d0 net/socket.c:729
> ____sys_sendmsg+0x7e0/0xd80 net/socket.c:2617
> ___sys_sendmsg+0x271/0x3b0 net/socket.c:2671
> __sys_sendmsg+0x1aa/0x300 net/socket.c:2703
> __compat_sys_sendmsg net/compat.c:346 [inline]
> __do_compat_sys_sendmsg net/compat.c:353 [inline]
> __se_compat_sys_sendmsg net/compat.c:350 [inline]
> __ia32_compat_sys_sendmsg+0xa4/0x100 net/compat.c:350
> ia32_sys_call+0x3f6c/0x4310 arch/x86/include/generated/asm/syscalls_32.h:371
> do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
> __do_fast_syscall_32+0xb0/0x150 arch/x86/entry/syscall_32.c:306
> do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
> do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:3
>
> Cc: stable@vger.kernel.org
> Fixes: ae43f8286730 ("IB/core: Add IP to GID netlink offload")
> Reported-by: syzbot+938fcd548c303fe33c1a@syzkaller.appspotmail.com
> Closes: https://lore.kernel.org/r/68dc3dac.a00a0220.102ee.004f.GAE@google.com
> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/infiniband/core/addr.c | 33 ++++++++++-----------------------
> 1 file changed, 10 insertions(+), 23 deletions(-)
Applied to for-rc
Jason
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-17 1:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-28 17:37 [PATCH] RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly Jason Gunthorpe
2025-12-17 1:44 ` Jason Gunthorpe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).