From: "Renyong Wan" <wanry@yunsilicon.com>
To: <dev@dpdk.org>
Cc: <thomas@monjalon.net>, <stephen@networkplumber.org>,
<qianr@yunsilicon.com>, <nana@yunsilicon.com>,
<zhangxx@yunsilicon.com>, <xudw@yunsilicon.com>,
<jacky@yunsilicon.com>, <weihg@yunsilicon.com>,
<zhenghy@yunsilicon.com>
Subject: [PATCH 12/12] net/xsc: avoid pointer cast to unrelated class
Date: Sat, 22 Feb 2025 11:57:57 +0800 [thread overview]
Message-ID: <20250222035756.2290067-13-wanry@yunsilicon.com> (raw)
In-Reply-To: <20250222035732.2290067-1-wanry@yunsilicon.com>
This issue was reported by PVS studio, described as:
https://pvs-studio.com/en/docs/warnings/v1027/
Signed-off-by: Renyong Wan <wanry@yunsilicon.com>
---
drivers/net/xsc/xsc_np.c | 10 +++--
drivers/net/xsc/xsc_rx.c | 12 ++---
drivers/net/xsc/xsc_vfio.c | 91 +++++++++++++++++++++++---------------
3 files changed, 68 insertions(+), 45 deletions(-)
diff --git a/drivers/net/xsc/xsc_np.c b/drivers/net/xsc/xsc_np.c
index 7ff39f83c9..f96797b7a4 100644
--- a/drivers/net/xsc/xsc_np.c
+++ b/drivers/net/xsc/xsc_np.c
@@ -162,18 +162,20 @@ xsc_dev_np_exec(struct xsc_dev *xdev, void *cmd, int len, int table, int opmod)
int data_len;
int cmd_len;
int ret;
+ void *cmd_buf;
data_len = sizeof(struct xsc_np_data_tl) + len;
in_len = sizeof(struct xsc_np_mbox_in) + data_len;
out_len = sizeof(struct xsc_np_mbox_out) + data_len;
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc np cmd memory");
return -rte_errno;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_EXEC_NP);
in->len = rte_cpu_to_be_16(data_len);
@@ -185,10 +187,10 @@ xsc_dev_np_exec(struct xsc_dev *xdev, void *cmd, int len, int table, int opmod)
if (cmd && len)
memcpy(tl + 1, cmd, len);
- out = (struct xsc_np_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_dev_mailbox_exec(xdev, in, in_len, out, out_len);
- free(in);
+ free(cmd_buf);
return ret;
}
diff --git a/drivers/net/xsc/xsc_rx.c b/drivers/net/xsc/xsc_rx.c
index ca832dab23..a702b9592b 100644
--- a/drivers/net/xsc/xsc_rx.c
+++ b/drivers/net/xsc/xsc_rx.c
@@ -276,6 +276,7 @@ xsc_rss_qp_create(struct xsc_ethdev_priv *priv, int port_id)
struct xsc_dev *xdev = priv->xdev;
struct xsc_hwinfo *hwinfo = &xdev->hwinfo;
char name[RTE_ETH_NAME_MAX_LEN] = { 0 };
+ void *cmd_buf;
rxq_data = xsc_rxq_get(priv, 0);
if (rxq_data == NULL)
@@ -293,13 +294,14 @@ xsc_rss_qp_create(struct xsc_ethdev_priv *priv, int port_id)
in_len = sizeof(struct xsc_cmd_create_multiqp_mbox_in) + entry_total_len;
out_len = sizeof(struct xsc_cmd_create_multiqp_mbox_out) + entry_total_len;
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Alloc rss qp create cmd memory failed");
goto error;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->qp_num = rte_cpu_to_be_16((uint16_t)priv->num_rq);
in->qp_type = XSC_QUEUE_TYPE_RAW;
@@ -333,7 +335,7 @@ xsc_rss_qp_create(struct xsc_ethdev_priv *priv, int port_id)
}
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_CREATE_MULTI_QP);
- out = (struct xsc_cmd_create_multiqp_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_dev_mailbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR,
@@ -365,11 +367,11 @@ xsc_rss_qp_create(struct xsc_ethdev_priv *priv, int port_id)
rxq_data->rq_db, rxq_data->qpn);
}
- free(in);
+ free(cmd_buf);
return 0;
error:
- free(in);
+ free(cmd_buf);
return -rte_errno;
}
diff --git a/drivers/net/xsc/xsc_vfio.c b/drivers/net/xsc/xsc_vfio.c
index 2cd796ba26..8330483523 100644
--- a/drivers/net/xsc/xsc_vfio.c
+++ b/drivers/net/xsc/xsc_vfio.c
@@ -70,22 +70,24 @@ xsc_vfio_hwinfo_init(struct xsc_dev *xdev)
struct xsc_cmd_query_hca_cap_mbox_in *in;
struct xsc_cmd_query_hca_cap_mbox_out *out;
struct xsc_cmd_hca_cap *hca_cap;
+ void *cmd_buf;
in_len = sizeof(struct xsc_cmd_query_hca_cap_mbox_in);
out_len = sizeof(struct xsc_cmd_query_hca_cap_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
PMD_DRV_LOG(ERR, "Failed to alloc dev hwinfo cmd memory");
rte_errno = ENOMEM;
return -rte_errno;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_QUERY_HCA_CAP);
in->hdr.ver = rte_cpu_to_be_16(XSC_CMD_QUERY_HCA_CAP_V1);
- out = (struct xsc_cmd_query_hca_cap_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
@@ -126,7 +128,7 @@ xsc_vfio_hwinfo_init(struct xsc_dev *xdev)
xsc_vfio_pcie_no_init(&xdev->hwinfo);
exit:
- free(in);
+ free(cmd_buf);
return ret;
}
@@ -189,22 +191,24 @@ xsc_vfio_destroy_qp(void *qp)
struct xsc_cmd_destroy_qp_mbox_in *in;
struct xsc_cmd_destroy_qp_mbox_out *out;
struct xsc_vfio_qp *data = (struct xsc_vfio_qp *)qp;
+ void *cmd_buf;
in_len = sizeof(struct xsc_cmd_destroy_qp_mbox_in);
out_len = sizeof(struct xsc_cmd_destroy_qp_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc qp destroy cmd memory");
return -rte_errno;
}
- memset(in, 0, cmd_len);
+ in = cmd_buf;
+ memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_DESTROY_QP);
in->qpn = rte_cpu_to_be_32(data->qpn);
- out = (struct xsc_cmd_destroy_qp_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(data->xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR, "Failed to destroy qp, type=%d, err=%d, out.status=%u",
@@ -218,7 +222,7 @@ xsc_vfio_destroy_qp(void *qp)
rte_free(qp);
exit:
- free(in);
+ free(cmd_buf);
return ret;
}
@@ -230,22 +234,25 @@ xsc_vfio_destroy_cq(void *cq)
struct xsc_cmd_destroy_cq_mbox_in *in;
struct xsc_cmd_destroy_cq_mbox_out *out;
struct xsc_vfio_cq *data = (struct xsc_vfio_cq *)cq;
+ void *cmd_buf;
in_len = sizeof(struct xsc_cmd_destroy_cq_mbox_in);
out_len = sizeof(struct xsc_cmd_destroy_cq_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc cq destroy cmd memory");
return -rte_errno;
}
+
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_DESTROY_CQ);
in->cqn = rte_cpu_to_be_32(data->cqn);
- out = (struct xsc_cmd_destroy_cq_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(data->xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR, "Failed to destroy cq, type=%d, err=%d, out.status=%u",
@@ -259,7 +266,7 @@ xsc_vfio_destroy_cq(void *cq)
rte_free(cq);
exit:
- free(in);
+ free(cmd_buf);
return ret;
}
@@ -314,20 +321,22 @@ xsc_vfio_modify_qp_status(struct xsc_dev *xdev, uint32_t qpn, int num, int opcod
int in_len, out_len, cmd_len;
struct xsc_cmd_modify_qp_mbox_in *in;
struct xsc_cmd_modify_qp_mbox_out *out;
+ void *cmd_buf;
in_len = sizeof(struct xsc_cmd_modify_qp_mbox_in);
out_len = sizeof(struct xsc_cmd_modify_qp_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
PMD_DRV_LOG(ERR, "Failed to alloc cmdq qp modify status");
rte_errno = ENOMEM;
return -rte_errno;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
- out = (struct xsc_cmd_modify_qp_mbox_out *)in;
+ out = cmd_buf;
for (i = 0; i < num; i++) {
in->hdr.opcode = rte_cpu_to_be_16(opcode);
@@ -346,7 +355,7 @@ xsc_vfio_modify_qp_status(struct xsc_dev *xdev, uint32_t qpn, int num, int opcod
}
exit:
- free(in);
+ free(cmd_buf);
return ret;
}
@@ -357,18 +366,20 @@ xsc_vfio_modify_qp_qostree(struct xsc_dev *xdev, uint16_t qpn)
int in_len, out_len, cmd_len;
struct xsc_cmd_modify_raw_qp_mbox_in *in;
struct xsc_cmd_modify_raw_qp_mbox_out *out;
+ void *cmd_buf;
in_len = sizeof(struct xsc_cmd_modify_raw_qp_mbox_in);
out_len = sizeof(struct xsc_cmd_modify_raw_qp_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
PMD_DRV_LOG(ERR, "Failed to alloc cmdq qp modify qostree");
rte_errno = ENOMEM;
return -rte_errno;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_MODIFY_RAW_QP);
in->req.prio = 0;
@@ -377,7 +388,7 @@ xsc_vfio_modify_qp_qostree(struct xsc_dev *xdev, uint16_t qpn)
in->req.func_id = rte_cpu_to_be_16(xdev->hwinfo.func_id);
in->req.dma_direct = 0;
in->req.qpn = rte_cpu_to_be_16(qpn);
- out = (struct xsc_cmd_modify_raw_qp_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
@@ -389,7 +400,7 @@ xsc_vfio_modify_qp_qostree(struct xsc_dev *xdev, uint16_t qpn)
}
exit:
- free(in);
+ free(cmd_buf);
return ret;
}
@@ -413,6 +424,7 @@ xsc_vfio_rx_cq_create(struct xsc_dev *xdev, struct xsc_rx_cq_params *cq_params,
struct xsc_cqe *cqes;
struct xsc_cmd_create_cq_mbox_in *in = NULL;
struct xsc_cmd_create_cq_mbox_out *out = NULL;
+ void *cmd_buf;
cqe_n = cq_params->wqe_s;
log_cq_sz = rte_log2_u32(cqe_n);
@@ -430,13 +442,14 @@ xsc_vfio_rx_cq_create(struct xsc_dev *xdev, struct xsc_rx_cq_params *cq_params,
return -rte_errno;
}
- in = malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc rx cq exec cmd memory");
goto error;
}
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_CREATE_CQ);
in->ctx.eqn = 0;
@@ -460,7 +473,7 @@ xsc_vfio_rx_cq_create(struct xsc_dev *xdev, struct xsc_rx_cq_params *cq_params,
for (i = 0; i < pa_num; i++)
in->pas[i] = rte_cpu_to_be_64(cq_pas->iova + i * XSC_PAGE_SIZE);
- out = (struct xsc_cmd_create_cq_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR,
@@ -486,11 +499,11 @@ xsc_vfio_rx_cq_create(struct xsc_dev *xdev, struct xsc_rx_cq_params *cq_params,
PMD_DRV_LOG(INFO, "Port id=%d, Rx cqe_n:%d, cqn:%u",
port_id, cq_info->cqe_n, cq_info->cqn);
- free(in);
+ free(cmd_buf);
return 0;
error:
- free(in);
+ free(cmd_buf);
rte_memzone_free(cq_pas);
rte_free(cq);
return -rte_errno;
@@ -513,6 +526,7 @@ xsc_vfio_tx_cq_create(struct xsc_dev *xdev, struct xsc_tx_cq_params *cq_params,
int cqe_s = 1 << cq_params->elts_n;
uint64_t iova;
int i;
+ void *cmd_buf = NULL;
cq = rte_zmalloc(NULL, sizeof(struct xsc_vfio_cq), 0);
if (cq == NULL) {
@@ -539,12 +553,14 @@ xsc_vfio_tx_cq_create(struct xsc_dev *xdev, struct xsc_tx_cq_params *cq_params,
in_len = (sizeof(struct xsc_cmd_create_cq_mbox_in) + (pa_num * sizeof(uint64_t)));
out_len = sizeof(struct xsc_cmd_create_cq_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = (struct xsc_cmd_create_cq_mbox_in *)malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc tx cq exec cmd memory");
goto error;
}
+
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_CREATE_CQ);
@@ -557,7 +573,7 @@ xsc_vfio_tx_cq_create(struct xsc_dev *xdev, struct xsc_tx_cq_params *cq_params,
for (i = 0; i < pa_num; i++)
in->pas[i] = rte_cpu_to_be_64(iova + i * XSC_PAGE_SIZE);
- out = (struct xsc_cmd_create_cq_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR, "Failed to create tx cq, port id=%u, err=%d, out.status=%u",
@@ -583,11 +599,11 @@ xsc_vfio_tx_cq_create(struct xsc_dev *xdev, struct xsc_tx_cq_params *cq_params,
((volatile struct xsc_cqe *)(cqes + i))->owner = 1;
cq_info->cqes = cqes;
- free(in);
+ free(cmd_buf);
return 0;
error:
- free(in);
+ free(cmd_buf);
rte_memzone_free(cq_pas);
rte_free(cq);
return -rte_errno;
@@ -613,6 +629,7 @@ xsc_vfio_tx_qp_create(struct xsc_dev *xdev, struct xsc_tx_qp_params *qp_params,
int i;
uint64_t iova;
char name[RTE_ETH_NAME_MAX_LEN] = {0};
+ void *cmd_buf = NULL;
qp = rte_zmalloc(NULL, sizeof(struct xsc_vfio_qp), 0);
if (qp == NULL) {
@@ -640,12 +657,14 @@ xsc_vfio_tx_qp_create(struct xsc_dev *xdev, struct xsc_tx_qp_params *qp_params,
in_len = (sizeof(struct xsc_cmd_create_qp_mbox_in) + (pa_num * sizeof(uint64_t)));
out_len = sizeof(struct xsc_cmd_create_qp_mbox_out);
cmd_len = RTE_MAX(in_len, out_len);
- in = (struct xsc_cmd_create_qp_mbox_in *)malloc(cmd_len);
- if (in == NULL) {
+ cmd_buf = malloc(cmd_len);
+ if (cmd_buf == NULL) {
rte_errno = ENOMEM;
PMD_DRV_LOG(ERR, "Failed to alloc tx qp exec cmd memory");
goto error;
}
+
+ in = cmd_buf;
memset(in, 0, cmd_len);
in->hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_CREATE_QP);
@@ -663,7 +682,7 @@ xsc_vfio_tx_qp_create(struct xsc_dev *xdev, struct xsc_tx_qp_params *qp_params,
for (i = 0; i < pa_num; i++)
in->req.pas[i] = rte_cpu_to_be_64(iova + i * XSC_PAGE_SIZE);
- out = (struct xsc_cmd_create_qp_mbox_out *)in;
+ out = cmd_buf;
ret = xsc_vfio_mbox_exec(xdev, in, in_len, out, out_len);
if (ret != 0 || out->hdr.status != 0) {
PMD_DRV_LOG(ERR, "Failed to create tx qp, port id=%u, err=%d, out.status=%u",
@@ -685,11 +704,11 @@ xsc_vfio_tx_qp_create(struct xsc_dev *xdev, struct xsc_tx_qp_params *qp_params,
else
qp_info->qp_db = (uint32_t *)((uint8_t *)xdev->bar_addr + XSC_PF_TX_DB_ADDR);
- free(in);
+ free(cmd_buf);
return 0;
error:
- free(in);
+ free(cmd_buf);
rte_memzone_free(qp_pas);
rte_free(qp);
return -rte_errno;
--
2.25.1
next prev parent reply other threads:[~2025-02-22 3:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-22 3:57 [PATCH 00/12] net/xsc: Resolve issues from PVS and Coverity Scan Renyong Wan
2025-02-22 3:57 ` [PATCH 01/12] net/xsc: avoid integer overflow Renyong Wan
2025-02-22 3:57 ` [PATCH 02/12] net/xsc: remove useless call Renyong Wan
2025-02-22 3:57 ` [PATCH 03/12] net/xsc: address incorrect format warnings Renyong Wan
2025-02-22 3:57 ` [PATCH 04/12] net/xsc: remove always-true if expressions Renyong Wan
2025-02-22 3:57 ` [PATCH 05/12] net/xsc: avoid variable is assigned but not used Renyong Wan
2025-02-22 3:57 ` [PATCH 06/12] net/xsc: check possible null pointer dereference Renyong Wan
2025-02-22 3:57 ` [PATCH 07/12] net/xsc: avoid potential null pointer before used Renyong Wan
2025-02-22 3:57 ` [PATCH 08/12] net/xsc: remove always-true part of if expression Renyong Wan
2025-02-22 3:57 ` [PATCH 09/12] net/xsc: avoid assign the same value to a variable Renyong Wan
2025-02-22 3:57 ` [PATCH 10/12] net/xsc: avoid initialize by same function Renyong Wan
2025-02-22 3:57 ` [PATCH 11/12] net/xsc: optimize memcmp returns not 0 check Renyong Wan
2025-02-22 3:57 ` Renyong Wan [this message]
2025-02-22 17:30 ` [PATCH 00/12] net/xsc: Resolve issues from PVS and Coverity Scan Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250222035756.2290067-13-wanry@yunsilicon.com \
--to=wanry@yunsilicon.com \
--cc=dev@dpdk.org \
--cc=jacky@yunsilicon.com \
--cc=nana@yunsilicon.com \
--cc=qianr@yunsilicon.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
--cc=weihg@yunsilicon.com \
--cc=xudw@yunsilicon.com \
--cc=zhangxx@yunsilicon.com \
--cc=zhenghy@yunsilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).