aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'net/netfilter/nfnetlink_queue.c')
-rw-r--r--net/netfilter/nfnetlink_queue.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index f81a3ce0fe48..a5aff2834bd6 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -566,7 +566,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
566 goto nla_put_failure; 566 goto nla_put_failure;
567 567
568 if (indev && entskb->dev && 568 if (indev && entskb->dev &&
569 entskb->mac_header != entskb->network_header) { 569 skb_mac_header_was_set(entskb) &&
570 skb_mac_header_len(entskb) != 0) {
570 struct nfqnl_msg_packet_hw phw; 571 struct nfqnl_msg_packet_hw phw;
571 int len; 572 int len;
572 573
@@ -715,9 +716,15 @@ static struct nf_queue_entry *
715nf_queue_entry_dup(struct nf_queue_entry *e) 716nf_queue_entry_dup(struct nf_queue_entry *e)
716{ 717{
717 struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC); 718 struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC);
718 if (entry) 719
719 nf_queue_entry_get_refs(entry); 720 if (!entry)
720 return entry; 721 return NULL;
722
723 if (nf_queue_entry_get_refs(entry))
724 return entry;
725
726 kfree(entry);
727 return NULL;
721} 728}
722 729
723#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 730#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)