netfilter: nf_tables: fix trace of matching non-terminal rule
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 15 May 2014 15:18:26 +0000 (17:18 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 15 May 2014 17:44:20 +0000 (19:44 +0200)
Add the corresponding trace if we have a full match in a non-terminal
rule. Note that the traces will look slightly different than in
x_tables since the log message after all expressions have been
evaluated (contrary to x_tables, that emits it before the target
action). This manifests in two differences in nf_tables wrt. x_tables:

1) The rule that enables the tracing is included in the trace.

2) If the rule emits some log message, that is shown before the
   trace log message.

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

index 421c36ac51455f51d2e4c82294b866bb8fb55aa3..345acfb1720b14f00aae0e5937ab07bfb90e9482 100644 (file)
@@ -144,8 +144,10 @@ next_rule:
                switch (data[NFT_REG_VERDICT].verdict) {
                case NFT_BREAK:
                        data[NFT_REG_VERDICT].verdict = NFT_CONTINUE;
-                       /* fall through */
+                       continue;
                case NFT_CONTINUE:
+                       if (unlikely(pkt->skb->nf_trace))
+                               nft_trace_packet(pkt, chain, rulenum, NFT_TRACE_RULE);
                        continue;
                }
                break;