CVE-2025-38730 (GCVE-0-2025-38730)

Vulnerability from cvelistv5 – Published: 2025-09-04 15:33 – Updated: 2026-08-05 12:04
VLAI
Title
io_uring/net: commit partial buffers on retry
Summary
In the Linux kernel, the following vulnerability has been resolved: io_uring/net: commit partial buffers on retry Ring provided buffers are potentially only valid within the single execution context in which they were acquired. io_uring deals with this and invalidates them on retry. But on the networking side, if MSG_WAITALL is set, or if the socket is of the streaming type and too little was processed, then it will hang on to the buffer rather than recycle or commit it. This is problematic for two reasons: 1) If someone unregisters the provided buffer ring before a later retry, then the req->buf_list will no longer be valid. 2) If multiple sockers are using the same buffer group, then multiple receives can consume the same memory. This can cause data corruption in the application, as either receive could land in the same userspace buffer. Fix this by disallowing partial retries from pinning a provided buffer across multiple executions, if ring provided buffers are used.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: c56e022c0a27142b7b59ae6bdf45f86bf4b298a1 , < 3b53dc1c641f2884d4750fc25aaf6c36b90db606 (git)
Affected: c56e022c0a27142b7b59ae6bdf45f86bf4b298a1 , < fe9da1812f8697a38f7e30991d568ec199e16059 (git)
Affected: c56e022c0a27142b7b59ae6bdf45f86bf4b298a1 , < 21a4ddb0f5e933f372808c10b9ac704505751bb1 (git)
Affected: c56e022c0a27142b7b59ae6bdf45f86bf4b298a1 , < 2eb7937b5fc7fcd90eab7bebb0181214b61b9283 (git)
Affected: c56e022c0a27142b7b59ae6bdf45f86bf4b298a1 , < 41b70df5b38bc80967d2e0ed55cc3c3896bba781 (git)
Create a notification for this product.
Linux Linux Affected: 6.4
Unaffected: 0 , < 6.4 (semver)
Unaffected: 6.6.103 , ≤ 6.6.* (semver)
Unaffected: 6.12.44 , ≤ 6.12.* (semver)
Unaffected: 6.15.11 , ≤ 6.15.* (semver)
Unaffected: 6.16.2 , ≤ 6.16.* (semver)
Unaffected: 6.17 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "io_uring/net.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "3b53dc1c641f2884d4750fc25aaf6c36b90db606",
              "status": "affected",
              "version": "c56e022c0a27142b7b59ae6bdf45f86bf4b298a1",
              "versionType": "git"
            },
            {
              "lessThan": "fe9da1812f8697a38f7e30991d568ec199e16059",
              "status": "affected",
              "version": "c56e022c0a27142b7b59ae6bdf45f86bf4b298a1",
              "versionType": "git"
            },
            {
              "lessThan": "21a4ddb0f5e933f372808c10b9ac704505751bb1",
              "status": "affected",
              "version": "c56e022c0a27142b7b59ae6bdf45f86bf4b298a1",
              "versionType": "git"
            },
            {
              "lessThan": "2eb7937b5fc7fcd90eab7bebb0181214b61b9283",
              "status": "affected",
              "version": "c56e022c0a27142b7b59ae6bdf45f86bf4b298a1",
              "versionType": "git"
            },
            {
              "lessThan": "41b70df5b38bc80967d2e0ed55cc3c3896bba781",
              "status": "affected",
              "version": "c56e022c0a27142b7b59ae6bdf45f86bf4b298a1",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "io_uring/net.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.4"
            },
            {
              "lessThan": "6.4",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.103",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.44",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.16.*",
              "status": "unaffected",
              "version": "6.16.2",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.17",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.103",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.44",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15.11",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16.2",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.17",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nio_uring/net: commit partial buffers on retry\n\nRing provided buffers are potentially only valid within the single\nexecution context in which they were acquired. io_uring deals with this\nand invalidates them on retry. But on the networking side, if\nMSG_WAITALL is set, or if the socket is of the streaming type and too\nlittle was processed, then it will hang on to the buffer rather than\nrecycle or commit it. This is problematic for two reasons:\n\n1) If someone unregisters the provided buffer ring before a later retry,\n   then the req-\u003ebuf_list will no longer be valid.\n\n2) If multiple sockers are using the same buffer group, then multiple\n   receives can consume the same memory. This can cause data corruption\n   in the application, as either receive could land in the same\n   userspace buffer.\n\nFix this by disallowing partial retries from pinning a provided buffer\nacross multiple executions, if ring provided buffers are used."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerability is reached through the io_uring submission/registration syscall interface (`io_uring_setup`, `IORING_REGISTER_PBUF_RING`/`IORING_UNREGISTER_PBUF_RING`, SQE submission), which requires local access to the machine. Per kernel scoring guidance io_uring is a local attack surface, even though the socket data that triggers the partial-transfer state can come from a peer.\nAC:L - The attacker controls every element of the sequence \u2014 it owns both ends of the socket (socketpair or loopback TCP), so it decides exactly when a short `MSG_WAITALL` read occurs and when the remainder is delivered, and it issues the `IORING_UNREGISTER_PBUF_RING` in between. This is deterministic ordering rather than a race, and heap grooming of the freed `io_buffer_list` slot is standard and attacker-influenced.\nPR:L - Only an ordinary unprivileged local user account is needed; creating an io_uring instance, registering/unregistering a provided buffer ring, and creating sockets require no capabilities and no user-namespace tricks. No `CAP_*` check exists anywhere on the path.\nUI:N - The attacking process performs all steps itself within its own io_uring instance and sockets. No victim action or interaction is required.\nS:U - The corruption is of kernel heap memory belonging to the same kernel security authority, giving a classic local privilege escalation. No VM, IOMMU, or other security-authority boundary is crossed.\nC:H - The stale `req-\u003ebuf_list` is dereferenced after `kfree()`, and in the `IOBL_INC` path `bl-\u003ebuf_ring`, `bl-\u003ehead` and `bl-\u003emask` are all read from the reclaimed object and used to dereference an attacker-chosen address, yielding an arbitrary kernel read primitive. Additionally the buffer-aliasing half of the bug leaks one socket\u0027s received data into a buffer owned by another connection.\nI:H - `io_kbuf_commit()` writes `bl-\u003ehead += nr` into freed memory, and `io_kbuf_inc_commit()` performs `buf-\u003elen -= this_len; buf-\u003eaddr += this_len` through a fully attacker-controlled pointer, giving an arbitrary read-modify-write that is readily leveraged into control-flow hijack and root escalation. The bug also silently corrupts application data across sockets sharing a buffer group.\nA:H - Using a freed `struct io_buffer_list` and dereferencing its stale `buf_ring` pointer reliably produces an oops/panic (KASAN use-after-free, wild pointer write), and the attacker can repeat it at will to bring the system down."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:04:20.617Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/3b53dc1c641f2884d4750fc25aaf6c36b90db606"
        },
        {
          "url": "https://git.kernel.org/stable/c/fe9da1812f8697a38f7e30991d568ec199e16059"
        },
        {
          "url": "https://git.kernel.org/stable/c/21a4ddb0f5e933f372808c10b9ac704505751bb1"
        },
        {
          "url": "https://git.kernel.org/stable/c/2eb7937b5fc7fcd90eab7bebb0181214b61b9283"
        },
        {
          "url": "https://git.kernel.org/stable/c/41b70df5b38bc80967d2e0ed55cc3c3896bba781"
        }
      ],
      "title": "io_uring/net: commit partial buffers on retry",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38730",
    "datePublished": "2025-09-04T15:33:27.691Z",
    "dateReserved": "2025-04-16T04:51:24.033Z",
    "dateUpdated": "2026-08-05T12:04:20.617Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-38730",
      "date": "2026-08-05",
      "epss": "0.00161",
      "percentile": "0.05718"
    },
    "microsoft_vex": {
      "current_release_date": "2025-09-06T01:05:44.000Z",
      "cve": "CVE-2025-38730",
      "id": "msrc_CVE-2025-38730",
      "initial_release_date": "2025-09-02T00:00:00.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "io_uring/net: commit partial buffers on retry",
      "url": "https://msrc.microsoft.com/csaf/vex/2025/msrc_cve-2025-38730.json",
      "version": "1"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-38730\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-09-04T16:15:43.167\",\"lastModified\":\"2026-07-30T06:23:38.030\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nio_uring/net: commit partial buffers on retry\\n\\nRing provided buffers are potentially only valid within the single\\nexecution context in which they were acquired. io_uring deals with this\\nand invalidates them on retry. But on the networking side, if\\nMSG_WAITALL is set, or if the socket is of the streaming type and too\\nlittle was processed, then it will hang on to the buffer rather than\\nrecycle or commit it. This is problematic for two reasons:\\n\\n1) If someone unregisters the provided buffer ring before a later retry,\\n   then the req-\u003ebuf_list will no longer be valid.\\n\\n2) If multiple sockers are using the same buffer group, then multiple\\n   receives can consume the same memory. This can cause data corruption\\n   in the application, as either receive could land in the same\\n   userspace buffer.\\n\\nFix this by disallowing partial retries from pinning a provided buffer\\nacross multiple executions, if ring provided buffers are used.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"io_uring/net.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"c56e022c0a27142b7b59ae6bdf45f86bf4b298a1\",\"lessThan\":\"3b53dc1c641f2884d4750fc25aaf6c36b90db606\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"c56e022c0a27142b7b59ae6bdf45f86bf4b298a1\",\"lessThan\":\"fe9da1812f8697a38f7e30991d568ec199e16059\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"c56e022c0a27142b7b59ae6bdf45f86bf4b298a1\",\"lessThan\":\"21a4ddb0f5e933f372808c10b9ac704505751bb1\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"c56e022c0a27142b7b59ae6bdf45f86bf4b298a1\",\"lessThan\":\"2eb7937b5fc7fcd90eab7bebb0181214b61b9283\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"c56e022c0a27142b7b59ae6bdf45f86bf4b298a1\",\"lessThan\":\"41b70df5b38bc80967d2e0ed55cc3c3896bba781\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"io_uring/net.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.4\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.4\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.103\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.44\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.15.11\",\"lessThanOrEqual\":\"6.15.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.16.2\",\"lessThanOrEqual\":\"6.16.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.17\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9},{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-787\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.4\",\"versionEndExcluding\":\"6.6.103\",\"matchCriteriaId\":\"F76E2E5C-65FA-4B99-BD18-DDA394CA195B\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.7\",\"versionEndExcluding\":\"6.12.44\",\"matchCriteriaId\":\"12351F24-1133-4775-960C-F2B47E81298B\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.13\",\"versionEndExcluding\":\"6.15.11\",\"matchCriteriaId\":\"BC242347-F722-43AE-B910-BE0B22386977\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.16\",\"versionEndExcluding\":\"6.16.2\",\"matchCriteriaId\":\"BD7C087D-2415-4521-B624-30003352F899\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.17:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"327D22EF-390B-454C-BD31-2ED23C998A1C\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/21a4ddb0f5e933f372808c10b9ac704505751bb1\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/2eb7937b5fc7fcd90eab7bebb0181214b61b9283\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/3b53dc1c641f2884d4750fc25aaf6c36b90db606\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/41b70df5b38bc80967d2e0ed55cc3c3896bba781\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/fe9da1812f8697a38f7e30991d568ec199e16059\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-07-30T09:02:49+00:00",
      "cve": "CVE-2025-38730",
      "id": "CVE-2025-38730",
      "initial_release_date": "2025-09-04T00:00:00+00:00",
      "product_status:fixed": "1503",
      "product_status:known_affected": "22",
      "product_status:known_not_affected": "90",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Linux kernel: Data corruption and system instability due to improper io_uring/net buffer handling",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-38730.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…