{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-53206",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-53206"
  ],
  "published": "2024-12-27T13:53:01Z",
  "summary": "tcp: Fix use-after-free of nreq in reqsk_timer_handler().",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\ntcp: Fix use-after-free of nreq in reqsk_timer_handler().\n\nThe cited commit replaced inet_csk_reqsk_queue_drop_and_put() with\n__inet_csk_reqsk_queue_drop() and reqsk_put() in reqsk_timer_handler().\n\nThen, oreq should be passed to reqsk_put() instead of req; otherwise\nuse-after-free of nreq could happen when reqsk is migrated but the\nretry attempt failed (e.g. due to timeout).\n\nLet's pass oreq to reqsk_put().",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.6.62-1+rpt1"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.6.62+rpt-rpi-2712",
            "binary_version": "1:6.6.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.62+rpt-rpi-v6",
            "binary_version": "1:6.6.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.62+rpt-rpi-v7",
            "binary_version": "1:6.6.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.62+rpt-rpi-v7l",
            "binary_version": "1:6.6.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.62+rpt-rpi-v8",
            "binary_version": "1:6.6.62-1+rpt1"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.6.62-1+rpt1": {
            "linux_commit": "dd2394360860d15146c96635796a75b05bb32b61",
            "upstream_version": "6.6.62",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.64"
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2024-53206"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/2dcc86fefe09ac853158afd96b60d544af115dc5"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/9a3c1ad93e6fba67b3a637cfa95a57a6685e4908"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/65ed89cad1f57034c256b016e89e8c0a4ec7c65b"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d0eb14cb8c08b00c36a3d5dc57a6f428b301f721"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/6d845028609a4af0ad66f499ee0bd5789122b067"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/c31e72d021db2714df03df6c42855a1db592716c"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T11:52:36Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 9.8,
      "cvss_v3_severity": "Critical",
      "scenario": "AV:N - The vulnerable request sock and its timer are created purely by inbound TCP SYN packets to a listening port, and the failure branch is driven by the remote peer withholding or racing the final ACK. This is core TCP/IP receive-path code reachable by any remote client, including internet-facing servers.\nAC:L - The attacker controls both the object supply (SYN flood populates the SYN queue and the request_sock slab) and the branch selection (never ACK to force `expire`, or send the final ACK concurrently to lose the `own_req` race), giving repeatable success. Listener migration is a routine, recurring event on exactly the SO_REUSEPORT rolling-restart/worker-recycle deployments that enable `tcp_migrate_req`, so a persistent attacker hits it without special effort.\nPR:N - No authentication or credentials of any kind are needed \u2014 the attacker only sends SYNs to an open TCP port and declines to complete the handshake. The entire path executes in the pre-connection SYN-queue/timer context.\nUI:N - The whole sequence runs in softirq timer context off attacker-supplied packets, with no action required from any local user or administrator.\nS:U - The corruption is confined to kernel slab memory and kernel socket structures within the same security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The use-after-free lets the attacker reoccupy the freed `request_sock` slot with objects whose contents they control via crafted SYNs, and the resulting premature free of a live reqsk yields reads of `rsk_ops`, `rsk_listener`, and `saved_syn` from attacker-groomed memory, enabling kernel memory disclosure.\nI:H - `reqsk_put()` on freed memory performs a write (refcount decrement) into the slab, which can corrupt the SLUB free pointer or underflow a live request sock's refcount, cascading to an indirect call through `req->rsk_ops->destructor` read from freed memory and a `sock_put()` listener refcount underflow \u2014 a control-flow-hijack-capable primitive.\nA:H - Even without full exploitation, the use-after-free and the resulting premature frees/refcount underflows on hashed request socks and listener sockets reliably produce slab corruption and kernel oops/panic, remotely and repeatably."
    }
  }
}
