netfilter: nf_tables: restrict nat/masq expressions to nat chain type
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 13 Oct 2014 17:50:22 +0000 (19:50 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 13 Oct 2014 18:42:00 +0000 (20:42 +0200)
commit7210e4e38f945dfa173c4a4e59ad827c9ecad541
treef86826588257abd66235761163e113bfdd82594f
parentab2d7251d666995740da17b2a51ca545ac5dd037
netfilter: nf_tables: restrict nat/masq expressions to nat chain type

This adds the missing validation code to avoid the use of nat/masq from
non-nat chains. The validation assumes two possible configuration
scenarios:

1) Use of nat from base chain that is not of nat type. Reject this
   configuration from the nft_*_init() path of the expression.

2) Use of nat from non-base chain. In this case, we have to wait until
   the non-base chain is referenced by at least one base chain via
   jump/goto. This is resolved from the nft_*_validate() path which is
   called from nf_tables_check_loops().

The user gets an -EOPNOTSUPP in both cases.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_tables.h
include/net/netfilter/nft_masq.h
net/ipv4/netfilter/nft_masq_ipv4.c
net/ipv6/netfilter/nft_masq_ipv6.c
net/netfilter/nf_tables_api.c
net/netfilter/nft_masq.c
net/netfilter/nft_nat.c