aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Eckelmann <[email protected]>2018-12-31 22:31:01 +0100
committerSimon Wunderlich <[email protected]>2018-12-31 22:47:50 +0100
commit9114daa825fc3f335f9bea3313ce667090187280 (patch)
treeb654907c8a71f008fb919c28fdef4e9c4fec8422
parent955d3411a17f590364238bd0d3329b61f20c1cd2 (diff)
batman-adv: Force mac header to start of data on xmit
The caller of ndo_start_xmit may not already have called skb_reset_mac_header. The returned value of skb_mac_header/eth_hdr therefore can be in the wrong position and even outside the current skbuff. This for example happens when the user binds to the device using a PF_PACKET-SOCK_RAW with enabled qdisc-bypass: int opt = 4; setsockopt(sock, SOL_PACKET, PACKET_QDISC_BYPASS, &opt, sizeof(opt)); Since eth_hdr is used all over the codebase, the batadv_interface_tx function must always take care of resetting it. Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol") Reported-by: [email protected] Reported-by: [email protected] Signed-off-by: Sven Eckelmann <[email protected]> Signed-off-by: Simon Wunderlich <[email protected]>
-rw-r--r--net/batman-adv/soft-interface.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 5db5a0a4c959..b85ca809e509 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -221,6 +221,8 @@ static netdev_tx_t batadv_interface_tx(struct sk_buff *skb,
netif_trans_update(soft_iface);
vid = batadv_get_vid(skb, 0);
+
+ skb_reset_mac_header(skb);
ethhdr = eth_hdr(skb);
switch (ntohs(ethhdr->h_proto)) {