net: enetc: fix array underflow in error handling code
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 9 Apr 2021 12:24:28 +0000 (15:24 +0300)
committerJakub Kicinski <kuba@kernel.org>
Fri, 9 Apr 2021 23:48:29 +0000 (16:48 -0700)
This loop will try to unmap enetc_unmap_tx_buff[-1] and crash.

Fixes: 9d2b68cc108d ("net: enetc: add support for XDP_REDIRECT")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/YHBHfCY/yv3EnM9z@mwanda
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/enetc/enetc.c

index 57049ae972015ae568fb0543e51a7454bfe06bce..d86395775ed01b99d308401fff2028b25fe9bbb4 100644 (file)
@@ -895,7 +895,7 @@ static int enetc_xdp_frame_to_xdp_tx_swbd(struct enetc_bdr *tx_ring,
                dma = dma_map_single(tx_ring->dev, data, len, DMA_TO_DEVICE);
                if (unlikely(dma_mapping_error(tx_ring->dev, dma))) {
                        /* Undo the DMA mapping for all fragments */
-                       while (n-- >= 0)
+                       while (--n >= 0)
                                enetc_unmap_tx_buff(tx_ring, &xdp_tx_arr[n]);
 
                        netdev_err(tx_ring->ndev, "DMA map error\n");