mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 14:51:51 -04:00
xfrm: prevent policy_hthresh.work from racing with netns teardown
A XFRM_MSG_NEWSPDINFO request can queue the per-net work item
policy_hthresh.work onto the system workqueue.
The queued callback, xfrm_hash_rebuild(), retrieves the enclosing
struct net via container_of(). If the net namespace is torn down
before that work runs, the associated struct net may already have
been freed, and xfrm_hash_rebuild() may then dereference stale memory.
xfrm_policy_fini() already flushes policy_hash_work during teardown,
but it does not synchronize policy_hthresh.work.
Synchronize policy_hthresh.work in xfrm_policy_fini() as well, so the
queued work cannot outlive the net namespace teardown and access a
freed struct net.
Fixes: 880a6fab8f ("xfrm: configure policy hash table thresholds by netlink")
Signed-off-by: Minwoo Ra <raminwo0202@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
committed by
Steffen Klassert
parent
daf8e3b253
commit
29fe3a61bc
@@ -4282,6 +4282,8 @@ static void xfrm_policy_fini(struct net *net)
|
||||
unsigned int sz;
|
||||
int dir;
|
||||
|
||||
disable_work_sync(&net->xfrm.policy_hthresh.work);
|
||||
|
||||
flush_work(&net->xfrm.policy_hash_work);
|
||||
#ifdef CONFIG_XFRM_SUB_POLICY
|
||||
xfrm_policy_flush(net, XFRM_POLICY_TYPE_SUB, false);
|
||||
|
||||
Reference in New Issue
Block a user