]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
rdma: make RES_PID and RES_KERN_NAME alternative to each other
authorAndrea Claudi <aclaudi@redhat.com>
Tue, 8 Mar 2022 17:04:57 +0000 (18:04 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Sat, 12 Mar 2022 03:16:50 +0000 (19:16 -0800)
RDMA_NLDEV_ATTR_RES_PID and RDMA_NLDEV_ATTR_RES_KERN_NAME cannot be set
together, as evident for the fill_res_name_pid() function in the kernel
infiniband driver. This commit makes this clear at first glance, using
an else branch for the RDMA_NLDEV_ATTR_RES_KERN_NAME case.

This also helps coverity to better understand this code and avoid
producing a bogus warning complaining about mnl_attr_get_str overwriting
comme, and thus leaking the storage that comm points to.

Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
rdma/res-cmid.c
rdma/res-cq.c
rdma/res-ctx.c
rdma/res-mr.c
rdma/res-pd.c
rdma/res-qp.c
rdma/res-srq.c
rdma/stat.c

index b532d7f4391136f73f73baddec3d4cac217eb7b4..7371c3a681849537635d0dc350cc61c09d1bfc24 100644 (file)
@@ -164,6 +164,10 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
@@ -176,12 +180,6 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
                                nla_line[RDMA_NLDEV_ATTR_RES_CM_IDN]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-       }
-
        open_json_object(NULL);
        print_link(rd, idx, name, port, nla_line);
        res_print_u32(rd, "cm-idn", cm_idn,
index a4625afc35a9aee6b7e42e4cac94fe0639b6da6d..2cfa4994e77a972b5349fc8756ad75703e6927b8 100644 (file)
@@ -89,6 +89,10 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
@@ -106,11 +110,6 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
                                nla_line[RDMA_NLDEV_ATTR_RES_CTXN]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        open_json_object(NULL);
        print_dev(rd, idx, name);
        res_print_u32(rd, "cqn", cqn, nla_line[RDMA_NLDEV_ATTR_RES_CQN]);
index 79ecbf674980fe255f2b8f7a78c4374b1fa0efd9..500186d9ff592943c24ac3b30238c4449b2480ba 100644 (file)
@@ -23,6 +23,10 @@ static int res_ctx_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
@@ -36,11 +40,6 @@ static int res_ctx_line(struct rd *rd, const char *name, int idx,
                                nla_line[RDMA_NLDEV_ATTR_RES_CTXN]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        open_json_object(NULL);
        print_dev(rd, idx, name);
        res_print_u32(rd, "ctxn", ctxn, nla_line[RDMA_NLDEV_ATTR_RES_CTXN]);
index 7153a6fea61a75dc26a5e379c40622282838682d..fb48d5df6cad1fb47f16e69825c72636a2aa715a 100644 (file)
@@ -52,6 +52,10 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
@@ -70,10 +74,6 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
                                nla_line[RDMA_NLDEV_ATTR_RES_PDN]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        open_json_object(NULL);
        print_dev(rd, idx, name);
        res_print_u32(rd, "mrn", mrn, nla_line[RDMA_NLDEV_ATTR_RES_MRN]);
index 09c1040c59d0ec300c026c2b6e5903f440b19468..66f91f42860fd4d3e49a42dd8196eadebff273d4 100644 (file)
@@ -39,6 +39,10 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
@@ -58,11 +62,6 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
                                nla_line[RDMA_NLDEV_ATTR_RES_PDN]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        open_json_object(NULL);
        print_dev(rd, idx, name);
        res_print_u32(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN]);
index 151accb9deb1a5c9e5ec4159162a0556ac314486..c180a97e31edc1d8263f9612cf704a123c50a824 100644 (file)
@@ -151,17 +151,16 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
 
        if (rd_is_filtered_attr(rd, "pid", pid,
                                nla_line[RDMA_NLDEV_ATTR_RES_PID]))
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        open_json_object(NULL);
        print_link(rd, idx, name, port, nla_line);
        res_print_u32(rd, "lqpn", lqpn, nla_line[RDMA_NLDEV_ATTR_RES_LQPN]);
index f3a652d82f8cc6c70f27b970d589b71db2c6aef6..186ae281ddc7bed25ee5af101615499a849fcb6e 100644 (file)
@@ -179,7 +179,12 @@ static int res_srq_line(struct rd *rd, const char *name, int idx,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
+
        if (rd_is_filtered_attr(rd, "pid", pid,
                                nla_line[RDMA_NLDEV_ATTR_RES_PID]))
                goto out;
@@ -212,11 +217,6 @@ static int res_srq_line(struct rd *rd, const char *name, int idx,
                        MNL_CB_OK)
                goto out;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               /* discard const from mnl_attr_get_str */
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        open_json_object(NULL);
        print_dev(rd, idx, name);
        res_print_u32(rd, "srqn", srqn, nla_line[RDMA_NLDEV_ATTR_RES_SRQN]);
index ab0629155581be715de7f30c8364a35eb6796452..aad8815ce95319532a6a5332e9199522fb2d78ef 100644 (file)
@@ -253,15 +253,16 @@ static int res_counter_line(struct rd *rd, const char *name, int index,
                pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
                if (!get_task_name(pid, b, sizeof(b)))
                        comm = b;
+       } else if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) {
+               /* discard const from mnl_attr_get_str */
+               comm = (char *)mnl_attr_get_str(
+                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
        }
+
        if (rd_is_filtered_attr(rd, "pid", pid,
                                nla_line[RDMA_NLDEV_ATTR_RES_PID]))
                return MNL_CB_OK;
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
-               comm = (char *)mnl_attr_get_str(
-                       nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
        mnl_attr_for_each_nested(nla_entry, qp_table) {
                struct nlattr *qp_line[RDMA_NLDEV_ATTR_MAX] = {};