提交 cff1be88 编写于 作者: P Pablo Neira Ayuso 提交者: Zheng Zengkai

netfilter: nf_tables: consolidate rule verdict trace call

stable inclusion
from stable-v5.10.140
commit 1d7d74a8240e5d4505f5f3f67417bb7334230c11
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I63FTT

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=1d7d74a8240e5d4505f5f3f67417bb7334230c11

--------------------------------

[ Upstream commit 4765473f ]

Add function to consolidate verdict tracing.
Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Reviewed-by: NWei Li <liwei391@huawei.com>
上级 4734b465
...@@ -67,6 +67,36 @@ static void nft_cmp_fast_eval(const struct nft_expr *expr, ...@@ -67,6 +67,36 @@ static void nft_cmp_fast_eval(const struct nft_expr *expr,
regs->verdict.code = NFT_BREAK; regs->verdict.code = NFT_BREAK;
} }
static noinline void __nft_trace_verdict(struct nft_traceinfo *info,
const struct nft_chain *chain,
const struct nft_regs *regs)
{
enum nft_trace_types type;
switch (regs->verdict.code) {
case NFT_CONTINUE:
case NFT_RETURN:
type = NFT_TRACETYPE_RETURN;
break;
default:
type = NFT_TRACETYPE_RULE;
break;
}
__nft_trace_packet(info, chain, type);
}
static inline void nft_trace_verdict(struct nft_traceinfo *info,
const struct nft_chain *chain,
const struct nft_rule *rule,
const struct nft_regs *regs)
{
if (static_branch_unlikely(&nft_trace_enabled)) {
info->rule = rule;
__nft_trace_verdict(info, chain, regs);
}
}
static bool nft_payload_fast_eval(const struct nft_expr *expr, static bool nft_payload_fast_eval(const struct nft_expr *expr,
struct nft_regs *regs, struct nft_regs *regs,
const struct nft_pktinfo *pkt) const struct nft_pktinfo *pkt)
...@@ -207,13 +237,13 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv) ...@@ -207,13 +237,13 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv)
break; break;
} }
nft_trace_verdict(&info, chain, rule, &regs);
switch (regs.verdict.code & NF_VERDICT_MASK) { switch (regs.verdict.code & NF_VERDICT_MASK) {
case NF_ACCEPT: case NF_ACCEPT:
case NF_DROP: case NF_DROP:
case NF_QUEUE: case NF_QUEUE:
case NF_STOLEN: case NF_STOLEN:
nft_trace_packet(&info, chain, rule,
NFT_TRACETYPE_RULE);
return regs.verdict.code; return regs.verdict.code;
} }
...@@ -226,15 +256,10 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv) ...@@ -226,15 +256,10 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv)
stackptr++; stackptr++;
fallthrough; fallthrough;
case NFT_GOTO: case NFT_GOTO:
nft_trace_packet(&info, chain, rule,
NFT_TRACETYPE_RULE);
chain = regs.verdict.chain; chain = regs.verdict.chain;
goto do_chain; goto do_chain;
case NFT_CONTINUE: case NFT_CONTINUE:
case NFT_RETURN: case NFT_RETURN:
nft_trace_packet(&info, chain, rule,
NFT_TRACETYPE_RETURN);
break; break;
default: default:
WARN_ON(1); WARN_ON(1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册