From: Michael Walle Date: Fri, 22 Jun 2012 11:24:28 +0000 (+0000) Subject: api: net: fix length check in eth_receive() X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=46c07bcf12a7d6478b5e2f3e4b4c961d84428c6c;p=u-boot.git api: net: fix length check in eth_receive() 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 Cc: Joe Hershberger Cc: Rafal Jaworowski Cc: Piotr Kruszynski --- diff --git a/net/eth.c b/net/eth.c index 1a11ce1027..bb4d95be8e 100644 --- a/net/eth.c +++ b/net/eth.c @@ -500,10 +500,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); for (i = 0; i < length; i++) p[i] = eth_rcv_bufs[eth_rcv_current].data[i];