• Xin Long's avatar
    ipv6: fix a dst leak when removing its exception · 761f6026
    Xin Long authored
    These is no need to hold dst before calling rt6_remove_exception_rt().
    The call to dst_hold_safe() in ip6_link_failure() was for ip6_del_rt(),
    which has been removed in Commit 93531c67 ("net/ipv6: separate
    handling of FIB entries from dst based routes"). Otherwise, it will
    cause a dst leak.
    
    This patch is to simply remove the dst_hold_safe() call before calling
    rt6_remove_exception_rt() and also do the same in ip6_del_cached_rt().
    It's safe, because the removal of the exception that holds its dst's
    refcnt is protected by rt6_exception_lock.
    
    Fixes: 93531c67 ("net/ipv6: separate handling of FIB entries from dst based routes")
    Fixes: 23fb93a4 ("net/ipv6: Cleanup exception and cache route handling")
    Reported-by: default avatarLi Shuang <shuali@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    761f6026
route.c 133 KB