From patchwork Fri Dec 29 06:52:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Junxian Huang X-Patchwork-Id: 13506335 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C573F8BEB; Fri, 29 Dec 2023 06:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=hisilicon.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hisilicon.com Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4T1bkp6W2BzZfsj; Fri, 29 Dec 2023 14:56:18 +0800 (CST) Received: from kwepemi500006.china.huawei.com (unknown [7.221.188.68]) by mail.maildlp.com (Postfix) with ESMTPS id 0C0F21402DE; Fri, 29 Dec 2023 14:56:30 +0800 (CST) Received: from localhost.localdomain (10.67.165.2) by kwepemi500006.china.huawei.com (7.221.188.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 29 Dec 2023 14:56:29 +0800 From: Junxian Huang To: , , , CC: , , , , Subject: [PATCH iproute2-rc 2/2] rdma: Fix the error of accessing string variable outside the lifecycle Date: Fri, 29 Dec 2023 14:52:41 +0800 Message-ID: <20231229065241.554726-3-huangjunxian6@hisilicon.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20231229065241.554726-1-huangjunxian6@hisilicon.com> References: <20231229065241.554726-1-huangjunxian6@hisilicon.com> Precedence: bulk X-Mailing-List: linux-rdma@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemi500006.china.huawei.com (7.221.188.68) From: wenglianfa All these SPRINT_BUF(b) definitions are inside the 'if' block, but accessed outside the 'if' block through the pointers 'comm'. This leads to empty 'comm' attribute when querying resource information. So move the definitions to the beginning of the functions to extend their life cycle. Before: $ rdma res show srq dev hns_0 srqn 0 type BASIC lqpn 18 pdn 5 pid 7775 comm After: $ rdma res show srq dev hns_0 srqn 0 type BASIC lqpn 18 pdn 5 pid 7775 comm ib_send_bw Fixes: 1808f002dfdd ("lib/fs: fix memory leak in get_task_name()") Signed-off-by: wenglianfa Signed-off-by: Junxian Huang Reviewed-by: Petr Machata Acked-by: Andrea Claudi --- rdma/res-cmid.c | 3 +-- rdma/res-cq.c | 3 +-- rdma/res-ctx.c | 3 +-- rdma/res-mr.c | 3 +-- rdma/res-pd.c | 3 +-- rdma/res-qp.c | 3 +-- rdma/res-srq.c | 3 +-- rdma/stat.c | 3 +-- 8 files changed, 8 insertions(+), 16 deletions(-) diff --git a/rdma/res-cmid.c b/rdma/res-cmid.c index 7371c3a6..595af848 100644 --- a/rdma/res-cmid.c +++ b/rdma/res-cmid.c @@ -102,6 +102,7 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx, uint32_t lqpn = 0, ps; uint32_t cm_idn = 0; char *comm = NULL; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_STATE] || !nla_line[RDMA_NLDEV_ATTR_RES_PS]) @@ -159,8 +160,6 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx, goto out; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-cq.c b/rdma/res-cq.c index 2cfa4994..80994a03 100644 --- a/rdma/res-cq.c +++ b/rdma/res-cq.c @@ -63,6 +63,7 @@ static int res_cq_line(struct rd *rd, const char *name, int idx, uint32_t cqn = 0; uint64_t users; uint32_t cqe; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] || !nla_line[RDMA_NLDEV_ATTR_RES_USECNT]) @@ -84,8 +85,6 @@ static int res_cq_line(struct rd *rd, const char *name, int idx, goto out; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-ctx.c b/rdma/res-ctx.c index 500186d9..99736ea0 100644 --- a/rdma/res-ctx.c +++ b/rdma/res-ctx.c @@ -13,13 +13,12 @@ static int res_ctx_line(struct rd *rd, const char *name, int idx, char *comm = NULL; uint32_t ctxn = 0; uint32_t pid = 0; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_CTXN]) return MNL_CB_ERROR; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-mr.c b/rdma/res-mr.c index fb48d5df..e6c81d11 100644 --- a/rdma/res-mr.c +++ b/rdma/res-mr.c @@ -30,6 +30,7 @@ static int res_mr_line(struct rd *rd, const char *name, int idx, uint32_t pdn = 0; uint32_t mrn = 0; uint32_t pid = 0; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN]) return MNL_CB_ERROR; @@ -47,8 +48,6 @@ static int res_mr_line(struct rd *rd, const char *name, int idx, goto out; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-pd.c b/rdma/res-pd.c index 66f91f42..0dbb310a 100644 --- a/rdma/res-pd.c +++ b/rdma/res-pd.c @@ -16,6 +16,7 @@ static int res_pd_line(struct rd *rd, const char *name, int idx, uint32_t pid = 0; uint32_t pdn = 0; uint64_t users; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_USECNT]) return MNL_CB_ERROR; @@ -34,8 +35,6 @@ static int res_pd_line(struct rd *rd, const char *name, int idx, nla_line[RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY]); if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-qp.c b/rdma/res-qp.c index c180a97e..cd2f4aa2 100644 --- a/rdma/res-qp.c +++ b/rdma/res-qp.c @@ -86,6 +86,7 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, uint32_t port = 0, pid = 0; uint32_t pdn = 0; char *comm = NULL; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN] || !nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] || @@ -146,8 +147,6 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, goto out; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/res-srq.c b/rdma/res-srq.c index cf9209d7..758bb193 100644 --- a/rdma/res-srq.c +++ b/rdma/res-srq.c @@ -183,13 +183,12 @@ static int res_srq_line(struct rd *rd, const char *name, int idx, char qp_str[MAX_QP_STR_LEN] = {}; char *comm = NULL; uint8_t type = 0; + SPRINT_BUF(b); if (!nla_line[RDMA_NLDEV_ATTR_RES_SRQN]) return MNL_CB_ERROR; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b; diff --git a/rdma/stat.c b/rdma/stat.c index 3df2c98f..c7dde680 100644 --- a/rdma/stat.c +++ b/rdma/stat.c @@ -223,6 +223,7 @@ static int res_counter_line(struct rd *rd, const char *name, int index, struct nlattr *hwc_table, *qp_table; struct nlattr *nla_entry; const char *comm = NULL; + SPRINT_BUF(b); bool isfirst; int err; @@ -248,8 +249,6 @@ static int res_counter_line(struct rd *rd, const char *name, int index, return MNL_CB_OK; if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - SPRINT_BUF(b); - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); if (!get_task_name(pid, b, sizeof(b))) comm = b;