CVE-2026-89840 (GCVE-0-2026-89840)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:31 – Updated: 2026-09-21 13:15
VLAI
Title
f2fs: validate MOVE_RANGE destination size
Summary
In the Linux kernel, the following vulnerability has been resolved: f2fs: validate MOVE_RANGE destination size F2FS_IOC_MOVE_RANGE checks the source range, but not the destination end before updating i_size. A source hole can expose this: __clone_blkaddrs() skips NULL_ADDR entries and returns success, so the caller can still extend the destination inode with unchecked pos_out + len. Reject destination overflow and use inode_newsize_ok() before extending the destination inode.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 4dd6f977fc778e5a0da604e5f8cb2f36d163d27b , < db13064669526494cd78ba3a4394063b740e940c (git)
Affected: 4dd6f977fc778e5a0da604e5f8cb2f36d163d27b , < dcae1eeda53149f219dd6af93b3083b7271c1c63 (git)
Affected: 4dd6f977fc778e5a0da604e5f8cb2f36d163d27b , < e533889fc26aea0cd83c90327063f272061dd820 (git)
guessed Create a notification for this product.
Linux Linux Affected: 4.8
Unaffected: 0 , < 4.8 (semver)
Unaffected: 6.18.53 , ≤ 6.18.* (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (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/f2fs/file.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "db13064669526494cd78ba3a4394063b740e940c",
              "status": "affected",
              "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
              "versionType": "git"
            },
            {
              "lessThan": "dcae1eeda53149f219dd6af93b3083b7271c1c63",
              "status": "affected",
              "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
              "versionType": "git"
            },
            {
              "lessThan": "e533889fc26aea0cd83c90327063f272061dd820",
              "status": "affected",
              "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/f2fs/file.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.8"
            },
            {
              "lessThan": "4.8",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.53",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.53",
                  "versionStartIncluding": "4.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "4.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "4.8",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nf2fs: validate MOVE_RANGE destination size\n\nF2FS_IOC_MOVE_RANGE checks the source range, but not the destination end\nbefore updating i_size. A source hole can expose this: __clone_blkaddrs()\nskips NULL_ADDR entries and returns success, so the caller can still extend\nthe destination inode with unchecked pos_out + len.\n\nReject destination overflow and use inode_newsize_ok() before extending\nthe destination inode."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.1,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - F2FS_IOC_MOVE_RANGE is a local ioctl (f2fs_ioctl \u2192 f2fs_ioc_move_range \u2192 f2fs_move_file_range) on f2fs file descriptors. f2fs has no remap_file_range, so nfsd/ksmbd copy_file_range cannot reach this path.\nAC:L - The attacker fully controls pos_out and len and can ftruncate a sparse source so __clone_blkaddrs skips NULL_ADDR holes and returns success, making the unchecked destination i_size update deterministic with no race or uncontrollable layout.\nPR:L - f2fs_ioc_move_range has no capable() check; it only needs FMODE_READ|FMODE_WRITE on the source and FMODE_WRITE on the destination. Any unprivileged user with files on mounted f2fs (Android /data, embedded userdata) can trigger it.\nUI:N - The attacker opens their own files on an already-mounted f2fs volume and issues F2FS_IOC_MOVE_RANGE; no separate victim action such as mounting a filesystem or opening a crafted file is required.\nS:U - Impact is corruption of f2fs inode size metadata and subsequent filesystem/kernel state on the local host, a standard kernel compromise within the same security authority with no VM escape or IOMMU bypass.\nC:N - The bug writes an oversized or overflowed i_size; reads of the resulting sparse file return zeros or EOF (negative i_size makes pos \u003e= i_size), and lookups beyond max_file_blocks fail with -E2BIG, so there is no kernel-memory or cross-file disclosure primitive.\nI:H - Missing overflow and inode_newsize_ok() checks let the attacker set destination i_size past s_maxbytes or wrap size_t into a negative loff_t, persisting corrupt on-disk inode size and poisoning later paths (fallocate COLLAPSE nrpages, __exchange_data_block ALLOC_NODE) that trust i_size for block-tree updates.\nA:H - A poisoned i_size enables unbounded node-tree walks and block-exchange loops (SEEK_DATA/HOLE, fallocate COLLAPSE via DIV_ROUND_UP(i_size)), can hang the kernel or exhaust node space, and leaves durable filesystem corruption on shared f2fs userdata."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-21T13:15:08.455Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/db13064669526494cd78ba3a4394063b740e940c"
        },
        {
          "url": "https://git.kernel.org/stable/c/dcae1eeda53149f219dd6af93b3083b7271c1c63"
        },
        {
          "url": "https://git.kernel.org/stable/c/e533889fc26aea0cd83c90327063f272061dd820"
        }
      ],
      "title": "f2fs: validate MOVE_RANGE destination size",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89840",
    "datePublished": "2026-09-16T10:31:14.646Z",
    "dateReserved": "2026-09-11T19:38:34.769Z",
    "dateUpdated": "2026-09-21T13:15:08.455Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89840",
      "date": "2026-09-25",
      "epss": "0.00169",
      "percentile": "0.05503"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-24T02:37:12.000Z",
      "cve": "CVE-2026-89840",
      "id": "msrc_CVE-2026-89840",
      "initial_release_date": "2026-09-17T01:07:46.000Z",
      "product_status:known_affected": "3",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "f2fs: validate MOVE_RANGE destination size",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-89840.json",
      "version": "4"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/f2fs/file.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "db13064669526494cd78ba3a4394063b740e940c",
                    "status": "affected",
                    "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "dcae1eeda53149f219dd6af93b3083b7271c1c63",
                    "status": "affected",
                    "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e533889fc26aea0cd83c90327063f272061dd820",
                    "status": "affected",
                    "version": "4dd6f977fc778e5a0da604e5f8cb2f36d163d27b",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/f2fs/file.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "4.8"
                  },
                  {
                    "lessThan": "4.8",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.53",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nf2fs: validate MOVE_RANGE destination size\n\nF2FS_IOC_MOVE_RANGE checks the source range, but not the destination end\nbefore updating i_size. A source hole can expose this: __clone_blkaddrs()\nskips NULL_ADDR entries and returns success, so the caller can still extend\nthe destination inode with unchecked pos_out + len.\n\nReject destination overflow and use inode_newsize_ok() before extending\nthe destination inode."
          }
        ],
        "id": "CVE-2026-89840",
        "lastModified": "2026-09-21T14:17:27.507",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.1,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "NONE",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.2,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-16T11:16:50.837",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/db13064669526494cd78ba3a4394063b740e940c"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/dcae1eeda53149f219dd6af93b3083b7271c1c63"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e533889fc26aea0cd83c90327063f272061dd820"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



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…