GHSA-J9FV-QM2V-GR26

Vulnerability from github – Published: 2026-08-15 06:32 – Updated: 2026-08-17 06:33
VLAI
Details

In the Linux kernel, the following vulnerability has been resolved:

fs/ntfs3: bound DeleteIndexEntryAllocation memmove length

In do_action()'s DeleteIndexEntryAllocation case, e->size comes from an on-disk INDEX_BUFFER entry. When e->size makes e + e->size point past hdr + hdr->used, PtrOffset(e1, Add2Ptr(hdr, used)) returns a negative ptrdiff_t that is silently cast to a quasi-infinite size_t when passed to memmove(). The memmove then walks past the destination buffer.

The sibling DeleteIndexEntryRoot case at fslog.c:3540-3543 already carries the corresponding guard:

if (PtrOffset(e1, Add2Ptr(hdr, used)) < esize ||
    Add2Ptr(e, esize) > Add2Ptr(lrh, rec_len) ||
    used + esize > le32_to_cpu(hdr->total)) {
    goto dirty_vol;
}

Apply the same shape to the allocation-path case. Also reject esize == 0: memmove(e, e, ...) is a no-op and leaves hdr->used unchanged, hiding a malformed entry from the existing check_index_header() walk.

Reproduced under UML+KASAN on mainline 8d90b09e6741 by mounting a crafted NTFS image: the unguarded memmove takes a length of 0xffffffffffffff00 and the kernel oopses in memmove+0x81/0x1a0 on the do_action+0x36a2 frame.

[almaz.alexandrovich@paragon-software.com: clang-formatted the changes]

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-72197"
  ],
  "database_specific": {
    "cwe_ids": [],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-08-15T06:21:38Z",
    "severity": "HIGH"
  },
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nfs/ntfs3: bound DeleteIndexEntryAllocation memmove length\n\nIn do_action()\u0027s DeleteIndexEntryAllocation case, e-\u003esize comes\nfrom an on-disk INDEX_BUFFER entry.  When e-\u003esize makes\ne + e-\u003esize point past hdr + hdr-\u003eused,\nPtrOffset(e1, Add2Ptr(hdr, used)) returns a negative ptrdiff_t\nthat is silently cast to a quasi-infinite size_t when passed\nto memmove().  The memmove then walks past the destination\nbuffer.\n\nThe sibling DeleteIndexEntryRoot case at fslog.c:3540-3543\nalready carries the corresponding guard:\n\n\tif (PtrOffset(e1, Add2Ptr(hdr, used)) \u003c esize ||\n\t    Add2Ptr(e, esize) \u003e Add2Ptr(lrh, rec_len) ||\n\t    used + esize \u003e le32_to_cpu(hdr-\u003etotal)) {\n\t\tgoto dirty_vol;\n\t}\n\nApply the same shape to the allocation-path case.  Also reject\nesize == 0: memmove(e, e, ...) is a no-op and leaves\nhdr-\u003eused unchanged, hiding a malformed entry from the\nexisting check_index_header() walk.\n\nReproduced under UML+KASAN on mainline 8d90b09e6741 by\nmounting a crafted NTFS image: the unguarded memmove takes a\nlength of 0xffffffffffffff00 and the kernel oopses in\nmemmove+0x81/0x1a0 on the do_action+0x36a2 frame.\n\n[almaz.alexandrovich@paragon-software.com: clang-formatted the changes]",
  "id": "GHSA-j9fv-qm2v-gr26",
  "modified": "2026-08-17T06:33:15Z",
  "published": "2026-08-15T06:32:15Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-72197"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/09fddd52c1b0cef2c086d61be8f3d5dc92e36565"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/4c8aac931c1cd70347961ba5157aa916448c6a25"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/554700c65d398276cb00a8ef95f1d5e00b9eff93"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/b509b9613f20dc5b653d54bf78fab00d79cc43c8"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/c38ed2ab62fab75fd6d0fdc2bee540fbebc7b959"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/f383aae59ec3994c14804f4191c59038b206be81"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/fc4626bb3656362de8b0ecd56605d47a19ec3518"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ]
}



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…