netfilter: nf_tables: fix oops when deleting a chain with references
authorPatrick McHardy <kaber@trash.net>
Sat, 25 Jan 2014 08:04:07 +0000 (08:04 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 5 Feb 2014 12:16:17 +0000 (13:16 +0100)
The following commands trigger an oops:

 # nft -i
 nft> add table filter
 nft> add chain filter input { type filter hook input priority 0; }
 nft> add chain filter test
 nft> add rule filter input jump test
 nft> delete chain filter test

We need to check the chain use counter before allowing destruction since
we might have references from sets or jump rules.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=69341
Reported-by: Matthew Ife <deleriux1@gmail.com>
Tested-by: Matthew Ife <deleriux1@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index 117bbaaddde636a7b5cbf754012ab2f696898e71..9ce30534f8533cd63a023e16bd66565bc43b46cc 100644 (file)
@@ -1045,7 +1045,7 @@ static int nf_tables_delchain(struct sock *nlsk, struct sk_buff *skb,
        if (IS_ERR(chain))
                return PTR_ERR(chain);
 
-       if (!list_empty(&chain->rules))
+       if (!list_empty(&chain->rules) || chain->use > 0)
                return -EBUSY;
 
        list_del(&chain->list);