• Mahesh Bandewar's avatar
    ipvlan: fix multicast processing · e2525360
    Mahesh Bandewar authored
    In an IPvlan setup when master is set in loopback mode e.g.
    
      ethtool -K eth0 set loopback on
    
      where eth0 is master device for IPvlan setup.
    
    The failure is caused by the faulty logic that determines if the
    packet is from TX-path vs. RX-path by just looking at the mac-
    addresses on the packet while processing multicast packets.
    
    In the loopback-mode where this crash was happening, the packets
    that are sent out are reflected by the NIC and are processed on
    the RX path, but mac-address check tricks into thinking this
    packet is from TX path and falsely uses dev_forward_skb() to pass
    packets to the slave (virtual) devices.
    
    This patch records the path while queueing packets and eliminates
    logic of looking at mac-addresses for the same decision.
    
    ------------[ cut here ]------------
    kernel BUG at include/linux/skbuff.h:1737!
    Call Trace:
     [<ffffffff921fbbc2>] dev_forward_skb+0x92/0xd0
     [<ffffffffc031ac65>] ipvlan_process_multicast+0x395/0x4c0 [ipvlan]
     [<ffffffffc031a9a7>] ? ipvlan_process_multicast+0xd7/0x4c0 [ipvlan]
     [<ffffffff91cdfea7>] ? process_one_work+0x147/0x660
     [<ffffffff91cdff09>] process_one_work+0x1a9/0x660
     [<ffffffff91cdfea7>] ? process_one_work+0x147/0x660
     [<ffffffff91ce086d>] worker_thread+0x11d/0x360
     [<ffffffff91ce0750>] ? rescuer_thread+0x350/0x350
     [<ffffffff91ce960b>] kthread+0xdb/0xe0
     [<ffffffff91c05c70>] ? _raw_spin_unlock_irq+0x30/0x50
     [<ffffffff91ce9530>] ? flush_kthread_worker+0xc0/0xc0
     [<ffffffff92348b7a>] ret_from_fork+0x9a/0xd0
     [<ffffffff91ce9530>] ? flush_kthread_worker+0xc0/0xc0
    
    Fixes: ba35f858 ("ipvlan: Defer multicast / broadcast processing to a work-queue")
    Signed-off-by: default avatarMahesh Bandewar <maheshb@google.com>
    CC: Eric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e2525360
ipvlan_core.c 18 KB