Vulnerability · Published Oct 21, 2024 · Assigned by Linux

CVE-2024-47702bpf: Fail verification for sign-extension of packet data/data_end/data_meta

High 7.8

In plain English

A high-severity security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.2% (higher than 12% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.

Severity (CVSS 3.1)7.8High
Exploit odds (30 days)0.2%top 88.3% of all CVEs
Exploited in the wildNo reportsCISA SSVC: none
Attack toolingNoneno public tooling known

Official description

In the Linux kernel, the following vulnerability has been resolved: bpf: Fail verification for sign-extension of packet data/data_end/data_meta syzbot reported a kernel crash due to commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses"). The reason is due to sign-extension of 32-bit load for packet data/data_end/data_meta uapi field. The original code looks like: r2 = *(s32 *)(r1 + 76) /* load __sk_buff->data */ r3 = *(u32 *)(r1 + 80) /* load __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ... Note that __sk_buff->data load has 32-bit sign extension. After verification and convert_ctx_accesses(), the final asm code looks like: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ... Note that 'r2 = (s32)r2' may make the kernel __sk_buff->data address invalid which may cause runtime failure. Currently, in C code, typically we have void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ... and it will generate r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 If we allow sign-extension, void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ... the generated code looks like r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 and this will cause verification failure since "r2 <<= 32" is not allowed as "r2" is a packet pointer. To fix this issue for case r2 = *(s32 *)(r1 + 76) /* load __sk_buff->data */ this patch added additional checking in is_valid_access() callback function for packet data/data_end/data_meta access. If those accesses are with sign-extenstion, the verification will fail. [1] https://lore.kernel.org/bpf/000000000000c90eee061d236d37@google.com/

Affected packages & fixed versions

EcosystemPackageFixed inAdvisory
Debian:13linux6.11.2-1DEBIAN-CVE-2024-47702
Debian:14linux6.11.2-1DEBIAN-CVE-2024-47702
Ubuntu:24.04:LTSlinux6.8.0-54.56USN-7301-1
Ubuntu:24.04:LTSlinux6.8.0-54.56UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-allwinner-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-aws6.8.0-1023.25UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-aws6.8.0-1023.25USN-7311-1
Ubuntu:22.04:LTSlinux-aws-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-aws-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-aws-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1023.25~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1023.25~22.04.1USN-7311-1
Ubuntu:24.04:LTSlinux-azure6.8.0-1025.30UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-azure6.8.0-1025.30USN-7384-1
Ubuntu:22.04:LTSlinux-azure-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-azure-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-azure-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1025.30~22.04.1USN-7384-2
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1025.30~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-azure-fde-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-azure-fde-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-gcp6.8.0-1024.26USN-7304-1
Ubuntu:24.04:LTSlinux-gcp6.8.0-1024.26UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-gcp-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-gcp-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-gcp-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1024.26~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1024.26~22.04.1USN-7303-3
Ubuntu:24.04:LTSlinux-gke6.8.0-1019.23UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-gke6.8.0-1019.23USN-7304-1
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1006.8USN-7304-1
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1006.8UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-hwe-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-hwe-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-hwe-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-57.59~22.04.1USN-7403-1
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-57.59~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-ibm6.8.0-1022.22UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-ibm6.8.0-1022.22USN-7385-1
Ubuntu:22.04:LTSlinux-intel-iot-realtimeno fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-54.56.1USN-7301-1
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-54.56.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-lowlatency-hwe-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-54.56.1~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-54.56.1~22.04.1USN-7301-1
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1022.25USN-7303-1
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1022.25UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-nvidia-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-nvidia-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1022.25~22.04.2UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1022.25~22.04.2USN-7303-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1022.25.2USN-7303-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1022.25.2UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oem-5.17no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oem-6.0no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oem-6.1no fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-oem-6.116.11.0-1015.15USN-7310-1
Ubuntu:24.04:LTSlinux-oem-6.116.11.0-1015.15UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oem-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1024.24USN-7386-1
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1024.24UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-oracle6.8.0-1020.21USN-7303-2
Ubuntu:24.04:LTSlinux-oracle6.8.0-1020.21UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oracle-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1020.21~22.04.1USN-7303-2
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1020.21~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-raspi6.8.0-1019.23UBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-raspi6.8.0-1019.23USN-7303-3
Ubuntu:22.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2024-47702
Ubuntu:24.04:LTSlinux-riscv6.8.0-53.55.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-riscv-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-riscv-6.5no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-riscv-6.86.8.0-53.55.1~22.04.1UBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-starfive-5.19no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-starfive-6.2no fix listedUBUNTU-CVE-2024-47702
Ubuntu:22.04:LTSlinux-starfive-6.5no fix listedUBUNTU-CVE-2024-47702

Affected products (as reported)

VendorProductVersions
Linux Linux 1f1e864b65554e33fe74e3377e58b12f4302f2eb – before 4b48228eebce2ab1b01e3133da822164472b7e461f1e864b65554e33fe74e3377e58b12f4302f2eb – before f1620c93a1ec950d87ef327a565d3907736d33401f1e864b65554e33fe74e3377e58b12f4302f2eb – before f09757fe97a225ae505886eac572e4cbfba965371f1e864b65554e33fe74e3377e58b12f4302f2eb – before 92de36080c93296ef9005690705cba260b9bd68a
Linux Linux 6.6

References