If max_l2_ctx is very large, then adding the additional value could cause wraparound.
Reported-by: Christopher Ertl <christopher.e...@microsoft.com> Signed-off-by: Stephen Hemminger <step...@networkplumber.org> --- drivers/net/bnxt/bnxt_hwrm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index d878320aa110..099e04fa550a 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -651,8 +651,15 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) bp->first_vf_id = rte_le_to_cpu_16(resp->first_vf_id); bp->max_rx_em_flows = rte_le_to_cpu_16(resp->max_rx_em_flows); bp->max_l2_ctx = rte_le_to_cpu_16(resp->max_l2_ctxs); - if (!BNXT_CHIP_THOR(bp)) - bp->max_l2_ctx += bp->max_rx_em_flows; + if (!BNXT_CHIP_THOR(bp)) { + uint16_t max_l2_ctx; + + if (rte_add_overflow(bp->max_l2_ctx, bp->max_rx_em_flows, + &max_l2_ctx)) + return -EINVAL; + bp->max_l2_ctx = max_l2_ctx; + } + /* TODO: For now, do not support VMDq/RFS on VFs. */ if (BNXT_PF(bp)) { if (bp->pf.max_vfs) -- 2.20.1