CVE-2026-31463 (GCVE-0-2026-31463)

Vulnerability from cvelistv5 – Published: 2026-04-22 13:53 – Updated: 2026-08-05 12:22
VLAI
Title
iomap: fix invalid folio access when i_blkbits differs from I/O granularity
Summary
In the Linux kernel, the following vulnerability has been resolved: iomap: fix invalid folio access when i_blkbits differs from I/O granularity Commit aa35dd5cbc06 ("iomap: fix invalid folio access after folio_end_read()") partially addressed invalid folio access for folios without an ifs attached, but it did not handle the case where 1 << inode->i_blkbits matches the folio size but is different from the granularity used for the IO, which means IO can be submitted for less than the full folio for the !ifs case. In this case, the condition: if (*bytes_submitted == folio_len) ctx->cur_folio = NULL; in iomap_read_folio_iter() will not invalidate ctx->cur_folio, and iomap_read_end() will still be called on the folio even though the IO helper owns it and will finish the read on it. Fix this by unconditionally invalidating ctx->cur_folio for the !ifs case.
Assigner
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: b2f35ac4146d32d4424aaa941bbc681f12c1b9e6 , < 4a927f670cdb0def226f9f85f42a9f19d9e09c88 (git)
Affected: b2f35ac4146d32d4424aaa941bbc681f12c1b9e6 , < bd71fb3fea9945987053968f028a948997cba8cc (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.19
Unaffected: 0 , < 6.19 (semver)
Unaffected: 6.19.11 , ≤ 6.19.* (semver)
Unaffected: 7.0 , ≤ * (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/iomap/buffered-io.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "4a927f670cdb0def226f9f85f42a9f19d9e09c88",
              "status": "affected",
              "version": "b2f35ac4146d32d4424aaa941bbc681f12c1b9e6",
              "versionType": "git"
            },
            {
              "lessThan": "bd71fb3fea9945987053968f028a948997cba8cc",
              "status": "affected",
              "version": "b2f35ac4146d32d4424aaa941bbc681f12c1b9e6",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/iomap/buffered-io.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.19"
            },
            {
              "lessThan": "6.19",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.19.*",
              "status": "unaffected",
              "version": "6.19.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.0",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.19.11",
                  "versionStartIncluding": "6.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0",
                  "versionStartIncluding": "6.19",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niomap: fix invalid folio access when i_blkbits differs from I/O granularity\n\nCommit aa35dd5cbc06 (\"iomap: fix invalid folio access after\nfolio_end_read()\") partially addressed invalid folio access for folios\nwithout an ifs attached, but it did not handle the case where\n1 \u003c\u003c inode-\u003ei_blkbits matches the folio size but is different from the\ngranularity used for the IO, which means IO can be submitted for less\nthan the full folio for the !ifs case.\n\nIn this case, the condition:\n\n  if (*bytes_submitted == folio_len)\n    ctx-\u003ecur_folio = NULL;\n\nin iomap_read_folio_iter() will not invalidate ctx-\u003ecur_folio, and\niomap_read_end() will still be called on the folio even though the IO\nhelper owns it and will finish the read on it.\n\nFix this by unconditionally invalidating ctx-\u003ecur_folio for the !ifs\ncase."
        }
      ],
      "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 iomap buffered-read path can be reached by remote read requests when an in-kernel file server such as ksmbd or nfsd serves an iomap-backed filesystem, passing network-controlled reads into VFS/page-cache read paths. This is a reasonable deployment for Linux storage servers.\nAC:L - Once the affected filesystem/block-device geometry exists, triggering is a normal buffered read or readahead of a range that submits less than the folio size without an iomap_folio_state. No attacker-uncontrolled race is required for the invalid folio ownership/completion path.\nPR:N - A remote client can trigger reads through guest or otherwise unauthenticated exported file service configurations without local kernel privileges. Locally, the same path only requires ordinary read access to a file.\nUI:N - The attacker triggers the bug by issuing read requests directly. No separate victim action is required.\nS:U - The vulnerable component and impacted resources are within the same kernel security authority. This is not a VM escape, IOMMU bypass, or cross-scope boundary violation.\nC:H - The stale folio pointer can be accessed after async read completion and, for readahead, after the readahead reference is dropped, making it a plausible use-after-free of page-cache metadata. Following the required higher-severity rule, this memory-safety issue is treated as capable of kernel memory disclosure.\nI:H - The same invalid folio access and double completion/unlock can corrupt page or folio state, potentially acting on reclaimed or reused memory. Under the higher-severity rule, this is treated as kernel memory corruption with high integrity impact.\nA:H - The bug can trigger WARN/VM_BUG_ON paths, double-unlock behavior, hangs, or kernel crashes. It is therefore high availability impact."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:22:44.255Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/4a927f670cdb0def226f9f85f42a9f19d9e09c88"
        },
        {
          "url": "https://git.kernel.org/stable/c/bd71fb3fea9945987053968f028a948997cba8cc"
        }
      ],
      "title": "iomap: fix invalid folio access when i_blkbits differs from I/O granularity",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-31463",
    "datePublished": "2026-04-22T13:53:54.224Z",
    "dateReserved": "2026-03-09T15:48:24.092Z",
    "dateUpdated": "2026-08-05T12:22:44.255Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-31463",
      "date": "2026-08-17",
      "epss": "0.00379",
      "percentile": "0.31046"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-31463\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-04-22T14:16:42.323\",\"lastModified\":\"2026-06-17T10:33:47.373\",\"vulnStatus\":\"Analyzed\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\niomap: fix invalid folio access when i_blkbits differs from I/O granularity\\n\\nCommit aa35dd5cbc06 (\\\"iomap: fix invalid folio access after\\nfolio_end_read()\\\") partially addressed invalid folio access for folios\\nwithout an ifs attached, but it did not handle the case where\\n1 \u003c\u003c inode-\u003ei_blkbits matches the folio size but is different from the\\ngranularity used for the IO, which means IO can be submitted for less\\nthan the full folio for the !ifs case.\\n\\nIn this case, the condition:\\n\\n  if (*bytes_submitted == folio_len)\\n    ctx-\u003ecur_folio = NULL;\\n\\nin iomap_read_folio_iter() will not invalidate ctx-\u003ecur_folio, and\\niomap_read_end() will still be called on the folio even though the IO\\nhelper owns it and will finish the read on it.\\n\\nFix this by unconditionally invalidating ctx-\u003ecur_folio for the !ifs\\ncase.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"fs/iomap/buffered-io.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"b2f35ac4146d32d4424aaa941bbc681f12c1b9e6\",\"lessThan\":\"4a927f670cdb0def226f9f85f42a9f19d9e09c88\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"b2f35ac4146d32d4424aaa941bbc681f12c1b9e6\",\"lessThan\":\"bd71fb3fea9945987053968f028a948997cba8cc\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"fs/iomap/buffered-io.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.19\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.19\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.19.11\",\"lessThanOrEqual\":\"6.19.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.0\",\"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:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":9.8,\"baseSeverity\":\"CRITICAL\",\"attackVector\":\"NETWORK\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"NONE\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":3.9,\"impactScore\":5.9}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"NVD-CWE-noinfo\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.19\",\"versionEndExcluding\":\"6.19.11\",\"matchCriteriaId\":\"4CA2E747-A9EC-4518-9AA2-B4247FC748B7\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"F253B622-8837-4245-BCE5-A7BF8FC76A16\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"4AE85AD8-4641-4E7C-A2F4-305E2CD9EE64\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"F666C8D8-6538-46D4-B318-87610DE64C34\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*\",\"matchCriteriaId\":\"02259FDA-961B-47BC-AE7F-93D7EC6E90C2\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*\",\"matchCriteriaId\":\"58A9FEFF-C040-420D-8F0A-BFDAAA1DF258\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/4a927f670cdb0def226f9f85f42a9f19d9e09c88\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/bd71fb3fea9945987053968f028a948997cba8cc\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]}]}}",
    "redhat_vex": {
      "aggregate_severity": "None",
      "current_release_date": "2026-06-28T07:25:36+00:00",
      "cve": "CVE-2026-31463",
      "id": "CVE-2026-31463",
      "initial_release_date": "2026-04-22T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: iomap: fix invalid folio access when i_blkbits differs from I/O granularity",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-31463.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-08-06T01:25:04Z",
      "cve": "CVE-2026-31463",
      "id": "CVE-2026-31463",
      "initial_release_date": "2026-04-23T01:26:01Z",
      "product_status:known_not_affected": "320",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-31463",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-31463.json",
      "version": "4"
    }
  }
}



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…

Loading…