ipv6/addrconf: ensure addrconf_verify_rtnl() has completed
Before freeing the hash table in addrconf_exit_net(), we need to make sure the work queue has completed, or risk NULL dereference or UAF. Thus, use cancel_delayed_work_sync() to enforce this. We do not hold RTNL in addrconf_exit_net(), making this safe. Fixes: 8805d13ff1b2 ("ipv6/addrconf: use one delayed work per netns") Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: syzbot <syzkaller@googlegroups.com> Reviewed-by: David Ahern <dsahern@kernel.org> Link: https://lore.kernel.org/r/20220216182037.3742-1-eric.dumazet@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
faab39f63c
commit
be6b41c15d
@ -7187,7 +7187,7 @@ static void __net_exit addrconf_exit_net(struct net *net)
|
||||
kfree(net->ipv6.devconf_all);
|
||||
net->ipv6.devconf_all = NULL;
|
||||
|
||||
cancel_delayed_work(&net->ipv6.addr_chk_work);
|
||||
cancel_delayed_work_sync(&net->ipv6.addr_chk_work);
|
||||
/*
|
||||
* Check hash table, then free it.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user