• Xin Xiong's avatar
    net: fix potential refcount leak in ndisc_router_discovery() · 7396ba87
    Xin Xiong authored
    The issue happens on specific paths in the function. After both the
    object `rt` and `neigh` are grabbed successfully, when `lifetime` is
    nonzero but the metric needs change, the function just deletes the
    route and set `rt` to NULL. Then, it may try grabbing `rt` and `neigh`
    again if above conditions hold. The function simply overwrite `neigh`
    if succeeds or returns if fails, without decreasing the reference
    count of previous `neigh`. This may result in memory leaks.
    
    Fix it by decrementing the reference count of `neigh` in place.
    
    Fixes: 6b2e04bc ("net: allow user to set metric on default route learned via Router Advertisement")
    Signed-off-by: default avatarXin Xiong <xiongx18@fudan.edu.cn>
    Signed-off-by: default avatarXin Tan <tanxin.ctf@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7396ba87
ndisc.c 51.3 KB