From: Danylo Vodopianov <dvo-...@napatech.com> CI found couple coverity problems which were fixed in this commit.
CID: 448983, 448980 Memory - corruptions (OVERRUN) Add check both indices within bounds before calling the macro Coverity issue: 448983 Fixes: 6e8b7f11205f ("net/ntnic: add categorizer (CAT) FPGA module") Signed-off-by: Danylo Vodopianov <dvo-...@napatech.com> --- .../ntnic/nthw/flow_api/hw_mod/hw_mod_hsh.c | 17 ++++++++++++++++- .../ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_hsh.c b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_hsh.c index 1750d09afb..cc8db2fae5 100644 --- a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_hsh.c +++ b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_hsh.c @@ -121,8 +121,23 @@ static int hw_mod_hsh_rcp_mod(struct flow_api_backend_s *be, enum hw_hsh_e field INDEX_TOO_LARGE_LOG; return INDEX_TOO_LARGE; } + /* Size of the structure */ + size_t element_size = sizeof(struct hsh_v5_rcp_s); + /* Size of the buffer */ + size_t buffer_size = sizeof(be->hsh.v5.rcp); - DO_COMPARE_INDEXS(be->hsh.v5.rcp, struct hsh_v5_rcp_s, index, word_off); + /* Calculate the maximum valid index (number of elements in the buffer) */ + size_t max_idx = buffer_size / element_size; + + /* Check that both indices are within bounds before calling the macro */ + if (index < max_idx && word_off < max_idx) { + DO_COMPARE_INDEXS(be->hsh.v5.rcp, struct hsh_v5_rcp_s, index, + word_off); + + } else { + INDEX_TOO_LARGE_LOG; + return INDEX_TOO_LARGE; + } break; case HW_HSH_RCP_FIND: diff --git a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c index 59285405ba..147a06ac2b 100644 --- a/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c +++ b/drivers/net/ntnic/nthw/flow_api/hw_mod/hw_mod_pdb.c @@ -131,8 +131,22 @@ static int hw_mod_pdb_rcp_mod(struct flow_api_backend_s *be, enum hw_pdb_e field INDEX_TOO_LARGE_LOG; return INDEX_TOO_LARGE; } - - DO_COMPARE_INDEXS(be->pdb.v9.rcp, struct pdb_v9_rcp_s, index, *value); + /* Size of the structure */ + size_t element_size = sizeof(struct pdb_v9_rcp_s); + /* Size of the buffer */ + size_t buffer_size = sizeof(be->pdb.v9.rcp); + + /* Calculate the maximum valid index (number of elements in the buffer) */ + size_t max_idx = buffer_size / element_size; + + /* Check that both indices are within bounds before calling the macro */ + if (index < max_idx && *value < max_idx) { + DO_COMPARE_INDEXS(be->pdb.v9.rcp, struct pdb_v9_rcp_s, index, + *value); + } else { + INDEX_TOO_LARGE_LOG; + return INDEX_TOO_LARGE; + } break; case HW_PDB_RCP_DESCRIPTOR: -- 2.45.0