Skip to content
OpenAdvisories
Unscored CVE-2024-40915 EUVD-2024-38726GHSA-cxf4-996m-v4m3

riscv: rewrite __kernel_map_pages() to fix sleeping in invalid context

Published Jul 12, 2024 · Updated May 11, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: kernel Package: linux Package: linux Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.15 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.8 Package: linux-aws-6.2 Package: linux-aws-6.5 Package: linux-aws-6.8 Package: linux-aws-fips Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.15 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.8 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-6.8 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.2 Package: linux-azure-fips Package: linux-bluefield Package: linux-fips Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.15 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.8 Package: linux-gcp-6.2 Package: linux-gcp-6.5 Package: linux-gcp-6.8 Package: linux-gcp-fips Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.15 Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.15 Package: linux-hwe-5.19 Package: linux-hwe-5.8 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-6.8 Package: linux-hwe-edge Package: linux-ibm Package: linux-ibm-5.15 Package: linux-ibm-6.8 Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-intel-iotg Package: linux-intel-iotg-5.15 Package: linux-kvm Package: linux-lowlatency Package: linux-lowlatency-hwe-5.15 Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.2 Package: linux-lowlatency-hwe-6.5 Package: linux-lowlatency-hwe-6.8 Package: linux-nvidia Package: linux-nvidia-6.2 Package: linux-nvidia-6.5 Package: linux-nvidia-6.8 Package: linux-nvidia-lowlatency Package: linux-nvidia-tegra Package: linux-nvidia-tegra-5.15 Package: linux-nvidia-tegra-igx Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oem-6.5 Package: linux-oem-6.8 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.15 Package: linux-oracle-5.3 Package: linux-oracle-5.8 Package: linux-oracle-6.5 Package: linux-oracle-6.8 Package: linux-raspi Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-realtime-6.8 Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.15 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-riscv-6.5 Package: linux-riscv-6.8 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-starfive-6.5 Package: linux-vmware Package: linux-xilinx-zynqmp Platform: Linux Ecosystem: Azure Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

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

riscv: rewrite __kernel_map_pages() to fix sleeping in invalid context

__kernel_map_pages() is a debug function which clears the valid bit in page
table entry for deallocated pages to detect illegal memory accesses to
freed pages.

This function set/clear the valid bit using __set_memory(). __set_memory()
acquires init_mm's semaphore, and this operation may sleep. This is
problematic, because __kernel_map_pages() can be called in atomic context,
and thus is illegal to sleep. An example warning that this causes:

BUG: sleeping function called from invalid context at kernel/locking/rwsem.c:1578
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 2, name: kthreadd
preempt_count: 2, expected: 0
CPU: 0 PID: 2 Comm: kthreadd Not tainted 6.9.0-g1d4c6d784ef6 #37
Hardware name: riscv-virtio,qemu (DT)
Call Trace:
[<ffffffff800060dc>] dump_backtrace+0x1c/0x24
[<ffffffff8091ef6e>] show_stack+0x2c/0x38
[<ffffffff8092baf8>] dump_stack_lvl+0x5a/0x72
[<ffffffff8092bb24>] dump_stack+0x14/0x1c
[<ffffffff8003b7ac>] __might_resched+0x104/0x10e
[<ffffffff8003b7f4>] __might_sleep+0x3e/0x62
[<ffffffff8093276a>] down_write+0x20/0x72
[<ffffffff8000cf00>] __set_memory+0x82/0x2fa
[<ffffffff8000d324>] __kernel_map_pages+0x5a/0xd4
[<ffffffff80196cca>] __alloc_pages_bulk+0x3b2/0x43a
[<ffffffff8018ee82>] __vmalloc_node_range+0x196/0x6ba
[<ffffffff80011904>] copy_process+0x72c/0x17ec
[<ffffffff80012ab4>] kernel_clone+0x60/0x2fe
[<ffffffff80012f62>] kernel_thread+0x82/0xa0
[<ffffffff8003552c>] kthreadd+0x14a/0x1be
[<ffffffff809357de>] ret_from_fork+0xe/0x1c

Rewrite this function with apply_to_existing_page_range(). It is fine to
not have any locking, because __kernel_map_pages() works with pages being
allocated/deallocated and those pages are not changed by anyone else in the
meantime.

Affected products

