Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/nldev: Add NULL check to silence false warnings

Using nlmsg_put causes static analysis tools to many
false positives of not checking the return value of nlmsg_put.

In all uses in nldev.c, payload parameter is 0 so NULL will never
be returned. So let's add useless checks to silence the warnings.

Signed-off-by: Or Har-Toov <ohartoov@nvidia.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Link: https://lore.kernel.org/r/bd924da89d5b4f5291a4a01d9b5ae47c0a9b6a3f.1669636336.git.leonro@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>

authored by

Or Har-Toov and committed by
Leon Romanovsky
67e6272d 2d6c66f5

+36 -8
+36 -8
drivers/infiniband/core/nldev.c
··· 1043 1043 nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq, 1044 1044 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET), 1045 1045 0, 0); 1046 + if (!nlh) { 1047 + err = -EMSGSIZE; 1048 + goto err_free; 1049 + } 1046 1050 1047 1051 err = fill_dev_info(msg, device); 1048 1052 if (err) ··· 1132 1128 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET), 1133 1129 0, NLM_F_MULTI); 1134 1130 1135 - if (fill_dev_info(skb, device)) { 1131 + if (!nlh || fill_dev_info(skb, device)) { 1136 1132 nlmsg_cancel(skb, nlh); 1137 1133 goto out; 1138 1134 } ··· 1191 1187 nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq, 1192 1188 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET), 1193 1189 0, 0); 1190 + if (!nlh) { 1191 + err = -EMSGSIZE; 1192 + goto err_free; 1193 + } 1194 1194 1195 1195 err = fill_port_info(msg, device, port, sock_net(skb->sk)); 1196 1196 if (err) ··· 1256 1248 RDMA_NLDEV_CMD_PORT_GET), 1257 1249 0, NLM_F_MULTI); 1258 1250 1259 - if (fill_port_info(skb, device, p, sock_net(skb->sk))) { 1251 + if (!nlh || fill_port_info(skb, device, p, sock_net(skb->sk))) { 1260 1252 nlmsg_cancel(skb, nlh); 1261 1253 goto out; 1262 1254 } ··· 1298 1290 nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq, 1299 1291 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_RES_GET), 1300 1292 0, 0); 1293 + if (!nlh) { 1294 + ret = -EMSGSIZE; 1295 + goto err_free; 1296 + } 1301 1297 1302 1298 ret = fill_res_info(msg, device); 1303 1299 if (ret) ··· 1333 1321 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_RES_GET), 1334 1322 0, NLM_F_MULTI); 1335 1323 1336 - if (fill_res_info(skb, device)) { 1324 + if (!nlh || fill_res_info(skb, device)) { 1337 1325 nlmsg_cancel(skb, nlh); 1338 1326 goto out; 1339 1327 } ··· 1468 1456 RDMA_NL_GET_OP(nlh->nlmsg_type)), 1469 1457 0, 0); 1470 1458 1471 - if (fill_nldev_handle(msg, device)) { 1459 + if (!nlh || fill_nldev_handle(msg, device)) { 1472 1460 ret = -EMSGSIZE; 1473 1461 goto err_free; 1474 1462 } ··· 1547 1535 RDMA_NL_GET_OP(cb->nlh->nlmsg_type)), 1548 1536 0, NLM_F_MULTI); 1549 1537 1550 - if (fill_nldev_handle(skb, device)) { 1538 + if (!nlh || fill_nldev_handle(skb, device)) { 1551 1539 ret = -EMSGSIZE; 1552 1540 goto err; 1553 1541 } ··· 1809 1797 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, 1810 1798 RDMA_NLDEV_CMD_GET_CHARDEV), 1811 1799 0, 0); 1800 + if (!nlh) { 1801 + err = -EMSGSIZE; 1802 + goto out_nlmsg; 1803 + } 1812 1804 1813 1805 data.nl_msg = msg; 1814 1806 err = ib_get_client_nl_info(ibdev, client_name, &data); ··· 1870 1854 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, 1871 1855 RDMA_NLDEV_CMD_SYS_GET), 1872 1856 0, 0); 1857 + if (!nlh) { 1858 + nlmsg_free(msg); 1859 + return -EMSGSIZE; 1860 + } 1873 1861 1874 1862 err = nla_put_u8(msg, RDMA_NLDEV_SYS_ATTR_NETNS_MODE, 1875 1863 (u8)ib_devices_shared_netns); ··· 2054 2034 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, 2055 2035 RDMA_NLDEV_CMD_STAT_SET), 2056 2036 0, 0); 2057 - if (fill_nldev_handle(msg, device) || 2037 + if (!nlh || fill_nldev_handle(msg, device) || 2058 2038 nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port)) { 2059 2039 ret = -EMSGSIZE; 2060 2040 goto err_free_msg; ··· 2123 2103 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, 2124 2104 RDMA_NLDEV_CMD_STAT_SET), 2125 2105 0, 0); 2106 + if (!nlh) { 2107 + ret = -EMSGSIZE; 2108 + goto err_fill; 2109 + } 2126 2110 2127 2111 cntn = nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_COUNTER_ID]); 2128 2112 qpn = nla_get_u32(tb[RDMA_NLDEV_ATTR_RES_LQPN]); ··· 2197 2173 RDMA_NLDEV_CMD_STAT_GET), 2198 2174 0, 0); 2199 2175 2200 - if (fill_nldev_handle(msg, device) || 2176 + if (!nlh || fill_nldev_handle(msg, device) || 2201 2177 nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port)) { 2202 2178 ret = -EMSGSIZE; 2203 2179 goto err_msg; ··· 2285 2261 RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, 2286 2262 RDMA_NLDEV_CMD_STAT_GET), 2287 2263 0, 0); 2264 + if (!nlh) { 2265 + ret = -EMSGSIZE; 2266 + goto err_msg; 2267 + } 2288 2268 2289 2269 ret = rdma_counter_get_mode(device, port, &mode, &mask); 2290 2270 if (ret) ··· 2421 2393 0, 0); 2422 2394 2423 2395 ret = -EMSGSIZE; 2424 - if (fill_nldev_handle(msg, device) || 2396 + if (!nlh || fill_nldev_handle(msg, device) || 2425 2397 nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port)) 2426 2398 goto err_msg; 2427 2399