• Oliver Dawid's avatar
    [APPLETALK]: Fix broadcast bug. · 64233bff
    Oliver Dawid authored
    From: Oliver Dawid <oliver@helios.de>
    
    we found a bug in net/appletalk/ddp.c concerning broadcast packets. In 
    kernel 2.4 it was working fine. The bug first occured 4 years ago when 
    switching to new SNAP layer handling. This bug can be splitted up into a 
    sending(1) and reception(2) problem:
    
    Sending(1)
    In kernel 2.4 broadcast packets were sent to a matching ethernet device 
    and atalk_rcv() was called to receive it as "loopback" (so loopback 
    packets were shortcutted and handled in DDP layer).
    
    When switching to the new SNAP structure, this shortcut was removed and 
    the loopback packet was send to SNAP layer. The author forgot to replace 
    the remote device pointer by the loopback device pointer before sending 
    the packet to SNAP layer (by calling ddp_dl->request() ) therfor the 
    packet was not sent back by underlying layers to ddp's atalk_rcv().
    
    Reception(2)
    In atalk_rcv() a packet received by this loopback mechanism contains now 
    the (rigth) loopback device pointer (in Kernel 2.4 it was the (wrong) 
    remote ethernet device pointer) and therefor no matching socket will be 
    found to deliver this packet to. Because a broadcast packet should be 
    send to the first matching socket (as it is done in many other protocols 
    (?)), we removed the network comparison in broadcast case.
    
    Below you will find a patch to correct this bug. Its diffed to kernel 
    2.6.14-rc1
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@ghostprotocols.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    64233bff
ddp.c 49.5 KB