• Michal Soltys's avatar
    bonding: fix PACKET_ORIGDEV regression · 795cb33c
    Michal Soltys authored
    [ Upstream commit 3c963a33 ]
    
    This patch fixes a subtle PACKET_ORIGDEV regression which was a side
    effect of fixes introduced by:
    
    6a9e461f bonding: pass link-local packets to bonding master also.
    
    ... to:
    
    b89f04c6 bonding: deliver link-local packets with skb->dev set to link that packets arrived on
    
    While 6a9e461f restored pre-b89f04c6 presence of link-local
    packets on bonding masters (which is required e.g. by linux bridges
    participating in spanning tree or needed for lab-like setups created
    with group_fwd_mask) it also caused the originating device
    information to be lost due to cloning.
    
    Maciej Żenczykowski proposed another solution that doesn't require
    packet cloning and retains original device information - instead of
    returning RX_HANDLER_PASS for all link-local packets it's now limited
    only to packets from inactive slaves.
    
    At the same time, packets passed to bonding masters retain correct
    information about the originating device and PACKET_ORIGDEV can be used
    to determine it.
    
    This elegantly solves all issues so far:
    
    - link-local packets that were removed from bonding masters
    - LLDP daemons being forced to explicitly bind to slave interfaces
    - PACKET_ORIGDEV having no effect on bond interfaces
    
    Fixes: 6a9e461f (bonding: pass link-local packets to bonding master also.)
    Reported-by: default avatarVincent Bernat <vincent@bernat.ch>
    Signed-off-by: default avatarMichal Soltys <soltys@ziu.info>
    Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    795cb33c
bond_main.c 136 KB