{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-53094",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-53094"
  ],
  "published": "2024-11-21T18:16:59Z",
  "summary": "RDMA/siw: Add sendpage_ok() check to disable MSG_SPLICE_PAGES",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nRDMA/siw: Add sendpage_ok() check to disable MSG_SPLICE_PAGES\n\nWhile running ISER over SIW, the initiator machine encounters a warning\nfrom skb_splice_from_iter() indicating that a slab page is being used in\nsend_page. To address this, it is better to add a sendpage_ok() check\nwithin the driver itself, and if it returns 0, then MSG_SPLICE_PAGES flag\nshould be disabled before entering the network stack.\n\nA similar issue has been discussed for NVMe in this thread:\nhttps://lore.kernel.org/all/20240530142417.146696-1-ofir.gal@volumez.com/\n\n  WARNING: CPU: 0 PID: 5342 at net/core/skbuff.c:7140 skb_splice_from_iter+0x173/0x320\n  Call Trace:\n   tcp_sendmsg_locked+0x368/0xe40\n   siw_tx_hdt+0x695/0xa40 [siw]\n   siw_qp_sq_process+0x102/0xb00 [siw]\n   siw_sq_resume+0x39/0x110 [siw]\n   siw_run_sq+0x74/0x160 [siw]\n   kthread+0xd2/0x100\n   ret_from_fork+0x34/0x40\n   ret_from_fork_asm+0x1a/0x30",
  "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.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": null,
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2024-53094"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/3406bfc813a9bbd9c3055795e985f527b7852e8c"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/bb5738957d92c8603a90c9664d34236641c221b2"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/4e1e3dd88a4cedd5ccc1a3fc3d71e03b70a7a791"
    }
  ],
  "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 - siw is an RDMA-over-TCP transport, and the vulnerable transmit path is driven by remote input \u2014 `siw_init_rresp()` takes the read length, local address and stag directly from a peer's RDMA Read Request off the TCP stream, and any length \u2265 PAGE_SIZE selects the `MSG_SPLICE_PAGES` zero-copy path. The reported failure also occurs in ordinary remote-peer-driven iSER-over-siw traffic.\nAC:L - No race or unpredictable state is involved; slab-backed kernel-ULP buffers are the normal case (the reporter hit it in routine ISER-over-SIW operation), and the peer simply issues a read/transfer of at least PAGE_SIZE against an advertised region. `zcopy_tx` is hardcoded true and READ_RESPONSE WQEs are always unsignalled, so the zero-copy path is taken deterministically.\nPR:N - iWARP/MPA has no in-kernel authentication, and the RX path processes an inbound RDMA Read Request and queues the READ_RESPONSE with `perms = 0` \u2014 no access-rights or credential check gates the vulnerable transmit path. A peer at the far end of the RDMA connection holds no privileges on the victim host.\nUI:N - Triggering requires only normal or attacker-generated RDMA traffic on an established connection; no action by a local user or administrator on the victim system is needed.\nS:U - The fault, the corrupted page references and the resulting crash all occur within the victim kernel's own security authority; no VM, IOMMU or sandbox boundary is crossed.\nC:H - Handing non-`sendpage_ok()` pages to the network stack is exactly the condition `sendpage_ok()` exists to prevent \u2014 TCP retains references to slab pages that the allocator may recycle, so retransmitted segments can leak recycled kernel slab contents to the remote peer, and the resulting refcount corruption is a memory-corruption class defect leverageable for disclosure.\nI:H - `get_page()`/`put_page()` on slab pages corrupts the page refcount and can release a page that is still in use (the \"delayed Oops\" documented in include/linux/net.h), a use-after-free-class primitive; data transmitted from buffers the ULP has already freed or reused also corrupts on-wire data and MPA CRCs.\nA:H - The bad page trips `WARN_ON_ONCE()` in `skb_splice_from_iter()`, which is a kernel panic on any system with `panic_on_warn=1`, and returns `-EIO`, which aborts the FPDU, drives the QP to error state and tears down the RDMA storage/NFS session \u2014 repeatably, at the remote peer's discretion."
    }
  }
}
