From: Akhil Goyal <gak...@marvell.com> mbuf->rearm_data is a zero length array and it is being used to set data from that location. This shows an error in static code analysis. Hence it is typecast to a pointer which can be used to set values accordingly.
Fixes: c062f5726f61 ("net/cnxk: support IP reassembly") Signed-off-by: Akhil Goyal <gak...@marvell.com> --- drivers/net/cnxk/cn10k_rx.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h index 55ccf2023c..982fd26045 100644 --- a/drivers/net/cnxk/cn10k_rx.h +++ b/drivers/net/cnxk/cn10k_rx.h @@ -510,6 +510,7 @@ nix_sec_meta_to_mbuf(uint64_t cq_w1, uint64_t cq_w5, uintptr_t inb_sa, (const struct cpt_parse_hdr_s *)cpth; uint64_t mbuf_init = vgetq_lane_u64(*rearm, 0); struct cn10k_inb_priv_data *inb_priv; + uintptr_t p; /* Clear checksum flags */ *ol_flags &= ~(RTE_MBUF_F_RX_L4_CKSUM_MASK | @@ -530,7 +531,8 @@ nix_sec_meta_to_mbuf(uint64_t cq_w1, uint64_t cq_w5, uintptr_t inb_sa, /* First frag len */ inner->pkt_len = vgetq_lane_u16(*rx_desc_field1, 2); inner->data_len = vgetq_lane_u16(*rx_desc_field1, 4); - *(uint64_t *)(&inner->rearm_data) = mbuf_init; + p = (uintptr_t)&inner->rearm_data; + *(uint64_t *)p = mbuf_init; /* Reassembly success */ nix_sec_reassemble_frags(hdr, inner, cq_w1, cq_w5, mbuf_init); @@ -545,7 +547,7 @@ nix_sec_meta_to_mbuf(uint64_t cq_w1, uint64_t cq_w5, uintptr_t inb_sa, *rx_desc_field1, 4); /* Data offset might be updated */ - mbuf_init = *(uint64_t *)(&inner->rearm_data); + mbuf_init = *(uint64_t *)p; *rearm = vsetq_lane_u64(mbuf_init, *rearm, 0); } else { /* Reassembly failure */ @@ -628,6 +630,7 @@ nix_cqe_xtract_mseg(const union nix_rx_parse_u *rx, struct rte_mbuf *mbuf, uint64_t cq_w1; int64_t len; uint64_t sg; + uintptr_t p; cq_w1 = *(const uint64_t *)rx; if (flags & NIX_RX_REAS_F) @@ -703,7 +706,8 @@ nix_cqe_xtract_mseg(const union nix_rx_parse_u *rx, struct rte_mbuf *mbuf, mbuf->data_len = sg_len; sg = sg >> 16; - *(uint64_t *)(&mbuf->rearm_data) = rearm & ~0xFFFF; + p = (uintptr_t)&mbuf->rearm_data; + *(uint64_t *)p = rearm & ~0xFFFF; nb_segs--; iova_list++; @@ -753,7 +757,8 @@ nix_cqe_xtract_mseg(const union nix_rx_parse_u *rx, struct rte_mbuf *mbuf, head->nb_segs = nb_segs; } mbuf = next_frag; - *(uint64_t *)(&mbuf->rearm_data) = rearm + ldptr; + p = (uintptr_t)&mbuf->rearm_data; + *(uint64_t *)p = rearm + ldptr; mbuf->data_len = (sg & 0xFFFF) - ldptr - (flags & NIX_RX_OFFLOAD_TSTAMP_F ? CNXK_NIX_TIMESYNC_RX_OFFSET : 0); @@ -781,6 +786,7 @@ cn10k_nix_cqe_to_mbuf(const struct nix_cqe_hdr_s *cq, const uint32_t tag, const uint64_t w1 = *(const uint64_t *)rx; uint16_t len = rx->pkt_lenm1 + 1; uint64_t ol_flags = 0; + uintptr_t p; if (flag & NIX_RX_OFFLOAD_PTYPE_F) mbuf->packet_type = nix_ptype_get(lookup_mem, w1); @@ -818,7 +824,8 @@ cn10k_nix_cqe_to_mbuf(const struct nix_cqe_hdr_s *cq, const uint32_t tag, mbuf->ol_flags = ol_flags; mbuf->pkt_len = len; mbuf->data_len = len; - *(uint64_t *)(&mbuf->rearm_data) = val; + p = (uintptr_t)&mbuf->rearm_data; + *(uint64_t *)p = val; } if (flag & NIX_RX_MULTI_SEG_F) -- 2.25.1