[U-Boot] [PATCH] api: net: fix length check in eth_receive()

Michael Walle michael at walle.cc
Mon Jun 25 22:50:24 CEST 2012


[removed Piotr Kruszynski from CC because mail address does not exist anymore]

Hi Joe,

Am Montag 25 Juni 2012, 22:25:56 schrieb Joe Hershberger:
> 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.

its the same behaviour as recv() with udp packets, isn't it?
 see http://pubs.opengroup.org/onlinepubs/009695399/functions/recv.html

But i'm not set on this, maybe rafal could clarify this. My main point is to 
make ubldr working ;)

-- 
michael


More information about the U-Boot mailing list