{
  "cveId": "CVE-2021-47608",
  "url": "https://patchblox.com/security/cve/CVE-2021-47608",
  "summary": "CVE-2021-47608 is fixed in linux on 1 platform, first by DEBIAN-CVE-2021-47608, released June 19, 2024. It is not reported as exploited. Patch Radar priority: Routine.",
  "title": "linux: In the Linux kernel, the following vulnerability has been resolved:  bpf: Fix kernel address leakage in atomic fetch...",
  "description": "In the Linux kernel, the following vulnerability has been resolved:  bpf: Fix kernel address leakage in atomic fetch  The change in commit 37086bfdc737 (\u0022bpf: Propagate stack bounds to registers in atomics w/ BPF_FETCH\u0022) around check_mem_access() handling is buggy since this would allow for unprivileged users to leak kernel pointers. For example, an atomic fetch/and with -1 on a stack destination which holds a spilled pointer will migrate the spilled register type into a scalar, which can then be exported out of the program (since scalar != pointer) by dumping it into a map value.  The original implementation of XADD was preventing this situation by using a double call to check_mem_access() one with BPF_READ and a subsequent one with BPF_WRITE, in both cases passing -1 as a placeholder value instead of register as per XADD semantics since it didn\u0027t contain a value fetch. The BPF_READ also included a check in check_stack_read_fixed_off() which rejects the program if the stack slot is of __is_pointer_value() if dst_regno \u003C 0. The latter is to distinguish whether we\u0027re dealing with a regular stack spill/ fill or some arithmetical operation which is disallowed on non-scalars, see also 6e7e63cbb023 (\u0022bpf: Forbid XADD on spilled pointers for unprivileged users\u0022) for more context on check_mem_access() and its handling of placeholder value -1.  One minimally intrusive option to fix the leak is for the BPF_FETCH case to initially check the BPF_READ case via check_mem_access() with -1 as register, followed by the actual load case with non-negative load_reg to propagate stack bounds to registers.",
  "published": "2024-06-19T15:15:55Z",
  "severity": "medium",
  "cvss": 5.5,
  "cvssVector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
  "epss": 0.00211,
  "epssPercentile": 0.11372,
  "priority": "Routine",
  "priorityTier": 4,
  "exploited": false,
  "vendorExploited": false,
  "disclosed": false,
  "fixes": [
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 12.15 (bookworm)",
      "fixedVersion": "5.15.15-1",
      "fix": "DEBIAN-CVE-2021-47608",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2021-47608",
      "released": "2024-06-19T15:15:55Z"
    },
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 13.5 (trixie)",
      "fixedVersion": "5.15.15-1",
      "fix": "DEBIAN-CVE-2021-47608",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2021-47608",
      "released": "2024-06-19T15:15:55Z"
    },
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 14",
      "fixedVersion": "5.15.15-1",
      "fix": "DEBIAN-CVE-2021-47608",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2021-47608",
      "released": "2024-06-19T15:15:55Z"
    }
  ],
  "noFixYet": [],
  "dataAsOf": "2026-11-08T19:12:23Z",
  "attribution": {
    "text": "Data: Patchblox Patch Radar",
    "url": "https://patchblox.com/security/patch-radar",
    "terms": "https://patchblox.com/security/patch-radar/use-the-data"
  }
}