netfilter: ipt_recent: fix race between recent_mt_destroy and proc manipulations
authorPavel Emelyanov <xemul@openvz.org>
Thu, 31 Jul 2008 07:38:31 +0000 (00:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 31 Jul 2008 07:38:31 +0000 (00:38 -0700)
commita8ddc9163c6a16cd62531dba1ec5020484e33b02
tree316873162ae914edd6a4f250693017486dede52a
parentae375044d31075a31de5a839e07ded7f67b660aa
netfilter: ipt_recent: fix race between recent_mt_destroy and proc manipulations

The thing is that recent_mt_destroy first flushes the entries
from table with the recent_table_flush and only *after* this
removes the proc file, corresponding to that table.

Thus, if we manage to write to this file the '+XXX' command we
will leak some entries. If we manage to write there a 'clean'
command we'll race in two recent_table_flush flows, since the
recent_mt_destroy calls this outside the recent_lock.

The proper solution as I see it is to remove the proc file first
and then go on with flushing the table. This flushing becomes
safe w/o the lock, since the table is already inaccessible from
the outside.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/netfilter/ipt_recent.c