netfilter: nf_tables: mask out non-verdict bits when checking return value
nftables trace infra must mask out the non-verdict bit parts of the return value, else followup changes that 'return errno << 8 | NF_STOLEN' will cause breakage. Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
parent
e15e502710
commit
4d26ab0086
@ -115,7 +115,7 @@ static noinline void __nft_trace_verdict(const struct nft_pktinfo *pkt,
|
||||
{
|
||||
enum nft_trace_types type;
|
||||
|
||||
switch (regs->verdict.code) {
|
||||
switch (regs->verdict.code & NF_VERDICT_MASK) {
|
||||
case NFT_CONTINUE:
|
||||
case NFT_RETURN:
|
||||
type = NFT_TRACETYPE_RETURN;
|
||||
|
@ -258,17 +258,21 @@ void nft_trace_notify(const struct nft_pktinfo *pkt,
|
||||
case __NFT_TRACETYPE_MAX:
|
||||
break;
|
||||
case NFT_TRACETYPE_RETURN:
|
||||
case NFT_TRACETYPE_RULE:
|
||||
case NFT_TRACETYPE_RULE: {
|
||||
unsigned int v;
|
||||
|
||||
if (nft_verdict_dump(skb, NFTA_TRACE_VERDICT, verdict))
|
||||
goto nla_put_failure;
|
||||
|
||||
/* pkt->skb undefined iff NF_STOLEN, disable dump */
|
||||
if (verdict->code == NF_STOLEN)
|
||||
v = verdict->code & NF_VERDICT_MASK;
|
||||
if (v == NF_STOLEN)
|
||||
info->packet_dumped = true;
|
||||
else
|
||||
mark = pkt->skb->mark;
|
||||
|
||||
break;
|
||||
}
|
||||
case NFT_TRACETYPE_POLICY:
|
||||
mark = pkt->skb->mark;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user