lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Sun, 20 Jul 2014 21:11:17 -0700 (PDT)
From:	David Miller <davem@...emloft.net>
To:	narmstrong@...tion.com
Cc:	nicolas.ferre@...el.com, netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 2/2] net: macb: Handle errors in RX path

From: Neil Armstrong <narmstrong@...tion.com>
Date: Fri, 18 Jul 2014 14:43:04 +0200

> @@ -872,12 +890,22 @@ static int macb_poll(struct napi_struct *napi, int budget)
>  	status = macb_readl(bp, RSR);
>  	macb_writel(bp, RSR, status);
>  
> -	work_done = 0;
> +	work_done = -EIO;
>  
>  	netdev_vdbg(bp->dev, "poll: status = %08lx, budget = %d\n",
> -		   (unsigned long)status, budget);
> +			(unsigned long)status, budget);
> +
> +	if (status & (MACB_BIT(OVR) | MACB_BIT(BNA)) ||
> +	    !(status & MACB_BIT(REC))) {
> +		netdev_err(bp->dev, "RX error, status = %02lx\n",
> +			   (unsigned long)status);
> +		goto rx_out;
 ...
> @@ -892,7 +920,23 @@ static int macb_poll(struct napi_struct *napi, int budget)
>  		}
>  	}
>  
> -	/* TODO: Handle errors */
> +	return work_done;
> +
> +rx_out:
> +	/* In case of error, disable RX and reset
> +	 * the descriptor ring before re-enabling RX.
> +	 */
> +	macb_writel(bp, NCR, macb_readl(bp, NCR) & ~MACB_BIT(RE));
> +
> +	bp->macbgem_ops.mog_init_rx_rings(bp);
> +	macb_writel(bp, RBQP, bp->rx_ring_dma);
> +
> +	/* Re-enable RX and get notified for new packets */
> +	macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(RE));
> +
> +	napi_complete(napi);
> +
> +	macb_writel(bp, IER, MACB_RX_INT_FLAGS);
>  
>  	return work_done;

Do not return negative error codes, as you will in this path due to the
work_done = -EIO initialization, from the NAPI poll method.

You must always return the amount of work you processed, which you can
force to zero on errors that caused the chip to be reset and you thus
want polling to force terminate.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists