• Sabrina Dubroca's avatar
    net: rtnl: return early from rtnl_unregister_all when protocol isn't registered · f707ef61
    Sabrina Dubroca authored
    rtnl_unregister_all(PF_INET6) gets called from inet6_init in cases when
    no handler has been registered for PF_INET6 yet, for example if
    ip6_mr_init() fails. Abort and avoid a NULL pointer deref in that case.
    
    Example of panic (triggered by faking a failure of
     register_pernet_subsys):
    
        general protection fault: 0000 [#1] PREEMPT SMP KASAN PTI
        [...]
        RIP: 0010:rtnl_unregister_all+0x17e/0x2a0
        [...]
        Call Trace:
         ? rtnetlink_net_init+0x250/0x250
         ? sock_unregister+0x103/0x160
         ? kernel_getsockopt+0x200/0x200
         inet6_init+0x197/0x20d
    
    Fixes: e2fddf5e ("[IPV6]: Make af_inet6 to check ip6_route_init return value.")
    Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f707ef61
rtnetlink.c 116 KB