diff options
author | Eric Leblond <eric@regit.org> | 2013-11-18 00:54:45 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-11-19 21:12:58 +0100 |
commit | 3451f89c65345dd22987c068647f54625b2f26ee (patch) | |
tree | d06a492a295c6300b8333aecf1bcb76e0507fbd6 /src/netlink_delinearize.c | |
parent | b342ba4a765340dbc7cfd4d510485f95a6edcbe3 (diff) |
verdict: fix delinearize in case of jump
The name of the chain was not handled in case of a jump or a goto.
This patch adds parsing of the chain.
Reported-by: Alex Chapman <ajchapman88@hotmail.co.uk>
Signed-off-by: Eric Leblond <eric@regit.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/netlink_delinearize.c')
-rw-r--r-- | src/netlink_delinearize.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 3bb143b8..7e4e38c4 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -81,9 +81,13 @@ static void netlink_parse_immediate(struct netlink_parse_ctx *ctx, struct stmt *stmt; struct expr *expr; - if (nft_rule_expr_is_set(nle, NFT_EXPR_IMM_VERDICT)) + if (nft_rule_expr_is_set(nle, NFT_EXPR_IMM_VERDICT)) { nld.verdict = nft_rule_expr_get_u32(nle, NFT_EXPR_IMM_VERDICT); - else if (nft_rule_expr_is_set(nle, NFT_EXPR_IMM_DATA)) { + if (nft_rule_expr_is_set(nle, NFT_EXPR_IMM_CHAIN)) { + nld.chain = nft_rule_expr_get(nle, NFT_EXPR_IMM_CHAIN, + &nld.len); + } + } else if (nft_rule_expr_is_set(nle, NFT_EXPR_IMM_DATA)) { nld.value = nft_rule_expr_get(nle, NFT_EXPR_IMM_DATA, &nld.len); } |