CVE-2025-21988 (GCVE-0-2025-21988)

Vulnerability from cvelistv5 – Published: 2025-04-02 12:53 – Updated: 2026-08-05 11:55
VLAI
Title
fs/netfs/read_collect: add to next->prev_donated
Summary
In the Linux kernel, the following vulnerability has been resolved: fs/netfs/read_collect: add to next->prev_donated If multiple subrequests donate data to the same "next" request (depending on the subrequest completion order), each of them would overwrite the `prev_donated` field, causing data corruption and a BUG() crash ("Can't donate prior to front").
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: ee4cdf7ba857a894ad1650d6ab77669cbbfa329e , < 62b9ad7e52d4777f7e775ee1f0ad2452f6041024 (git)
Affected: ee4cdf7ba857a894ad1650d6ab77669cbbfa329e , < e25cec3b76aba47a49138d2162fc809c6cd49c9e (git)
Affected: ee4cdf7ba857a894ad1650d6ab77669cbbfa329e , < e2d46f2ec332533816417b60933954173f602121 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.12
Unaffected: 0 , < 6.12 (semver)
Unaffected: 6.12.20 , ≤ 6.12.* (semver)
Unaffected: 6.13.8 , ≤ 6.13.* (semver)
Unaffected: 6.14 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/netfs/read_collect.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "62b9ad7e52d4777f7e775ee1f0ad2452f6041024",
              "status": "affected",
              "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
              "versionType": "git"
            },
            {
              "lessThan": "e25cec3b76aba47a49138d2162fc809c6cd49c9e",
              "status": "affected",
              "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
              "versionType": "git"
            },
            {
              "lessThan": "e2d46f2ec332533816417b60933954173f602121",
              "status": "affected",
              "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/netfs/read_collect.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.12"
            },
            {
              "lessThan": "6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.20",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.13.*",
              "status": "unaffected",
              "version": "6.13.8",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.14",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.20",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.8",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nfs/netfs/read_collect: add to next-\u003eprev_donated\n\nIf multiple subrequests donate data to the same \"next\" request\n(depending on the subrequest completion order), each of them would\noverwrite the `prev_donated` field, causing data corruption and a\nBUG() crash (\"Can\u0027t donate prior to front\")."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.8,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The vulnerable donation accounting in fs/netfs is driven entirely by data returned from a remote peer \u2014 subrequest completion order, short-read lengths and non-folio-aligned boundaries are chosen by the SMB/9p/Ceph/AFS server, and `netfs_read_subreq_terminated()` is invoked directly from those filesystems\u0027 network receive paths. A malicious or compromised file server, or an on-path attacker against an unsigned/unencrypted cifs, 9p or NFS mount, reaches the bug over the network.\nAC:L - The remote server controls both sides of the race: it decides when each READ response is sent and how much data it carries, so it can deterministically make two subrequests donate to the same successor and clobber `prev_donated`. The bug was reported from ordinary production use rather than a targeted fuzz, and the affected filesystems are enabled in all mainstream kernel configs.\nPR:N - The attacker is the remote server (or an on-path attacker) and needs no credentials or account on the victim host \u2014 only that the victim have a netfs-backed mount it reads from. No local privilege on the target is involved.\nUI:N - Ordinary background readahead on an already-mounted share (fstab/automount, container volume, WSL/Kata 9p, backup or indexer scans) is enough to drive the read-collection path; no specific victim action is required.\nS:U - The corruption and crash are confined to the kernel\u0027s own page cache and netfs request state; no VM, IOMMU or sandbox boundary is crossed.\nC:H - Lost donations make `netfs_unlock_read_folio()` mark folios uptodate for ranges no subrequest ever filled and inflate `rreq-\u003etransferred`, so read() returns uninitialized page-cache pages \u2014 arbitrary previously-freed kernel memory \u2014 to userspace, and the collector can also walk off the folio queue into invalid `folioq` pointers.\nI:H - The commit states the bug causes data corruption; because `NETFS_READ_FOR_WRITE` is one of the affected origins, a folio wrongly marked uptodate with unfilled content is subsequently written back, persisting corrupted data to the file on the server, and the broken start/len/transferred bookkeeping corrupts page-cache state generally.\nA:H - The mis-accounting hits an explicit `BUG()` (\"Can\u0027t donate prior to front\"/\"fpos \u003e start\") in the filesystem completion context, killing the worker or softirq while rolling-buffer folios remain locked \u2014 a kernel panic, or at minimum an unrecoverable hang of every task waiting on those folios and of the mount."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:55:52.895Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/62b9ad7e52d4777f7e775ee1f0ad2452f6041024"
        },
        {
          "url": "https://git.kernel.org/stable/c/e25cec3b76aba47a49138d2162fc809c6cd49c9e"
        },
        {
          "url": "https://git.kernel.org/stable/c/e2d46f2ec332533816417b60933954173f602121"
        }
      ],
      "title": "fs/netfs/read_collect: add to next-\u003eprev_donated",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-21988",
    "datePublished": "2025-04-02T12:53:12.170Z",
    "dateReserved": "2024-12-29T08:45:45.800Z",
    "dateUpdated": "2026-08-05T11:55:52.895Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-21988",
      "date": "2026-09-30",
      "epss": "0.00381",
      "percentile": "0.296"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/netfs/read_collect.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "62b9ad7e52d4777f7e775ee1f0ad2452f6041024",
                    "status": "affected",
                    "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e25cec3b76aba47a49138d2162fc809c6cd49c9e",
                    "status": "affected",
                    "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e2d46f2ec332533816417b60933954173f602121",
                    "status": "affected",
                    "version": "ee4cdf7ba857a894ad1650d6ab77669cbbfa329e",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/netfs/read_collect.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.12"
                  },
                  {
                    "lessThan": "6.12",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.20",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.13.*",
                    "status": "unaffected",
                    "version": "6.13.8",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "6.14",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "configurations": [
          {
            "nodes": [
              {
                "cpeMatch": [
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "F6AE02FC-5B2D-426A-B8D7-3D71FBE28D40",
                    "versionEndExcluding": "6.12.20",
                    "versionStartIncluding": "6.12",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "0A20D4D7-B329-4C68-B662-76062EA7DCF0",
                    "versionEndExcluding": "6.13.8",
                    "versionStartIncluding": "6.13",
                    "vulnerable": true
                  }
                ],
                "negate": false,
                "operator": "OR"
              }
            ]
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nfs/netfs/read_collect: add to next-\u003eprev_donated\n\nIf multiple subrequests donate data to the same \"next\" request\n(depending on the subrequest completion order), each of them would\noverwrite the `prev_donated` field, causing data corruption and a\nBUG() crash (\"Can\u0027t donate prior to front\")."
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: fs/netfs/read_collect: agregar a next-\u0026gt;prev_doned Si varias subsolicitudes donan datos a la misma solicitud \"siguiente\" (dependiendo del orden de finalizaci\u00f3n de las subsolicitudes), cada una de ellas sobrescribir\u00eda el campo `prev_doned`, lo que causar\u00eda corrupci\u00f3n de datos y un bloqueo de BUG() (\"No se puede donar antes del front\")."
          }
        ],
        "id": "CVE-2025-21988",
        "lastModified": "2026-07-30T06:22:01.917",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 9.8,
                "baseSeverity": "CRITICAL",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            },
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 5.5,
                "baseSeverity": "MEDIUM",
                "confidentialityImpact": "NONE",
                "integrityImpact": "NONE",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 3.6,
              "source": "nvd@nist.gov",
              "type": "Primary"
            }
          ]
        },
        "published": "2025-04-02T13:15:43.317",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/62b9ad7e52d4777f7e775ee1f0ad2452f6041024"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/e25cec3b76aba47a49138d2162fc809c6cd49c9e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/e2d46f2ec332533816417b60933954173f602121"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Modified",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "NVD-CWE-noinfo"
              }
            ],
            "source": "nvd@nist.gov",
            "type": "Primary"
          }
        ]
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-07-30T09:37:51+00:00",
      "cve": "CVE-2025-21988",
      "id": "CVE-2025-21988",
      "initial_release_date": "2025-04-02T00:00:00+00:00",
      "product_status:known_affected": "76",
      "product_status:known_not_affected": "198",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: fs/netfs/read_collect: add to next-\u003eprev_donated",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-21988.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-08-29T01:25:52Z",
      "cve": "CVE-2025-21988",
      "id": "CVE-2025-21988",
      "initial_release_date": "2025-04-05T02:24:55Z",
      "product_status:known_not_affected": "491",
      "product_status:recommended": "78",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-21988",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-21988.json",
      "version": "16"
    }
  }
}



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…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…