• Marcelo Leitner's avatar
    vxlan: Do not reuse sockets for a different address family · 19ca9fc1
    Marcelo Leitner authored
    Currently, we only match against local port number in order to reuse
    socket. But if this new vxlan wants an IPv6 socket and a IPv4 one bound
    to that port, vxlan will reuse an IPv4 socket as IPv6 and a panic will
    follow. The following steps reproduce it:
    
       # ip link add vxlan6 type vxlan id 42 group 229.10.10.10 \
           srcport 5000 6000 dev eth0
       # ip link add vxlan7 type vxlan id 43 group ff0e::110 \
           srcport 5000 6000 dev eth0
       # ip link set vxlan6 up
       # ip link set vxlan7 up
       <panic>
    
    [    4.187481] BUG: unable to handle kernel NULL pointer dereference at 0000000000000058
    ...
    [    4.188076] Call Trace:
    [    4.188085]  [<ffffffff81667c4a>] ? ipv6_sock_mc_join+0x3a/0x630
    [    4.188098]  [<ffffffffa05a6ad6>] vxlan_igmp_join+0x66/0xd0 [vxlan]
    [    4.188113]  [<ffffffff810a3430>] process_one_work+0x220/0x710
    [    4.188125]  [<ffffffff810a33c4>] ? process_one_work+0x1b4/0x710
    [    4.188138]  [<ffffffff810a3a3b>] worker_thread+0x11b/0x3a0
    [    4.188149]  [<ffffffff810a3920>] ? process_one_work+0x710/0x710
    
    So address family must also match in order to reuse a socket.
    Reported-by: default avatarJean-Tsung Hsiao <jhsiao@redhat.com>
    Signed-off-by: default avatarMarcelo Ricardo Leitner <mleitner@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    19ca9fc1
vxlan.c 71.6 KB