From: Sasha Levin Date: Mon, 20 Jan 2020 22:17:28 +0000 (-0500) Subject: fixes for 4.4 X-Git-Tag: v4.4.211~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9a12d7fb046cad41e3a634d5e6b2c9ffe74ac9f;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.4 Signed-off-by: Sasha Levin --- diff --git a/queue-4.4/macvlan-use-skb_reset_mac_header-in-macvlan_queue_xm.patch b/queue-4.4/macvlan-use-skb_reset_mac_header-in-macvlan_queue_xm.patch new file mode 100644 index 00000000000..0c920097d79 --- /dev/null +++ b/queue-4.4/macvlan-use-skb_reset_mac_header-in-macvlan_queue_xm.patch @@ -0,0 +1,54 @@ +From d3da30146efbcb32dbe11024d083f5ee6f05a4e9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 Jan 2020 13:00:35 -0800 +Subject: macvlan: use skb_reset_mac_header() in macvlan_queue_xmit() + +From: Eric Dumazet + +[ Upstream commit 1712b2fff8c682d145c7889d2290696647d82dab ] + +I missed the fact that macvlan_broadcast() can be used both +in RX and TX. + +skb_eth_hdr() makes only sense in TX paths, so we can not +use it blindly in macvlan_broadcast() + +Fixes: 96cc4b69581d ("macvlan: do not assume mac_header is set in macvlan_broadcast()") +Signed-off-by: Eric Dumazet +Reported-by: Jurgen Van Ham +Tested-by: Matteo Croce +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/macvlan.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c +index eb825ea52d6b..bd49303f7db2 100644 +--- a/drivers/net/macvlan.c ++++ b/drivers/net/macvlan.c +@@ -233,7 +233,7 @@ static void macvlan_broadcast(struct sk_buff *skb, + struct net_device *src, + enum macvlan_mode mode) + { +- const struct ethhdr *eth = skb_eth_hdr(skb); ++ const struct ethhdr *eth = eth_hdr(skb); + const struct macvlan_dev *vlan; + struct sk_buff *nskb; + unsigned int i; +@@ -476,10 +476,11 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev) + const struct macvlan_dev *dest; + + if (vlan->mode == MACVLAN_MODE_BRIDGE) { +- const struct ethhdr *eth = (void *)skb->data; ++ const struct ethhdr *eth = skb_eth_hdr(skb); + + /* send to other bridge ports directly */ + if (is_multicast_ether_addr(eth->h_dest)) { ++ skb_reset_mac_header(skb); + macvlan_broadcast(skb, port, dev, MACVLAN_MODE_BRIDGE); + goto xmit_world; + } +-- +2.20.1 + diff --git a/queue-4.4/series b/queue-4.4/series index f9a02cb074b..62d2f206351 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -60,3 +60,4 @@ scsi-fnic-fix-invalid-stack-access.patch arm64-dts-agilex-stratix10-fix-pmu-interrupt-numbers.patch netfilter-fix-a-use-after-free-in-mtype_destroy.patch batman-adv-fix-dat-candidate-selection-on-little-endian-systems.patch +macvlan-use-skb_reset_mac_header-in-macvlan_queue_xm.patch