RDMA/IPoIB: Fix format truncation compilation errors
authorLeon Romanovsky <leonro@nvidia.com>
Thu, 9 May 2024 07:39:33 +0000 (10:39 +0300)
committerLeon Romanovsky <leon@kernel.org>
Sun, 12 May 2024 09:36:46 +0000 (12:36 +0300)
Truncate the device name to store IPoIB VLAN name.

[leonro@5b4e8fba4ddd kernel]$ make -s -j 20 allmodconfig
[leonro@5b4e8fba4ddd kernel]$ make -s -j 20 W=1 drivers/infiniband/ulp/ipoib/
drivers/infiniband/ulp/ipoib/ipoib_vlan.c: In function ‘ipoib_vlan_add’:
drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:52: error: ‘%04x’
directive output may be truncated writing 4 bytes into a region of size
between 0 and 15 [-Werror=format-truncation=]
  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
      |                                                    ^~~~
drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:48: note: directive
argument in the range [0, 65535]
  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
      |                                                ^~~~~~~~~
drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:9: note: ‘snprintf’ output
between 6 and 21 bytes into a destination of size 16
  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  188 |                  ppriv->dev->name, pkey);
      |                  ~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[6]: *** [scripts/Makefile.build:244: drivers/infiniband/ulp/ipoib/ipoib_vlan.o] Error 1
make[6]: *** Waiting for unfinished jobs....

Fixes: 9baa0b036410 ("IB/ipoib: Add rtnl_link_ops support")
Link: https://lore.kernel.org/r/e9d3e1fef69df4c9beaf402cc3ac342bad680791.1715240029.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
drivers/infiniband/ulp/ipoib/ipoib_vlan.c

index 4bd161e86f8dde84226023c95196f0d9a805ff81..562df2b3ef1876d4fe38dc178edb32a292035b8e 100644 (file)
@@ -184,8 +184,12 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
 
        ppriv = ipoib_priv(pdev);
 
-       snprintf(intf_name, sizeof(intf_name), "%s.%04x",
-                ppriv->dev->name, pkey);
+       /* If you increase IFNAMSIZ, update snprintf below
+        * to allow longer names.
+        */
+       BUILD_BUG_ON(IFNAMSIZ != 16);
+       snprintf(intf_name, sizeof(intf_name), "%.10s.%04x", ppriv->dev->name,
+                pkey);
 
        ndev = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name);
        if (IS_ERR(ndev)) {