netfilter: nf_tables: fix oops when deleting a chain with references
authorPatrick McHardy <[email protected]>
Sat, 25 Jan 2014 08:04:07 +0000 (08:04 +0000)
committerPablo Neira Ayuso <[email protected]>
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 <[email protected]>
Tested-by: Matthew Ife <[email protected]>
Signed-off-by: Patrick McHardy <[email protected]>
Signed-off-by: Pablo Neira Ayuso <[email protected]>
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);