Subject: Re: Small Ethernet packet padding
To: Greg Troxel <gdt@ir.bbn.com>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-net
Date: 10/31/2004 13:57:44
On Sun, Oct 31, 2004 at 07:51:37AM -0500, Greg Troxel wrote:
>   Now, I don't know if saving these extra CPU cycles is really important or
>   not. When I did the work on this padding problem, it was decided that the
>   best place to do this was in the drivers themselves, because it was the most
>   efficient.
> 
> So perhaps if_ethersubr.c could have a 
> 
> /*
>  * Given an mbuf and a length, return an mbuf that has all the
>  * original data, and that is at least length.  Any added data will be
>  * zero.  Returns NULL and frees the mbuf if allocation was needed and
>  * fails.
>  */
> struct mbuf *
> mbuf_ensure_length(struct mbuf *m, int length)
> {
> }
> 
> to be used by drivers that don't want to do something more
> complicated; this would get the benefit of abstraction in that case
> while not precluding efficiency for the cases you mention, and with

I can't see other cases than the ones I mentioned. If a driver cares to
call this mbuf_ensure_length(), it could as well pad the packet using
what's appropriate for this chip

> any luck decrease the odds that we'd leak kernel data or do dma from
> non-existent memory above the top mbuf  - I actually had a FreeBSD
> machine crash once in if_wl.c due to this.

It's a bug in the driver. ethernet driver should be able to deal with
mbufs shorter than the ethernet min len.

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--