]> git.karo-electronics.de Git - karo-tx-linux.git/commit
net: ipv4: ipmr_expire_timer causes crash when removing net namespace
authorFrancesco Ruggeri <fruggeri@aristanetworks.com>
Fri, 24 Aug 2012 07:38:35 +0000 (07:38 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 2 Oct 2012 16:47:22 +0000 (09:47 -0700)
commit896b6af471f67fc60cbab5a503cb8a764a8c47a4
tree3c27c6a4d78568c4c88897dc7ae0c83c09fcd7c3
parent928863a39f0ee47af97e7e17b909334dcb06cf1e
net: ipv4: ipmr_expire_timer causes crash when removing net namespace

[ Upstream commit acbb219d5f53821b2d0080d047800410c0420ea1 ]

When tearing down a net namespace, ipv4 mr_table structures are freed
without first deactivating their timers. This can result in a crash in
run_timer_softirq.
This patch mimics the corresponding behaviour in ipv6.
Locking and synchronization seem to be adequate.
We are about to kfree mrt, so existing code should already make sure that
no other references to mrt are pending or can be created by incoming traffic.
The functions invoked here do not cause new references to mrt or other
race conditions to be created.
Invoking del_timer_sync guarantees that ipmr_expire_timer is inactive.
Both ipmr_expire_process (whose completion we may have to wait in
del_timer_sync) and mroute_clean_tables internally use mfc_unres_lock
or other synchronizations when needed, and they both only modify mrt.

Tested in Linux 3.4.8.

Signed-off-by: Francesco Ruggeri <fruggeri@aristanetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ipv4/ipmr.c