2.6.3 & .6: host broadcasts udp packets w/ bad checksum, locally too

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm not a subscriber on the list, please cc the answers, if any ;).

This script is generated with 2.6.6-kernel (patched with lufs and lirc
but that should be of no consequence):

--8<--
verse# tcpdump -c1 -w log 'dst port 4343' &     
[1] 1225
verse# tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

verse# echo -n foo | nc -q1 -u -b 192.168.2.255 4343 
1 packets captured
3 packets received by filter
0 packets dropped by kernel
[1]  + done       tcpdump -c1 -w log 'dst port 4343'
verse# tethereal -V -r log                 

(headers of little interest removed: full 85-byte dump available at 
 http://www.modeemi.cs.tut.fi/~flux/udpbug/eth0-dump.pcap)

Frame 1 (45 bytes on wire, 45 bytes captured)
    Packet Length: 45 bytes
    Capture Length: 45 bytes
Ethernet II, Src: 00:00:b4:a6:2d:90, Dst: ff:ff:ff:ff:ff:ff
    Destination: ff:ff:ff:ff:ff:ff (Broadcast)
    Source: 00:00:b4:a6:2d:90 (EdimaxCo_a6:2d:90)
    Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.2.2 (192.168.2.2), Dst Addr: 192.168.2.255 (192.168.2.255)
    Total Length: 31
    Protocol: UDP (0x11)
    Header checksum: 0xed39 (correct)
    Source: 192.168.2.2 (192.168.2.2)
    Destination: 192.168.2.255 (192.168.2.255)
User Datagram Protocol, Src Port: 1027 (1027), Dst Port: 4343 (4343)
    Source port: 1027 (1027)
    Destination port: 4343 (4343)
    Length: 11
    Checksum: 0x866e (incorrect, should be 0x8f1c)
Data (3 bytes)

0000  66 6f 6f                                          foo
--8<--

As you can see, udp-checksum is not correct according to ethereal (and
tcpdump). eth0 is rtl8139, however the bug appears with eth1 too,
which is 3com 3c905B. Needless to say, the checksum is similarly
corrupted when the other hosts receive it, which causes them to drop
the packet. Loopback-interface seems to be working OK.

The bug appears only when using udp broadcast; sending a udp packet to
a host succeeds. The machine can broadcast ping ok. I have no similar
problems with other hosts in the network (running 2.6.2, 2.6.5, 2.4.20
and 2.4.18).

The bug appeared with kernels compiled both with gcc-2.95.4 and
gcc-3.3.4, both from Debian Unstable.

Kernel configuration and other information is available at:

  http://www.modeemi.cs.tut.fi/~flux/udpbug/

-- 
  _____________________________________________________________________
     / __// /__ ____  __               http://www.modeemi.fi/~flux/\   \
    / /_ / // // /\ \/ /                                            \  /
   /_/  /_/ \___/ /_/\_\@modeemi.fi                                  \/
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux