Patch "netfilter: ipt_CLUSTERIP: fix a race condition of proc file creation" has been added to the 4.15-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
netfilter: ipt_CLUSTERIP: fix a race condition of proc file creation
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
netfilter-ipt_clusterip-fix-a-race-condition-of-proc-file-creation.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b3e456fce9f51d6276e576d00271e2813c1b8b67Mon Sep 17 00:00:00 2001
From: Cong Wang <[email protected]>
Date: Wed, 7 Feb 2018 21:59:17 -0800
Subject: netfilter: ipt_CLUSTERIP: fix a race condition of proc file creation
From: Cong Wang <[email protected]>
commit b3e456fce9f51d6276e576d00271e2813c1b8b67 upstream.
There is a race condition between clusterip_config_entry_put() and clusterip_config_init(), after we release the spinlock in clusterip_config_entry_put(), a new proc file with a same IP could be created immediately since it is already removed from the configs list, therefore it triggers this warning:
------------[ cut here ]------------ proc_dir_entry 'ipt_CLUSTERIP/172.20.0.170' already registered WARNING: CPU: 1 PID: 4152 at fs/proc/generic.c:330 proc_register+0x2a4/0x370 fs/proc/generic.c:329 Kernel panic - not syncing: panic_on_warn set ...
As a quick fix, just move the proc_remove() inside the spinlock.
--- net/ipv4/netfilter/ipt_CLUSTERIP.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
net/ipv4/netfilter/ipt_CLUSTERIP.c +6 -6
@@ -107,12 +107,6 @@ clusterip_config_entry_put(struct net *nlocal_bh_disable ();if (refcount_dec_and_lock (&c->entries, &cn->lock)) { -list_del_rcu (&c->list); -spin_unlock (&cn->lock); -local_bh_enable (); - -unregister_netdevice_notifier (&c->notifier); -/* In case anyone still accesses the file, the open/close * functions are also incrementing the refcount on their own, * so it's safe to remove the entry even if it's in use. */
@@ -120,6 +114,12 @@ clusterip_config_entry_put(struct net *nif (cn->procdir)proc_remove (c->pde);#endif +list_del_rcu (&c->list); +spin_unlock (&cn->lock); +local_bh_enable (); + +unregister_netdevice_notifier (&c->notifier); +return ; }local_bh_enable ();
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/netfilter-ipt_clusterip-fix-a-race-condition-of-proc-file-creation.patch