On Tue, Dec 24, 2002 at 09:58:19PM +0100, Aurelien Nephtali wrote:
> Hi,
> 
> I think I've found a bug in the BPF stack (if I can call it a stack :p).
> According to the bpf man, packets can be written directly through a bpf file
> descriptor. But writing IP packets using write() doesn't seem to work, the
> "ip_len" field of the ip header isn't sent in host byte order so the packet is
> discarded by the remote host since the len of the packet doesn't match the
> length of the data captured...
> BSD is known to have a strange behaviour with the "ip_len" field, returning
> EINVAL when this field is htons()'ized and passed to functions like write(),
> send(), etc... and of course, writing of a BPF fd using write() doesn't
> break this "rule". :/
> 
> But, strangely, as writing with write() doesn't work, writing with writev()
> seems to work (?!). That's why "dhclient" works fine _EVEN_ if it htons()
> "ip_len" field of his IP packets!
> 
> Attached are two patches, one against bpf.c (kernel) and the other against
> packet.c (dhclient).
> These patches are ugly and you can (at least you are encouraged to :p) modify
> them or tell me what is good or not with them. They're only here to try to
> illustrate what I'm trying to explain :)
> 
> For the BPF patch, I don't know if the test
>       if (dst.sa_family == AF_UNSPEC)
> is correct ... but it seems to work and I wonder why sa_family isn't AF_INET...
> 
> BTW, -STABLE/-RELEASE is also *affected* and I think the patch for bpf.c can
> also be applied against -STABLE, I've checked, bpf.c from -STABLE and the one
> from -CURRENT are the same.
> 
> Hope I was clear even if my english isn't as good as it should be :)
> I plan to put this into a PR but I want some comments to be sure that's not
> a "desired" feature.
> 
> -- Aurelien

Hum ... the previous patch against bpf.c was the result of multiple test, thus
it was _VERY_ ugly with useless lines of code... now the new one is cleaner :)
(it's just aesthetic modifications but ... better for the eyes :p)

-- Aurelien

Attachment: msg49296/pgp00000.pgp
Description: PGP signature

Reply via email to