Without this patch, the chacha block counter is not incremented on neon rounds, resulting in incorrect calculations and corrupt packets. This also switches to using `--no-numbered --zero-commit` so that future diffs are smaller. Reported-by: Hans Geiblinger <cybrnook2002@yahoo.com> Reviewed-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com> Cc: David Bauer <mail@david-bauer.net> Cc: Petr Štetiar <ynezz@true.cz> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
36 lines
1.4 KiB
Diff
36 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;
|