netfilter: nf_nat: fix RCU races
authorPatrick McHardy <kaber@trash.net>
Tue, 17 Jun 2008 22:51:47 +0000 (15:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Jun 2008 22:51:47 +0000 (15:51 -0700)
commit68b80f11380889996aa7eadba29dbbb5c29a5864
treee6425d1ee4d15713678e60cd03bd5f514385e6e5
parent65c3e4715b1b934f8dcc002d9f46b4371ca7a9b1
netfilter: nf_nat: fix RCU races

Fix three ct_extend/NAT extension related races:

- When cleaning up the extension area and removing it from the bysource hash,
  the nat->ct pointer must not be set to NULL since it may still be used in
  a RCU read side

- When replacing a NAT extension area in the bysource hash, the nat->ct
  pointer must be assigned before performing the replacement

- When reallocating extension storage in ct_extend, the old memory must
  not be freed immediately since it may still be used by a RCU read side

Possibly fixes https://bugzilla.redhat.com/show_bug.cgi?id=449315
and/or http://bugzilla.kernel.org/show_bug.cgi?id=10875

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/netfilter/nf_conntrack_extend.h
net/ipv4/netfilter/nf_nat_core.c
net/netfilter/nf_conntrack_extend.c