<feed xmlns='http://www.w3.org/2005/Atom'>
<title>wireguard-linux-compat/src/compat/Kbuild.include, branch master</title>
<subtitle>WireGuard kernel module backport for Linux 3.10 - 5.5</subtitle>
<id>https://git.zx2c4.com/wireguard-linux-compat/atom/src/compat/Kbuild.include?h=master</id>
<link rel='self' href='https://git.zx2c4.com/wireguard-linux-compat/atom/src/compat/Kbuild.include?h=master'/>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/'/>
<updated>2022-04-14T12:49:25Z</updated>
<entry>
<title>device: check for metadata_dst with skb_valid_dst()</title>
<updated>2022-04-14T12:49:25Z</updated>
<author>
<name>Nikolay Aleksandrov</name>
<email>razor@blackwall.org</email>
</author>
<published>2022-04-14T10:44:57Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=f9d9b4db6fcdb06bd54d876255e66fee767bc87f'/>
<id>urn:sha1:f9d9b4db6fcdb06bd54d876255e66fee767bc87f</id>
<content type='text'>
When we try to transmit an skb with md_dst attached through wireguard
we hit a null pointer dereference in wg_xmit() due to the use of
dst_mtu() which calls into dst_blackhole_mtu() which in turn tries to
dereference dst-&gt;dev.