VendorProductAffectedFixed
Linux Linux 5.7 6.1.95

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 6.9.7-1 —
Debian 13 linux 6.9.7-1 —
Debian 12 linux 6.1.99-1 DSA-5731-1
Debian 11 linux-6.1 6.1.119-1~deb11u1 DLA-4008-1
ReleasePackageFixed inAdvisory
Ubuntu Nvidia-BlueField 22.04 LTS linux-bluefield 5.15.0-1056.58 —
Ubuntu 24.04 LTS linux 6.8.0-44.44 USN-6999-1
Ubuntu 24.04 LTS linux-aws 6.8.0-1015.16 USN-6999-1
Ubuntu 24.04 LTS linux-gcp +1 6.8.0-1014.16 USN-7004-1, USN-6999-1
Ubuntu 24.04 LTS linux-gke 6.8.0-1010.13 USN-6999-1
Ubuntu 24.04 LTS linux-ibm +2 6.8.0-1012.12 USN-6999-1
Ubuntu 24.04 LTS linux-nvidia 6.8.0-1013.14 USN-7005-1
Ubuntu 24.04 LTS linux-nvidia-lowlatency 6.8.0-1013.14.1 USN-7005-1
Ubuntu 24.04 LTS linux-raspi 6.8.0-1011.12 USN-6999-2
Ubuntu 24.04 LTS linux-riscv +1 6.8.0-44.44.1 USN-6999-1
Ubuntu 22.04 LTS linux +1 5.15.0-125.135 USN-7100-1
Ubuntu 22.04 LTS linux-aws 5.15.0-1072.78 USN-7100-2
Ubuntu 22.04 LTS linux-aws-6.8 6.8.0-1015.16~22.04.1 —
Ubuntu 22.04 LTS linux-azure 5.15.0-1075.84 USN-7123-1
Ubuntu 22.04 LTS linux-azure-fde 5.15.0-1076.85.1 —
Ubuntu 22.04 LTS linux-gcp 5.15.0-1071.79 USN-7100-1
Ubuntu 22.04 LTS linux-gcp-6.8 +1 6.8.0-1014.16~22.04.1 —
Ubuntu 22.04 LTS linux-gke 5.15.0-1069.75 USN-7100-1
Ubuntu 22.04 LTS linux-gkeop 5.15.0-1055.62 USN-7100-1
Ubuntu 22.04 LTS linux-hwe-6.8 6.8.0-45.45~22.04.1 USN-7029-1
Ubuntu 22.04 LTS linux-ibm +1 5.15.0-1065.68 USN-7100-1
Ubuntu 22.04 LTS linux-ibm-6.8 +1 6.8.0-1012.12~22.04.1 —
Ubuntu 22.04 LTS linux-intel-iotg 5.15.0-1067.73 USN-7144-1
Ubuntu 22.04 LTS linux-kvm 5.15.0-1069.74 USN-7100-1
Ubuntu 22.04 LTS linux-nvidia 5.15.0-1067.68 USN-7100-1
Ubuntu 22.04 LTS linux-nvidia-6.8 6.8.0-1013.14~22.04.1 USN-7005-2
Ubuntu 22.04 LTS linux-nvidia-tegra 5.15.0-1032.32 —
Ubuntu 22.04 LTS linux-nvidia-tegra-igx 5.15.0-1020.20 —
Ubuntu 22.04 LTS linux-oracle 5.15.0-1070.76 USN-7100-1
Ubuntu 22.04 LTS linux-riscv +31 No fix yet —
Ubuntu 22.04 LTS linux-riscv-6.8 +1 6.8.0-44.44.1~22.04.1 USN-7008-1
Ubuntu 22.04 LTS linux-xilinx-zynqmp 5.15.0-1038.42 USN-7100-1
Ubuntu 20.04 LTS linux-aws-5.15 5.15.0-1072.78~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-azure-5.15 5.15.0-1078.87~20.04.1 USN-7194-1
Ubuntu 20.04 LTS linux-gcp-5.15 5.15.0-1071.79~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-gke +26 No fix yet —
Ubuntu 20.04 LTS linux-gkeop-5.15 5.15.0-1055.62~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-hwe-5.15 +1 5.15.0-125.135~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-ibm-5.15 5.15.0-1065.68~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-intel-iotg-5.15 5.15.0-1067.73~20.04.1 USN-7144-1
Ubuntu 20.04 LTS linux-nvidia-tegra-5.15 5.15.0-1032.32~20.04.1 —
Ubuntu 20.04 LTS linux-oracle-5.15 5.15.0-1070.76~20.04.1 USN-7100-1
Ubuntu 20.04 LTS linux-riscv-5.15 5.15.0-1068.72~20.04.1 —
Ubuntu 18.04 LTS linux-gcp +13 No fix yet —
Show 6 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Ubuntu Pro Realtime 24.04 LTS linux-raspi-realtime 6.8.0-2010.10 —
Ubuntu Pro Realtime 24.04 LTS linux-realtime 6.8.1-1008.8 —
Ubuntu Pro Realtime 22.04 LTS linux-intel-iot-realtime 5.15.0-1066.68 —
Ubuntu Pro Realtime 22.04 LTS linux-realtime 5.15.0-1073.81 —
Ubuntu Pro Realtime 22.04 LTS linux-realtime-6.8 6.8.1-1008.8~22.04.1 —
Ubuntu Pro FIPS-updates 24.04 LTS linux-fips 6.8.0-78.78+fips1 —
Ubuntu Pro FIPS-updates 22.04 LTS linux-aws-fips 5.15.0-1072.78+fips1 —
Ubuntu Pro FIPS-updates 22.04 LTS linux-azure-fips 5.15.0-1075.84+fips1 —
Ubuntu Pro FIPS-updates 22.04 LTS linux-fips 5.15.0-125.135+fips1 —
Ubuntu Pro FIPS-updates 22.04 LTS linux-gcp-fips 5.15.0-1071.79+fips1 —
Ubuntu Pro FIPS-preview 22.04 LTS linux-fips +3 No fix yet —

Azure Linux

ReleasePackageFixed inAdvisory
Azure Linux 2 (CBL-Mariner) kernel No fix yet —

Advisories 15

References