diff options
author | Sabrina Dubroca <sd@queasysnail.net> | 2015-11-16 16:54:20 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-11-17 14:39:29 -0500 |
commit | e639b8d8a7a728f0b05ef2df6cb6b45dc3d4e556 (patch) | |
tree | 34273bbcc5b651b9a9f2ce16548313e6e05ee09c /drivers/net/macvlan.c | |
parent | a534dc529853c69e94994aa47c1d80a03ce2c11d (diff) |
macvlan: fix leak in macvlan_handle_frame
Reset pskb in macvlan_handle_frame in case skb_share_check returned a
clone.
Fixes: 8a4eb5734e8d ("net: introduce rx_handler results and logic around that")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 86f6c6292c27..06c8bfeaccd6 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -415,6 +415,7 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb) | |||
415 | skb = ip_check_defrag(dev_net(skb->dev), skb, IP_DEFRAG_MACVLAN); | 415 | skb = ip_check_defrag(dev_net(skb->dev), skb, IP_DEFRAG_MACVLAN); |
416 | if (!skb) | 416 | if (!skb) |
417 | return RX_HANDLER_CONSUMED; | 417 | return RX_HANDLER_CONSUMED; |
418 | *pskb = skb; | ||
418 | eth = eth_hdr(skb); | 419 | eth = eth_hdr(skb); |
419 | macvlan_forward_source(skb, port, eth->h_source); | 420 | macvlan_forward_source(skb, port, eth->h_source); |
420 | src = macvlan_hash_lookup(port, eth->h_source); | 421 | src = macvlan_hash_lookup(port, eth->h_source); |
@@ -456,6 +457,7 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb) | |||
456 | goto out; | 457 | goto out; |
457 | } | 458 | } |
458 | 459 | ||
460 | *pskb = skb; | ||
459 | skb->dev = dev; | 461 | skb->dev = dev; |
460 | skb->pkt_type = PACKET_HOST; | 462 | skb->pkt_type = PACKET_HOST; |
461 | 463 | ||