Gcc-16 detects out of bounds reference in this code.
In function ‘nix_inl_selftest_work_cb’,
    inlined from ‘inl_outb_soft_exp_poll’ at 
../drivers/common/cnxk/roc_nix_inl_dev.c:1173:4,
    inlined from ‘nix_inl_outb_poll_thread’ at 
../drivers/common/cnxk/roc_nix_inl_dev.c:1201:6:
../drivers/common/cnxk/roc_nix_inl_dev.c:43:19: warning: array subscript 1 is 
outside array bounds of ‘uint64_t[1]’ {aka ‘long unsigned int[1]’} 
[-Warray-bounds=]
   43 |         uintptr_t work = gw[1];
      |                   ^~~~
../drivers/common/cnxk/roc_nix_inl_dev.c: In function 
‘nix_inl_outb_poll_thread’:
../drivers/common/cnxk/roc_nix_inl_dev.c:1172:34: note: at offset 8 into object 
‘tmp’ of size 8
 1172 |                         uint64_t tmp = ~(uint32_t)0x0;
      |                                  ^~~

Fixes: bea5d990a93b ("net/cnxk: support outbound soft expiry notification")
Cc: [email protected]
Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/common/cnxk/roc_nix_inl_dev.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/common/cnxk/roc_nix_inl_dev.c 
b/drivers/common/cnxk/roc_nix_inl_dev.c
index 1eb96f913a..3a4f1ac1e7 100644
--- a/drivers/common/cnxk/roc_nix_inl_dev.c
+++ b/drivers/common/cnxk/roc_nix_inl_dev.c
@@ -1169,12 +1169,10 @@ inl_outb_soft_exp_poll(struct nix_inl_dev *inl_dev, 
uint32_t ring_idx)
                                                     (entry.s.data0 << 7));
 
                if (sa != NULL) {
-                       uint64_t tmp = ~(uint32_t)0x0;
-                       inl_dev->work_cb(&tmp, sa, NIX_INL_SOFT_EXPIRY_THRD, 
NULL, port_id);
-                       __atomic_store_n(ring_base + tail_l + 1, 0ULL,
-                                        __ATOMIC_RELAXED);
-                       __atomic_fetch_add((uint32_t *)ring_base, 1,
-                                          __ATOMIC_ACQ_REL);
+                       uint64_t tmp[2];
+                       inl_dev->work_cb(tmp, sa, NIX_INL_SOFT_EXPIRY_THRD, 
NULL, port_id);
+                       __atomic_store_n(ring_base + tail_l + 1, 0ULL, 
__ATOMIC_RELAXED);
+                       __atomic_fetch_add((uint32_t *)ring_base, 1, 
__ATOMIC_ACQ_REL);
                } else
                        plt_err("Invalid SA");
 
-- 
2.51.0

Reply via email to