Since wireguard doesn't use md_dsts we should use skb_valid_dst(), which
checks for DST_METADATA flag, and if it's set, then falls back to
wireguard's device mtu. That gives us the best chance of transmitting
the packet; otherwise if the blackhole netdev is used we'd get
ETH_MIN_MTU.

 [  263.693506] BUG: kernel NULL pointer dereference, address: 00000000000000e0
 [  263.693908] #PF: supervisor read access in kernel mode
 [  263.694174] #PF: error_code(0x0000) - not-present page
 [  263.694424] PGD 0 P4D 0
 [  263.694653] Oops: 0000 [#1] PREEMPT SMP NOPTI
 [  263.694876] CPU: 5 PID: 951 Comm: mausezahn Kdump: loaded Not tainted 5.18.0-rc1+ #522
 [  263.695190] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1.fc35 04/01/2014
 [  263.695529] RIP: 0010:dst_blackhole_mtu+0x17/0x20
 [  263.695770] Code: 00 00 00 0f 1f 44 00 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 8b 47 10 48 83 e0 fc 8b 40 04 85 c0 75 09 48 8b 07 &lt;8b&gt; 80 e0 00 00 00 c3 66 90 0f 1f 44 00 00 48 89 d7 be 01 00 00 00
 [  263.696339] RSP: 0018:ffffa4a4422fbb28 EFLAGS: 00010246
 [  263.696600] RAX: 0000000000000000 RBX: ffff8ac9c3553000 RCX: 0000000000000000
 [  263.696891] RDX: 0000000000000401 RSI: 00000000fffffe01 RDI: ffffc4a43fb48900
 [  263.697178] RBP: ffffa4a4422fbb90 R08: ffffffff9622635e R09: 0000000000000002
 [  263.697469] R10: ffffffff9b69a6c0 R11: ffffa4a4422fbd0c R12: ffff8ac9d18b1a00
 [  263.697766] R13: ffff8ac9d0ce1840 R14: ffff8ac9d18b1a00 R15: ffff8ac9c3553000
 [  263.698054] FS:  00007f3704c337c0(0000) GS:ffff8acaebf40000(0000) knlGS:0000000000000000
 [  263.698470] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 [  263.698826] CR2: 00000000000000e0 CR3: 0000000117a5c000 CR4: 00000000000006e0
 [  263.699214] Call Trace:
 [  263.699505]  &lt;TASK&gt;
 [  263.699759]  wg_xmit+0x411/0x450
 [  263.700059]  ? bpf_skb_set_tunnel_key+0x46/0x2d0
 [   263.700382]  ? dev_queue_xmit_nit+0x31/0x2b0
 [  263.700719]  dev_hard_start_xmit+0xd9/0x220
 [  263.701047]  __dev_queue_xmit+0x8b9/0xd30
 [  263.701344]  __bpf_redirect+0x1a4/0x380
 [  263.701664]  __dev_queue_xmit+0x83b/0xd30
 [  263.701961]  ? packet_parse_headers+0xb4/0xf0
 [  263.702275]  packet_sendmsg+0x9a8/0x16a0
 [  263.702596]  ? _raw_spin_unlock_irqrestore+0x23/0x40
 [  263.702933]  sock_sendmsg+0x5e/0x60
 [  263.703239]  __sys_sendto+0xf0/0x160
 [  263.703549]  __x64_sys_sendto+0x20/0x30
 [  263.703853]  do_syscall_64+0x3b/0x90
 [  263.704162]  entry_SYSCALL_64_after_hwframe+0x44/0xae
 [  263.704494] RIP: 0033:0x7f3704d50506
 [  263.704789] Code: 48 c7 c0 ff ff ff ff eb b7 66 2e 0f 1f 84 00 00 00 00 00 90 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 11 b8 2c 00 00 00 0f 05 &lt;48&gt; 3d 00 f0 ff ff 77 72 c3 90 55 48 83 ec 30 44 89 4c 24 2c 4c 89
 [  263.705652] RSP: 002b:00007ffe954b0b88 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
 [  263.706141] RAX: ffffffffffffffda RBX: 0000558bb259b490 RCX: 00007f3704d50506
 [  263.706544] RDX: 000000000000004a RSI: 0000558bb259b7b2 RDI: 0000000000000003
 [  263.706952] RBP: 0000000000000000 R08: 00007ffe954b0b90 R09: 0000000000000014
 [  263.707339] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffe954b0b90
 [  263.707735] R13: 000000000000004a R14: 0000558bb259b7b2 R15: 0000000000000001
 [  263.708132]  &lt;/TASK&gt;
 [  263.708398] Modules linked in: bridge netconsole bonding [last unloaded: bridge]
 [  263.708942] CR2: 00000000000000e0

Link: https://github.com/cilium/cilium/issues/19428
Reported-by: Martynas Pumputis &lt;m@lambda.lt&gt;
Signed-off-by: Nikolay Aleksandrov &lt;razor@blackwall.org&gt;
Acked-by: Daniel Borkmann &lt;daniel@iogearbox.net&gt;
[Jason: polyfilled for &lt; 4.3]
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>queueing: use CFI-safe ptr_ring cleanup function</title>
<updated>2022-03-02T22:49:51Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2022-03-02T22:48:40Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=4eff63d292f714a67834bfbd7cbc4c0fa0b1dd52'/>
<id>urn:sha1:4eff63d292f714a67834bfbd7cbc4c0fa0b1dd52</id>
<content type='text'>
We make too nuanced use of ptr_ring to entirely move to the skb_array
wrappers, but we at least should avoid the naughty function pointer cast
when cleaning up skbs. Otherwise RAP/CFI will honk at us. This patch
uses the __skb_array_destroy_skb wrapper for the cleanup, rather than
directly providing kfree_skb, which is what other drivers in the same
situation do too.

Reported-by: PaX Team &lt;pageexec@freemail.hu&gt;
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: redefine version constants for sublevel&gt;=256</title>
<updated>2021-02-07T17:03:47Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2021-02-06T23:56:44Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=bb0ed3f6d91f19447732f667dac077dfd7338d57'/>
<id>urn:sha1:bb0ed3f6d91f19447732f667dac077dfd7338d57</id>
<content type='text'>
With the 4.4.256 and 4.9.256 kernels, the previous calculation for
integer comparison overflowed. This commit redefines the broken
constants to have more space for the sublevel.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: use bash instead of bc for HZ--&gt;USEC calculation</title>
<updated>2020-05-04T02:08:55Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-05-01T04:18:47Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=4685f980e24686a6b498602419a92c1d54478258'/>
<id>urn:sha1:4685f980e24686a6b498602419a92c1d54478258</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: detect Debian's backport of ip6_dst_lookup_flow into 4.19.118</title>
<updated>2020-05-04T02:08:55Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-05-02T06:56:42Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=1990cff56992c0984ae5d73989ba10aa26eae608'/>
<id>urn:sha1:1990cff56992c0984ae5d73989ba10aa26eae608</id>
<content type='text'>
Link: https://bugs.debian.org/959157
Reported-by: Luca Filipozzi &lt;lfilipoz@debian.org&gt;
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: timeconst.h is a generated artifact</title>
<updated>2020-05-01T04:08:29Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-05-01T04:00:11Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=e21f8816ec23e6a01529a05215a45d713d5a55b4'/>
<id>urn:sha1:e21f8816ec23e6a01529a05215a45d713d5a55b4</id>
<content type='text'>
Before we were trying to check for timeconst.h by looking in the kernel
source directory. This isn't quite correct on configurations in which
the object directory is separate from the kernel source directory, for
example when using O="elsewhere" as a make option when building the
kernel. The correct fix is to use $(CURDIR), which should point to
where we want.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: error out if bc is missing</title>
<updated>2020-04-14T09:02:07Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-04-14T09:01:37Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=fcf7f20e2fc039bafc5e78104e1d9fae2852b50d'/>
<id>urn:sha1:fcf7f20e2fc039bafc5e78104e1d9fae2852b50d</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: account for android-4.9 backport of addr_gen_mode</title>
<updated>2019-08-25T17:02:19Z</updated>
<author>
<name>Nathan Chancellor</name>
<email>natechancellor@gmail.com</email>
</author>
<published>2019-08-25T05:37:50Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=278fd990d06c3c3619df508c81e76ad20f106a12'/>
<id>urn:sha1:278fd990d06c3c3619df508c81e76ad20f106a12</id>
<content type='text'>
Android kernels backported d35a00b8e33dab7385f724e713ae71c8be0a49f4, so
now we need to do feature detection.

Link: https://android-review.googlesource.com/c/kernel/common/+/1103831
Signed-off-by: Nathan Chancellor &lt;natechancellor@gmail.com&gt;
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: do not run bc on clean target</title>
<updated>2019-08-03T11:45:14Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2019-08-03T11:45:14Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=5bae8e4460e150d218b046302d7c231580bf5ec7'/>
<id>urn:sha1:5bae8e4460e150d218b046302d7c231580bf5ec7</id>
<content type='text'>
Certain targets don't define CONFIG_*, which means this bc command was
previously failing.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>compat: define conversion constants for ancient kernels</title>
<updated>2019-07-04T09:15:48Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2019-07-04T09:14:41Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-linux-compat/commit/?id=87b809b88e1bf41a9c142d22a6e29f08d992ca41'/>
<id>urn:sha1:87b809b88e1bf41a9c142d22a6e29f08d992ca41</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
</feed>
