CVE-2024-26989: arm64: hibernate: Fix level3 translation fault in swsusp_save()

Published May 1, 2024
·
Updated

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

arm64: hibernate: Fix level3 translation fault in swsuspsave()

On arm64 machines, swsuspsave() faults if it attempts to access MEMBLOCKNOMAP memory ranges. This can be reproduced in QEMU using UEFI when booting with rodata=off debugpagealloc=off and CONFIGKFENCE=n:

Unable to handle kernel paging request at virtual address ffffff8000000000 Mem abort info: ESR = 0x0000000096000007 EC = 0x25: DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 FSC = 0x07: level 3 translation fault Data abort info: ISV = 0, ISS = 0x00000007, ISS2 = 0x00000000 CM = 0, WnR = 0, TnD = 0, TagAccess = 0 GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 swapper pgtable: 4k pages, 39-bit VAs, pgdp=00000000eeb0b000 [ffffff8000000000] pgd=180000217fff9803, p4d=180000217fff9803, pud=180000217fff9803, pmd=180000217fff8803, pte=0000000000000000 Internal error: Oops: 0000000096000007 [#1] SMP Internal error: Oops: 0000000096000007 [#1] SMP Modules linked in: xtmultiport iptREJECT nfrejectipv4 xtconntrack nfconntrack nfdefragipv6 nfdefragipv4 libcrc32c iptablefilter bpfilter rfkill at803x sndhdacodechdmi sndhdaintel sndinteldspcfg dwmacgeneric stmmacplatform sndhdacodec stmmac joydev pcsxpcs sndhdacore phylink ppdev lp parport ramoops reedsolomon iptables xtables nlsiso88591 vfat multipath linear amdgpu amdxcp drmexec gpusched drmbuddy hidgeneric usbhid hid radeon video drmsuballochelper drmttmhelper ttm i2calgobit drmdisplayhelper cec drmkmshelper drm CPU: 0 PID: 3663 Comm: systemd-sleep Not tainted 6.6.2+ #76 Source Version: 4e22ed63a0a48e7a7cff9b98b7806d8d4add7dc0 Hardware name: Greatwall GW-XXXXXX-XXX/GW-XXXXXX-XXX, BIOS KunLun BIOS V4.0 01/19/2021 pstate: 600003c5 (nZCv DAIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : swsuspsave+0x280/0x538 lr : swsuspsave+0x280/0x538 sp : ffffffa034a3fa40 x29: ffffffa034a3fa40 x28: ffffff8000001000 x27: 0000000000000000 x26: ffffff8001400000 x25: ffffffc08113e248 x24: 0000000000000000 x23: 0000000000080000 x22: ffffffc08113e280 x21: 00000000000c69f2 x20: ffffff8000000000 x19: ffffffc081ae2500 x18: 0000000000000000 x17: 6666662074736420 x16: 3030303030303030 x15: 3038666666666666 x14: 0000000000000b69 x13: ffffff9f89088530 x12: 00000000ffffffea x11: 00000000ffff7fff x10: 00000000ffff7fff x9 : ffffffc08193f0d0 x8 : 00000000000bffe8 x7 : c0000000ffff7fff x6 : 0000000000000001 x5 : ffffffa0fff09dc8 x4 : 0000000000000000 x3 : 0000000000000027 x2 : 0000000000000000 x1 : 0000000000000000 x0 : 000000000000004e Call trace: swsuspsave+0x280/0x538 swsusparchsuspend+0x148/0x190 hibernationsnapshot+0x240/0x39c hibernate+0xc4/0x378 statestore+0xf0/0x10c kobjattrstore+0x14/0x24

The reason is swsuspsave() -> copydatapages() -> pageissaveable() -> kernelpagepresent() assuming that a page is always present when cansetdirectmap() is false (all of rodatafull, debugpageallocenabled() and arm64kfencecansetdirectmap() false), irrespective of the MEMBLOCKNOMAP ranges. Such MEMBLOCKNOMAP regions should not be saved during hibernation.

This problem was introduced by changes to the pfnvalid() logic in commit a7d9f306ba70 ("arm64: drop pfnvalidwithin() and simplify pfnvalid()").

Similar to other architectures, drop the !cansetdirectmap() check in kernelpagepresent() so that pageissavable() skips such pages.

[catalin.marinas@arm.com: rework commit message]

Other sources

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

arm64: hibernate: Fix level3 translation fault in swsuspsave()

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

Upstream advisory: https://lore.kernel.org/linux-cve-announce/2024050143-CVE-2024-26989-851d@gregkh/T

Red Hat

Affected Software

14 affected componentsFixes available
redhat/kernel<5.15.157
5.15.157
redhat/kernel<6.1.88
6.1.88
redhat/kernel<6.6.29
6.6.29
redhat/kernel<6.8.8
6.8.8
redhat/kernel<6.9
6.9
Linux Linux kernel>=5.14<5.15.157
Linux Linux kernel>=5.16<6.1.88
Linux Linux kernel>=6.2<6.6.29
Linux Linux kernel>=6.7<6.8.8
Linux Linux kernel=6.9-rc1
Linux Linux kernel=6.9-rc2
Linux Linux kernel=6.9-rc3
Linux Linux kernel=6.9-rc4
debian/linux
5.10.223-15.10.234-16.1.129-16.1.135-16.12.25-16.12.27-1

Event History

May 1, 2024
CVE Published
via MITRE·05:27 AM
Data Sourced
via MITRE·05:27 AM
Description
Rejected
via NVD·06:15 AM
Data Sourced
via NVD·06:15 AM
RemedyDescriptionSeverityAffected Software
Data Sourced
via Red Hat·07:15 PM
DescriptionSeverityAffected Software
Jul 11, 2024
Data Sourced
via Launchpad·07:45 PM
Description
Dec 23, 2024
Rejected
via NVD·08:43 PM
Apr 27, 2025
Data Sourced
via Ubuntu·12:16 AM
RemedyDescriptionSeverityAffected Software
Nov 4, 2025
Rejected
via NVD·06:16 PM

Frequently Asked Questions

1

What is the severity of CVE-2024-26989?

CVE-2024-26989 has been classified as a vulnerability in the Linux kernel that can lead to translation faults.

2

How do I fix CVE-2024-26989?

To address CVE-2024-26989, upgrade to kernel versions 5.15.157, 6.1.88, 6.6.29, 6.8.8, or 6.9 as provided by the relevant vendor.

3

Which systems are affected by CVE-2024-26989?

CVE-2024-26989 affects arm64 machines running specific versions of the Linux kernel.

4

Can CVE-2024-26989 be exploited without authentication?

Yes, CVE-2024-26989 can be triggered in scenarios involving memory access errors that do not require authentication.

5

Is CVE-2024-26989 a remote or local vulnerability?

CVE-2024-26989 is typically considered a local vulnerability as it affects system-level operations on the kernel.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203