RE: [PATCH linux-next] net:stmmac: Fix the unsigned expression compared with zero

From: Joakim Zhang
Date: Thu Jul 15 2021 - 06:12:09 EST



> -----Original Message-----
> From: menglong8.dong@xxxxxxxxx <menglong8.dong@xxxxxxxxx>
> Sent: 2021年7月15日 15:46
> To: davem@xxxxxxxxxxxxx
> Cc: peppe.cavallaro@xxxxxx; alexandre.torgue@xxxxxxxxxxx;
> joabreu@xxxxxxxxxxxx; kuba@xxxxxxxxxx; mcoquelin.stm32@xxxxxxxxx;
> netdev@xxxxxxxxxxxxxxx; linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx;
> linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Zhang
> Yunkai <zhang.yunkai@xxxxxxxxxx>; Zeal Robot <zealci@xxxxxxxxxx>
> Subject: [PATCH linux-next] net:stmmac: Fix the unsigned expression compared
> with zero
>
> From: Zhang Yunkai <zhang.yunkai@xxxxxxxxxx>
>
> WARNING: Unsigned expression "queue" compared with zero.
> Reported-by: Zeal Robot <zealci@xxxxxxxxxx>
> Signed-off-by: Zhang Yunkai <zhang.yunkai@xxxxxxxxxx>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 7b8404a21544..a4cf2c640531 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -1699,7 +1699,7 @@ static int init_dma_rx_desc_rings(struct net_device
> *dev, gfp_t flags)
> return 0;
>
> err_init_rx_buffers:
> - while (queue >= 0) {
> + do {
> struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
>
> if (rx_q->xsk_pool)
> @@ -1710,11 +1710,7 @@ static int init_dma_rx_desc_rings(struct
> net_device *dev, gfp_t flags)
> rx_q->buf_alloc_num = 0;
> rx_q->xsk_pool = NULL;
>
> - if (queue == 0)
> - break;
> -
> - queue--;
> - }
> + } while (queue--);
>
> return ret;
> }


This is a real Coverity issue since queue variable is defined as u32, but there is no breakage from logic, it will break while loop when queue equal 0, and queue[0] actually need be handled.
After your code change, queue[0] will not be handled, right? It will break the logic. If you want to fix the this issue, I think the easiest way is to define queue variable to int.

Best Regards,
Joakim Zhang
> --
> 2.25.1