Subject: CVE-2024-26861: wireguard: receive: annotate data-race around receiving_counter.counter

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

wireguard: receive: annotate data-race around receiving_counter.counter

Syzkaller with KCSAN identified a data-race issue when accessing
keypair->receiving_counter.counter. Use READ_ONCE() and WRITE_ONCE()
annotations to mark the data race as intentional.

    BUG: KCSAN: data-race in wg_packet_decrypt_worker / wg_packet_rx_poll

    write to 0xffff888107765888 of 8 bytes by interrupt on cpu 0:
     counter_validate drivers/net/wireguard/receive.c:321 [inline]
     wg_packet_rx_poll+0x3ac/0xf00 drivers/net/wireguard/receive.c:461
     __napi_poll+0x60/0x3b0 net/core/dev.c:6536
     napi_poll net/core/dev.c:6605 [inline]
     net_rx_action+0x32b/0x750 net/core/dev.c:6738
     __do_softirq+0xc4/0x279 kernel/softirq.c:553
     do_softirq+0x5e/0x90 kernel/softirq.c:454
     __local_bh_enable_ip+0x64/0x70 kernel/softirq.c:381
     __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:167 [inline]
     _raw_spin_unlock_bh+0x36/0x40 kernel/locking/spinlock.c:210
     spin_unlock_bh include/linux/spinlock.h:396 [inline]
     ptr_ring_consume_bh include/linux/ptr_ring.h:367 [inline]
     wg_packet_decrypt_worker+0x6c5/0x700 drivers/net/wireguard/receive.c:499
     process_one_work kernel/workqueue.c:2633 [inline]
     ...

    read to 0xffff888107765888 of 8 bytes by task 3196 on cpu 1:
     decrypt_packet drivers/net/wireguard/receive.c:252 [inline]
     wg_packet_decrypt_worker+0x220/0x700 drivers/net/wireguard/receive.c:501
     process_one_work kernel/workqueue.c:2633 [inline]
     process_scheduled_works+0x5b8/0xa30 kernel/workqueue.c:2706
     worker_thread+0x525/0x730 kernel/workqueue.c:2787
     ...

The Linux kernel CVE team has assigned CVE-2024-26861 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 5.10.214 with commit f87884e0dffd
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 5.15.153 with commit d691be84ab89
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 6.1.83 with commit 45a83b220c83
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 6.6.23 with commit 78739d72f16b
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 6.7.11 with commit 3f94da807fe1
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 6.8.2 with commit fdf16de078a9
	Issue introduced in 5.7 with commit a9e90d9931f3 and fixed in 6.9 with commit bba045dc4d99
	Issue introduced in 5.6.16 with commit 4a7939808afd

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-26861
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	drivers/net/wireguard/receive.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/f87884e0dffd61b47e58bc6e1e2f6843c212b0cc
	https://git.kernel.org/stable/c/d691be84ab898cf136a35176eaf2f8fc116563f0
	https://git.kernel.org/stable/c/45a83b220c83e3c326513269afbf69ae6fc65cce
	https://git.kernel.org/stable/c/78739d72f16b2d7d549f713f1dfebd678d32484b
	https://git.kernel.org/stable/c/3f94da807fe1668b9830f0eefbbf7e887b0a7bc6
	https://git.kernel.org/stable/c/fdf16de078a97bf14bb8ee2b8d47cc3d3ead09ed
	https://git.kernel.org/stable/c/bba045dc4d996d03dce6fe45726e78a1a1f6d4c3