In the Linux kernel, the following vulnerability has been resolved:
arm64: entry: fix ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD
Currently the ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD workaround isn't quite right, as it is supposed to be applied after the last explicit memory access, but is immediately followed by an LDR.
The ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD workaround is used to handle Cortex-A520 erratum 2966298 and Cortex-A510 erratum 3117295, which are described in:
* https://developer.arm.com/documentation/SDEN2444153/0600/?lang=en * https://developer.arm.com/documentation/SDEN1873361/1600/?lang=en
In both cases the workaround is described as:
| If pagetable isolation is disabled, the context switch logic in the | kernel can be updated to execute the following sequence on affected | cores before exiting to EL0, and after all explicit memory accesses: | | 1. A non-shareable TLBI to any context and/or address, including | unused contexts or addresses, such as a `TLBI VALE1 Xzr`. | | 2. A DSB NSH to guarantee completion of the TLBI.
The important part being that the TLBI+DSB must be placed "after all explicit memory accesses".
Unfortunately, as-implemented, the TLBI+DSB is immediately followed by an LDR, as we have:
| alternative_if ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD | tlbi vale1, xzr | dsb nsh | alternative_else_nop_endif | alternative_if_not ARM64_UNMAP_KERNEL_AT_EL0 | ldr lr, [sp, #S_LR] | add sp, sp, #PT_REGS_SIZE // restore sp | eret | alternative_else_nop_endif | | [ ... KPTI exception return path ... ]
This patch fixes this by reworking the logic to place the TLBI+DSB immediately before the ERET, after all explicit memory accesses.
The ERET is currently in a separate alternative block, and alternatives cannot be nested. To account for this, the alternative block for ARM64_UNMAP_KERNEL_AT_EL0 is replaced with a single alternative branch to skip the KPTI logic, with the new shape of the logic being:
| alternative_insn "b .L_skip_tramp_exit_\@", nop, ARM64_UNMAP_KERNEL_AT_EL0 | [ ... KPTI exception return path ... ] | .L_skip_tramp_exit_\@: | | ldr lr, [sp, #S_LR] | add sp, sp, #PT_REGS_SIZE // restore sp | | alternative_if ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD | tlbi vale1, xzr | dsb nsh | alternative_else_nop_endif | eret
The new structure means that the workaround is only applied when KPTI is not in use; this is fine as noted in the documented implications of the erratum:
| Pagetable isolation between EL0 and higher level ELs prevents the | issue from occurring.
... and as per the workaround description quoted above, the workaround is only necessary "If pagetable isolation is disabled".
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | May 15, 2025 | Apr 2, 2024 |
| Redhat_linux | — | Upgrade kernelNo solution existsUpgrade kernel-rt | Dec 5, 2024 | Apr 2, 2024 |
| Suse | — | Upgrade kernel-kvmsmallUpgrade dlm-kmp-64kbUpgrade dtb-caviumUpgrade kernel-obs-buildUpgrade kernel-64kb-optionalUpgrade kernel-azureUpgrade kernel-source-rtUpgrade dtb-exynosUpgrade gfs2-kmp-64kbUpgrade gfs2-kmp-defaultUpgrade reiserfs-kmp-rtUpgrade kernel-default-vdsoUpgrade ocfs2-kmp-64kbUpgrade dtb-alteraUpgrade kernel-debug-develUpgrade kernel-azure-vdsoUpgrade dtb-hisiliconUpgrade dtb-renesasUpgrade kernel-source-vanillaUpgrade ocfs2-kmp-defaultUpgrade kernel-rt-livepatch-develUpgrade kernel-64kb-livepatch-develUpgrade kernel-azure-extraUpgrade kernel-debugUpgrade kernel-default-livepatch-develUpgrade cluster-md-kmp-azureUpgrade kernel-rt-vdsoUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-kvmsmall-develUpgrade kernel-source-azureUpgrade dtb-appleUpgrade reiserfs-kmp-64kbUpgrade kernel-azure-optionalUpgrade dtb-marvellUpgrade dtb-amazonUpgrade dtb-allwinnerUpgrade kernel-sourceUpgrade kernel-syms-rtUpgrade kernel-rt_debugUpgrade kselftests-kmp-azureUpgrade dtb-freescaleUpgrade kernel-devel-azureUpgrade dtb-lgUpgrade gfs2-kmp-azureUpgrade gfs2-kmp-rtUpgrade dtb-socionextUpgrade kernel-rt_debug-develUpgrade kernel-kvmsmall-vdsoUpgrade dtb-amdUpgrade kernel-default-livepatchUpgrade dtb-broadcomUpgrade kernel-64kbUpgrade kernel-rt-optionalUpgrade kselftests-kmp-64kbUpgrade reiserfs-kmp-defaultUpgrade kernel-debug-vdsoUpgrade kernel-default-develUpgrade kernel-docs-htmlUpgrade kernel-zfcpdumpUpgrade kernel-syms-azureUpgrade dtb-amlogicUpgrade reiserfs-kmp-azureUpgrade kernel-rt-extraUpgrade kernel-docsUpgrade kernel-rtUpgrade kernel-64kb-develUpgrade dtb-rockchipUpgrade kernel-default-baseUpgrade dtb-armUpgrade cluster-md-kmp-rtUpgrade kernel-default-base-rebuildUpgrade dtb-nvidiaUpgrade dlm-kmp-rtUpgrade dlm-kmp-azureUpgrade ocfs2-kmp-rtUpgrade kernel-azure-develUpgrade dtb-xilinxUpgrade kernel-default-extraUpgrade kernel-rt-develUpgrade kernel-obs-qaUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-livepatch-develUpgrade cluster-md-kmp-64kbUpgrade kernel-defaultUpgrade dtb-apmUpgrade kernel-devel-rtUpgrade kernel-develUpgrade kselftests-kmp-rtUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-64kb-extraUpgrade kernel-default-optionalUpgrade kernel-macrosUpgrade dtb-sprdUpgrade dtb-qcomUpgrade dtb-mediatekUpgrade kselftests-kmp-defaultUpgrade kernel-rt-livepatchUpgrade cluster-md-kmp-defaultUpgrade dlm-kmp-defaultUpgrade kernel-rt_debug-vdsoUpgrade ocfs2-kmp-azureUpgrade kernel-syms | Apr 18, 2024 | Apr 2, 2024 |
| Ubuntu | — | Upgrade linux-image-raspi-nolpaeUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-awsUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-6.5.0-41-generic-64kUpgrade linux-image-virtualUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-6.5.0-1024-oracle-64kUpgrade linux-image-nvidia-64k-6.5Upgrade linux-image-6.5.0-1017-laptopUpgrade linux-image-generic-lpaeUpgrade linux-image-6.5.0-1021-nvidia-64kUpgrade linux-image-6.5.0-1022-azure-fdeUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.5.0-1015-starfiveUpgrade linux-image-lowlatencyUpgrade linux-image-6.5.0-41-lowlatencyUpgrade linux-image-oem-22.04aUpgrade linux-image-6.5.0-1021-awsUpgrade linux-image-genericUpgrade linux-image-6.5.0-41-lowlatency-64kUpgrade linux-image-oracleUpgrade linux-image-oem-22.04Upgrade linux-image-gcpUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-6.5.0-1024-oracleUpgrade linux-image-6.5.0-1021-nvidiaUpgrade linux-image-generic-64kUpgrade linux-image-azure-fdeUpgrade linux-image-raspiUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-nvidia-6.5Upgrade linux-image-6.5.0-41-genericUpgrade linux-image-oem-22.04cUpgrade linux-image-6.5.0-1022-gcpUpgrade linux-image-azureUpgrade linux-image-starfiveUpgrade linux-image-6.5.0-1022-azureUpgrade linux-image-laptop-23.10Upgrade linux-image-6.5.0-1024-oemUpgrade linux-image-kvmUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-6.5.0-1018-raspiUpgrade linux-image-oem-22.04bUpgrade linux-image-oracle-64kUpgrade linux-image-oem-22.04d | May 17, 2024 | Apr 2, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub