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

Reply via email to