netfilter: nf_tables: release objects in reverse order in the abort path
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 23 May 2014 09:09:42 +0000 (11:09 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 2 Jun 2014 08:54:28 +0000 (10:54 +0200)
commita1cee076f4d4774504c62e0f1846a11a6fcb6be3
treec2f9d23040c1898b98e5aea2aa93207c2f56fe19
parent46bbafceb201df635b7c0a9d7a0e526cb2f8cb75
netfilter: nf_tables: release objects in reverse order in the abort path

The patch c7c32e7 ("netfilter: nf_tables: defer all object release via
rcu") indicates that we always release deleted objects in the reverse
order, but that is only needed in the abort path. These are the two
possible scenarios when releasing objects:

1) Deletion scenario in the commit path: no need to release objects in
the reverse order since userspace already ensures that dependencies are
fulfilled), ie. userspace tells us to delete rule -> ... -> rule ->
chain -> table. In this case, we have to release the objects in the
*same order* as userspace provided.

2) Deletion scenario in the abort path: we have to iterate in the reverse
order to undo what it cannot be added, ie. userspace sent us a batch
that includes: table -> chain -> rule -> ... -> rule, and that needs to
be partially undone. In this case, we have to release objects in the
reverse order to ensure that the set and chain objects point to valid
rule and table objects.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c