In the Linux kernel, the following vulnerability has been resolved:
arm64: probes: Fix uprobes for big-endian kernels
The arm64 uprobes code is broken for big-endian kernels as it doesn't convert the in-memory instruction encoding (which is always little-endian) into the kernel's native endianness before analyzing and simulating instructions. This may result in a few distinct problems:
* The kernel may may erroneously reject probing an instruction which can safely be probed.
* The kernel may erroneously erroneously permit stepping an instruction out-of-line when that instruction cannot be stepped out-of-line safely.
* The kernel may erroneously simulate instruction incorrectly dur to interpretting the byte-swapped encoding.
The endianness mismatch isn't caught by the compiler or sparse because:
* The arch_uprobe::{insn,ixol} fields are encoded as arrays of u8, so the compiler and sparse have no idea these contain a little-endian 32-bit value. The core uprobes code populates these with a memcpy() which similarly does not handle endianness.
* While the uprobe_opcode_t type is an alias for __le32, both arch_uprobe_analyze_insn() and arch_uprobe_skip_sstep() cast from u8[] to the similarly-named probe_opcode_t, which is an alias for u32. Hence there is no endianness conversion warning.
Fix this by changing the arch_uprobe::{insn,ixol} fields to __le32 and adding the appropriate __le32_to_cpu() conversions prior to consuming the instruction encoding. The core uprobes copies these fields as opaque ranges of bytes, and so is unaffected by this change.
At the same time, remove MAX_UINSN_BYTES and consistently use AARCH64_INSN_SIZE for clarity.
Tested with the following:
| #include <stdio.h> | #include <stdbool.h> | | #define noinline __attribute__((noinline)) | | static noinline void *adrp_self(void) | { | void *addr; | | asm volatile( | " adrp %x0, adrp_self\n" | " add %x0, %x0, :lo12:adrp_self\n" | : "=r" (addr)); | } | | | int main(int argc, char *argv) | { | void *ptr = adrp_self(); | bool equal = (ptr == adrp_self); | | printf("adrp_self => %p\n" | "adrp_self() => %p\n" | "%s\n", | adrp_self, ptr, equal ? "EQUAL" : "NOT EQUAL"); | | return 0; | }
.... where the adrp_self() function was compiled to:
| 00000000004007e0 <adrp_self>: | 4007e0: 90000000 adrp x0, 400000 <__ehdr_start> | 4007e4: 911f8000 add x0, x0, #0x7e0 | 4007e8: d65f03c0 ret
Before this patch, the ADRP is not recognized, and is assumed to be steppable, resulting in corruption of the result:
| # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | EQUAL | # echo 'p /root/adrp-self:0x007e0' > /sys/kernel/tracing/uprobe_events | # echo 1 > /sys/kernel/tracing/events/uprobes/enable | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0xffffffffff7e0 | NOT EQUAL
After this patch, the ADRP is correctly recognized and simulated:
| # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | EQUAL | # | # echo 'p /root/adrp-self:0x007e0' > /sys/kernel/tracing/uprobe_events | # echo 1 > /sys/kernel/tracing/events/uprobes/enable | # ./adrp-self | adrp_self => 0x4007e0 | adrp_self() => 0x4007e0 | EQUAL
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 |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade bpftoolUpgrade kernel-develUpgrade kernel-toolsUpgrade kernelUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-debuginfoUpgrade bpftool-debuginfoUpgrade python-perf-debuginfoUpgrade python-perfUpgrade perfUpgrade kernel-livepatch-5.10.230-223.885Upgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-headersUpgrade kernel-livepatch-5.15.173-118.169Upgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64 | Mar 14, 2025 | Nov 8, 2024 |
| Amazon_linux_2023 | — | Upgrade kernelUpgrade perf-debuginfoUpgrade kernel-modules-extra-commonUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernel-libbpf-develUpgrade kernel-headersUpgrade kernel-develUpgrade python3-perfUpgrade kernel-modules-extraUpgrade kernel-libbpf-staticUpgrade python3-perf-debuginfoUpgrade kernel-livepatch-6.1.115-126.197Upgrade kernel-tools-debuginfoUpgrade kernel-libbpfUpgrade kernel-debuginfoUpgrade kernel-toolsUpgrade bpftoolUpgrade bpftool-debuginfoUpgrade kernel-debuginfo-common-x86_64 | Mar 27, 2025 | Nov 8, 2024 |
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Nov 11, 2024 | Nov 8, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernelUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade kernel-tools-libsUpgrade python3-perf | Mar 18, 2025 | Nov 8, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade bpftoolUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade kernelUpgrade kernel-tools-libs | Feb 11, 2025 | Nov 8, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade python3-perfUpgrade kernel-toolsUpgrade kernelUpgrade bpftoolUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libs | Feb 11, 2025 | Nov 8, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel | Mar 18, 2025 | Nov 8, 2024 |
| Oracle_linux | — | Upgrade kernel-uek | Dec 17, 2024 | Nov 8, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Nov 8, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-5.15.0-1081-azure-fdeUpgrade linux-image-nvidia-tegra-igxUpgrade linux-image-6.11.0-1009-azure-fdeUpgrade linux-image-raspi-nolpaeUpgrade linux-image-gke-5.15Upgrade linux-image-6.8.0-1026-gcpUpgrade linux-image-gkeopUpgrade linux-image-oracleUpgrade linux-image-oem-20.04bUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-lowlatency-64kUpgrade linux-image-5.4.0-1048-iotUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-ibmUpgrade linux-image-azure-lts-24.04Upgrade linux-image-fipsUpgrade linux-image-nvidiaUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1024-nvidia-lowlatencyUpgrade linux-image-6.8.0-1027-awsUpgrade linux-image-ibm-classicUpgrade linux-image-5.15.0-1076-kvmUpgrade linux-image-oem-20.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-genericUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-ibm-lts-20.04Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-5.4.0-1143-gcpUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-virtualUpgrade linux-image-nvidia-tegra-igx-rtUpgrade linux-image-5.15.0-1060-gkeopUpgrade linux-image-6.8.0-2023-raspi-realtimeUpgrade linux-image-6.8.0-1025-azureUpgrade linux-image-6.8.0-1028-raspiUpgrade linux-image-azure-nvidiaUpgrade linux-image-generic-lpaeUpgrade linux-image-gkeop-6.8Upgrade linux-image-6.8.0-1024-nvidia-lowlatency-64kUpgrade linux-image-azure-lts-20.04Upgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-6.11.0-1010-lowlatency-64kUpgrade linux-image-oemUpgrade linux-image-5.4.0-1145-azureUpgrade linux-image-6.8.1-1018-realtimeUpgrade linux-image-6.11.0-1011-oracle-64kUpgrade linux-image-5.15.0-133-genericUpgrade linux-image-aws-lts-22.04Upgrade linux-image-6.11.0-1009-gcpUpgrade linux-image-6.11.0-1005-realtimeUpgrade linux-image-6.8.0-1026-gcp-64kUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-lowlatencyUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-bluefieldUpgrade linux-image-5.4.0-1129-raspiUpgrade linux-image-5.15.0-133-lowlatency-64kUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-nvidia-6.8Upgrade linux-image-oem-22.04Upgrade linux-image-oem-24.04bUpgrade linux-image-5.15.0-1074-ibmUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-6.8.0-1021-gkeUpgrade linux-image-6.8.0-1022-ibmUpgrade linux-image-6.8.0-1014-azure-nvidiaUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-5.4.0-208-generic-lpaeUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-5.4.0-208-lowlatencyUpgrade linux-image-5.15.0-1072-raspiUpgrade linux-image-oem-22.04aUpgrade linux-image-5.15.0-1078-awsUpgrade linux-image-6.8.0-57-generic-64kUpgrade linux-image-5.4.0-1086-ibmUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-azure-lts-22.04Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-nvidia-tegra-rtUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-5.4.0-1058-xilinx-zynqmpUpgrade linux-image-6.11.0-1008-raspiUpgrade linux-image-6.8.0-56-genericUpgrade linux-image-5.15.0-1075-oracleUpgrade linux-image-oracle-64kUpgrade linux-image-5.4.0-1140-awsUpgrade linux-image-5.15.0-134-generic-lpaeUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-5.15.0-1033-nvidia-tegraUpgrade linux-image-oem-22.04cUpgrade linux-image-oem-20.04cUpgrade linux-image-oem-20.04dUpgrade linux-image-awsUpgrade linux-image-6.8.0-1025-awsUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-5.15.0-1080-awsUpgrade linux-image-5.15.0-1075-gkeUpgrade linux-image-5.4.0-1116-fipsUpgrade linux-image-raspi-realtimeUpgrade linux-image-gcp-64kUpgrade linux-image-5.15.0-133-generic-lpaeUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-6.8.0-1025-azure-fdeUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-realtime-hwe-24.04Upgrade linux-image-oem-osp1Upgrade linux-image-5.4.0-1099-bluefieldUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-generic-hwe-18.04Upgrade linux-image-5.15.0-134-generic-64kUpgrade linux-image-5.15.0-1021-nvidia-tegra-igxUpgrade linux-image-nvidia-tegraUpgrade linux-image-6.8.0-1024-nvidia-64kUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-gcpUpgrade linux-image-6.8.0-57-genericUpgrade linux-image-5.15.0-1021-nvidia-tegra-igx-rtUpgrade linux-image-6.8.0-1024-oemUpgrade linux-image-6.8.0-1022-oracleUpgrade linux-image-raspiUpgrade linux-image-6.8.0-56-lowlatencyUpgrade linux-image-5.15.0-1033-nvidia-tegra-rtUpgrade linux-image-raspi2Upgrade linux-image-oem-22.04dUpgrade linux-image-5.15.0-133-generic-64kUpgrade linux-image-aws-lts-20.04Upgrade linux-image-oem-22.04bUpgrade linux-image-5.4.0-1138-oracleUpgrade linux-image-6.8.0-1024-nvidiaUpgrade linux-image-realtimeUpgrade linux-image-intelUpgrade linux-image-aws-lts-24.04Upgrade linux-image-6.8.0-1022-oracle-64kUpgrade linux-image-6.11.0-1009-azureUpgrade linux-image-5.15.0-1072-nvidia-lowlatencyUpgrade linux-image-5.15.0-1070-ibmUpgrade linux-image-5.15.0-134-genericUpgrade linux-image-azure-cvmUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-gkeUpgrade linux-image-6.11.0-18-generic-64kUpgrade linux-image-6.8.0-1008-gkeopUpgrade linux-image-oem-24.04aUpgrade linux-image-6.11.0-18-genericUpgrade linux-image-5.15.0-133-lowlatencyUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-5.4.0-208-genericUpgrade linux-image-oem-24.04Upgrade linux-image-6.11.0-1011-oracleUpgrade linux-image-5.4.0-1142-awsUpgrade linux-image-5.15.0-1073-intel-iotgUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-generic-64kUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-6.11.0-1009-awsUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-6.8.0-56-generic-64kUpgrade linux-image-6.11.0-1010-lowlatencyUpgrade linux-image-5.15.0-1072-nvidiaUpgrade linux-image-gkeop-5.15Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-5.15.0-1044-xilinx-zynqmpUpgrade linux-image-nvidia-64kUpgrade linux-image-5.4.0-1127-kvmUpgrade linux-image-5.15.0-1077-gcpUpgrade linux-image-azureUpgrade linux-image-intel-iotgUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-kvmUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-5.15.0-1081-azureUpgrade linux-image-6.8.0-56-lowlatency-64kUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-6.11.0-1015-oemUpgrade linux-image-generic-hwe-20.04 | Feb 20, 2025 | Nov 8, 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