aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/netfilter/nft_meta.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c
index 8fb91940e2e7..204af9899482 100644
--- a/net/netfilter/nft_meta.c
+++ b/net/netfilter/nft_meta.c
@@ -234,7 +234,7 @@ void nft_meta_set_eval(const struct nft_expr *expr,
234 struct sk_buff *skb = pkt->skb; 234 struct sk_buff *skb = pkt->skb;
235 u32 *sreg = &regs->data[meta->sreg]; 235 u32 *sreg = &regs->data[meta->sreg];
236 u32 value = *sreg; 236 u32 value = *sreg;
237 u8 pkt_type; 237 u8 value8;
238 238
239 switch (meta->key) { 239 switch (meta->key) {
240 case NFT_META_MARK: 240 case NFT_META_MARK:
@@ -244,15 +244,17 @@ void nft_meta_set_eval(const struct nft_expr *expr,
244 skb->priority = value; 244 skb->priority = value;
245 break; 245 break;
246 case NFT_META_PKTTYPE: 246 case NFT_META_PKTTYPE:
247 pkt_type = nft_reg_load8(sreg); 247 value8 = nft_reg_load8(sreg);
248 248
249 if (skb->pkt_type != pkt_type && 249 if (skb->pkt_type != value8 &&
250 skb_pkt_type_ok(pkt_type) && 250 skb_pkt_type_ok(value8) &&
251 skb_pkt_type_ok(skb->pkt_type)) 251 skb_pkt_type_ok(skb->pkt_type))
252 skb->pkt_type = pkt_type; 252 skb->pkt_type = value8;
253 break; 253 break;
254 case NFT_META_NFTRACE: 254 case NFT_META_NFTRACE:
255 skb->nf_trace = !!value; 255 value8 = nft_reg_load8(sreg);
256
257 skb->nf_trace = !!value8;
256 break; 258 break;
257 default: 259 default:
258 WARN_ON(1); 260 WARN_ON(1);