mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
37 lines
1.4 KiB
Diff
37 lines
1.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
|
|
Date: Mon, 29 Jun 2020 19:06:20 -0600
|
|
Subject: [PATCH] wireguard: implement header_ops->parse_protocol for AF_PACKET
|
|
|
|
commit 01a4967c71c004f8ecad4ab57021348636502fa9 upstream.
|
|
|
|
WireGuard uses skb->protocol to determine packet type, and bails out if
|
|
it's not set or set to something it's not expecting. For AF_PACKET
|
|
injection, we need to support its call chain of:
|
|
|
|
packet_sendmsg -> packet_snd -> packet_parse_headers ->
|
|
dev_parse_header_protocol -> parse_protocol
|
|
|
|
Without a valid parse_protocol, this returns zero, and wireguard then
|
|
rejects the skb. So, this wires up the ip_tunnel handler for layer 3
|
|
packets for that case.
|
|
|
|
Reported-by: Hans Wippel <ndev@hwipl.net>
|
|
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
|
---
|
|
drivers/net/wireguard/device.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
--- a/drivers/net/wireguard/device.c
|
|
+++ b/drivers/net/wireguard/device.c
|
|
@@ -262,6 +262,7 @@ static void wg_setup(struct net_device *
|
|
max(sizeof(struct ipv6hdr), sizeof(struct iphdr));
|
|
|
|
dev->netdev_ops = &netdev_ops;
|
|
+ dev->header_ops = &ip_tunnel_header_ops;
|
|
dev->hard_header_len = 0;
|
|
dev->addr_len = 0;
|
|
dev->needed_headroom = DATA_PACKET_HEAD_ROOM;
|