• Kristian Slavov's avatar
    [IPV6]: Fix address deletion · 1d142804
    Kristian Slavov authored
    If you add more than one IPv6 address belonging to the same prefix and 
    delete the address that was last added, routing table entry for that 
    prefix is also deleted.
    Tested on 2.6.14.4
    
    To reproduce:
    ip addr add 3ffe::1/64 dev eth0
    ip addr add 3ffe::2/64 dev eth0
    /* wait DAD */
    sleep 1
    ip addr del 3ffe::2/64 dev eth0
    ip -6 route
    
    (route to 3ffe::/64 should be gone)
    
    In ipv6_del_addr(), if ifa == ifp, we set ifa->if_next to NULL, and later 
    assign ifap = &ifa->if_next, effectively terminating the for-loop.
    This prevents us from checking if there are other addresses using the same 
    prefix that are valid, and thus resulting in deletion of the prefix.
    This applies only if the first entry in idev->addr_list is the address to 
    be deleted.
    Signed-off-by: default avatarKristian Slavov <kristian.slavov@nomadiclab.com>
    Acked-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1d142804
addrconf.c 91.8 KB