]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/core: Prefer NLA_NUL_STRING
authorFlorian Westphal <fw@strlen.de>
Mon, 30 Mar 2026 12:27:39 +0000 (14:27 +0200)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 9 Apr 2026 13:58:56 +0000 (10:58 -0300)
These attributes are evaluated as c-string (passed to strcmp), but
NLA_STRING doesn't check for the presence of a \0 terminator.

Either this needs to switch to nla_strcmp() and needs to adjust printf fmt
specifier to not use plain %s, or this needs to use NLA_NUL_STRING.

As the code has been this way for long time, it seems to me that userspace
does include the terminating nul, even tough its not enforced so far, and
thus NLA_NUL_STRING use is the simpler solution.

Fixes: 30dc5e63d6a5 ("RDMA/core: Add support for iWARP Port Mapper user space service")
Link: https://patch.msgid.link/r/20260330122742.13315-1-fw@strlen.de
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/iwpm_msg.c

index 69c85249b465062855dd982a72059be22cd732ea..4625abd29ac06327e76e97203f648a556c83468c 100644 (file)
@@ -365,9 +365,9 @@ remove_mapping_error:
 /* netlink attribute policy for the received response to register pid request */
 static const struct nla_policy resp_reg_policy[IWPM_NLA_RREG_PID_MAX] = {
        [IWPM_NLA_RREG_PID_SEQ]     = { .type = NLA_U32 },
-       [IWPM_NLA_RREG_IBDEV_NAME]  = { .type = NLA_STRING,
+       [IWPM_NLA_RREG_IBDEV_NAME]  = { .type = NLA_NUL_STRING,
                                        .len = IWPM_DEVNAME_SIZE - 1 },
-       [IWPM_NLA_RREG_ULIB_NAME]   = { .type = NLA_STRING,
+       [IWPM_NLA_RREG_ULIB_NAME]   = { .type = NLA_NUL_STRING,
                                        .len = IWPM_ULIBNAME_SIZE - 1 },
        [IWPM_NLA_RREG_ULIB_VER]    = { .type = NLA_U16 },
        [IWPM_NLA_RREG_PID_ERR]     = { .type = NLA_U16 }
@@ -677,7 +677,7 @@ int iwpm_remote_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
 
 /* netlink attribute policy for the received request for mapping info */
 static const struct nla_policy resp_mapinfo_policy[IWPM_NLA_MAPINFO_REQ_MAX] = {
-       [IWPM_NLA_MAPINFO_ULIB_NAME] = { .type = NLA_STRING,
+       [IWPM_NLA_MAPINFO_ULIB_NAME] = { .type = NLA_NUL_STRING,
                                        .len = IWPM_ULIBNAME_SIZE - 1 },
        [IWPM_NLA_MAPINFO_ULIB_VER]  = { .type = NLA_U16 }
 };