[U-Boot] [PATCH] api: net: fix length check in eth_receive()
Joe Hershberger
joe.hershberger at gmail.com
Mon Jun 25 22:25:56 CEST 2012
Hi Michael,
On Fri, Jun 22, 2012 at 4:24 PM, Michael Walle <michael at walle.cc> wrote:
> If the requested length is too small to hold the received packet,
> eth_receive() will return -1 and will leave the packet in the receive
> buffers. Instead of returning an error in this case, we return the first
> portion of the received packet and remove it from the receive buffers.
>
> This fixes FreeBSD's ubldr. Without this patch it will just stop receiving
> packets if the NIC receives more than PKTBUFSRX too large packets.
>
> Signed-off-by: Michael Walle <michael at walle.cc>
> Cc: Joe Hershberger <joe.hershberger at gmail.com>
> Cc: Rafal Jaworowski <raj at semihalf.com>
> Cc: Piotr Kruszynski <ppk at semihalf.com>
> ---
> net/eth.c | 5 +----
> 1 files changed, 1 insertions(+), 4 deletions(-)
>
> diff --git a/net/eth.c b/net/eth.c
> index d526264..09249c9 100644
> --- a/net/eth.c
> +++ b/net/eth.c
> @@ -486,10 +486,7 @@ int eth_receive(void *packet, int length)
> return -1;
> }
>
> - if (length < eth_rcv_bufs[eth_rcv_current].length)
> - return -1;
> -
> - length = eth_rcv_bufs[eth_rcv_current].length;
> + length = min(eth_rcv_bufs[eth_rcv_current].length, length);
Is it really a good idea to return a runt packet to the network
protocols? I understand wanting to drop the too-big packet, but I
think you should simply drop that packet before returning the error,
but still error.
-Joe
More information about the U-Boot
mailing list