---
id: CVE-2024-47702
title: |-
  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 ct…
summary: |-
  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 ct…
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
vendor: linux
product: linux_kernel
affected:
  - 'linux_kernel >= 6.6, < 6.10.13'
  - 'linux_kernel >= 6.11, < 6.11.2'
patched:
  - linux_kernel 6.11.2
published: '2024-10-21'
updated: '2026-10-03'
sourceUpdated: '2026-10-03T11:17:31.513'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2024-47702'
references:
  - url: 'https://git.kernel.org/stable/c/4b48228eebce2ab1b01e3133da822164472b7e46'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/92de36080c93296ef9005690705cba260b9bd68a'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/f09757fe97a225ae505886eac572e4cbfba96537'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/f1620c93a1ec950d87ef327a565d3907736d3340'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
tags:
  - nvd
  - cve.org
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2024-10-21T13:04:24.861686Z'
epss: 0.00213
epssPercentile: 0.10532
ingestedAt: '2026-10-03T11:43:42.103Z'
---

## Overview

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

- `linux_kernel >= 6.6, < 6.10.13`
- `linux_kernel >= 6.11, < 6.11.2`

## Remediation

Upgrade past the affected range:

- `linux_kernel 6.11.2`
