Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[9fans] Block->flags, Block->checksum

0 views
Skip to first unread message

erik quanstrom

unread,
Jan 5, 2010, 12:02:41 PM1/5/10
to
it appears that we can mistakenly declare a packet's
checksum to be ok in the following drivers
- ether82563.c
- ether82598.c
- etherigbe.c
- etherm10g.c (saved by hw that eats packets with bad checksums)
- ethervt6105m.c

the problem is that the Block->flags are not cleared.
so if a Block receives a packet with a good checksum,
it will remain set when recycled. so any subsequent
packet received to the same Block will appear to have
a good checksum. oops.

i was going to submit a patch, but i realized that all these
drivers have differences from sources. in any event, the
fix is a single line. for example, for ether82563.c:

/n/dump/2010/0105/sys/src/9/pc/ether82563.c:744,749 - ether82563.c:744,750
rbfree(Block *b, int t)
{
b->rp = b->wp = (uchar*)PGROUND((uintptr)b->base);
+ b->flag &= ~(Bipck | Budpck | Btcpck | Bpktck);
ilock(&i82563rblock[t]);
b->next = i82563rbpool[t];
i82563rbpool[t] = b;

in looking at this, i noticed that that Block->checksum is set
in
- ether82563.c
- ether82598.c
- etherigbe.c
- etherm10g.c

but otherwise unreferenced. is this something that should
be removed, or should it be completed?

- erik

0 new messages