]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/ionic: bound node_desc sysfs read with %.64s
authorKai Zen <kai.aizen.dev@gmail.com>
Tue, 7 Apr 2026 09:20:22 +0000 (12:20 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 9 Apr 2026 15:47:04 +0000 (12:47 -0300)
node_desc[64] in struct ib_device is not guaranteed to be NUL-
terminated. The core IB sysfs handler uses "%.64s" for exactly this
reason (drivers/infiniband/core/sysfs.c:1307), since node_desc_store()
performs a raw memcpy of up to IB_DEVICE_NODE_DESC_MAX bytes with no NUL
termination:

  memcpy(desc.node_desc, buf, min_t(int, count, IB_DEVICE_NODE_DESC_MAX));

If exactly 64 bytes are written via the node_desc sysfs file, the array
contains no NUL byte. The ionic hca_type_show() handler uses unbounded
"%s" and will read past the end of node_desc into adjacent fields of
struct ib_device until it encounters a NUL.

ionic supports IB_DEVICE_MODIFY_NODE_DESC, so this is triggerable by
userspace.

Match the core handler and bound the format specifier.

Cc: stable@vger.kernel.org
Fixes: 2075bbe8ef03 ("RDMA/ionic: Register device ops for miscellaneous functionality")
Link: https://patch.msgid.link/r/CALynFi7NAbhDCt1tdaDbf6TnLvAqbaHa6-Wqf6OkzREbA_PAfg@mail.gmail.com
Signed-off-by: Kai Aizen <kai.aizen.dev@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/ionic/ionic_ibdev.c

index bd4c73e530d08109c988f3740eb54da931dadc29..0382a64839d26ad3eda4ca50853943871f143daa 100644 (file)
@@ -185,7 +185,7 @@ static ssize_t hca_type_show(struct device *device,
        struct ionic_ibdev *dev =
                rdma_device_to_drv_device(device, struct ionic_ibdev, ibdev);
 
-       return sysfs_emit(buf, "%s\n", dev->ibdev.node_desc);
+       return sysfs_emit(buf, "%s.64\n", dev->ibdev.node_desc);
 }
 static DEVICE_ATTR_RO(hca_type);