CVE-2026-90052 (GCVE-0-2026-90052)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:05 – Updated: 2026-09-18 17:52
VLAI
Title
dm-integrity: fix buffer overflow with keyed discard
Summary
In the Linux kernel, the following vulnerability has been resolved: dm-integrity: fix buffer overflow with keyed discard Since commit 68c5c42567bc ("dm-integrity: replace forgeable discard filler with a keyed sector marker"), integrity_metadata computes a checksum for every discarded block into the "checksums" buffer. integrity_sector_checksum always writes the whole digest. So if the tag size is smaller than the digest size, the checksum of the last block that fits into the buffer is written past the end of it. For example, with hmac(sha256) and tag size 16, a 4MiB discard writes 16 bytes past the kmalloc'ed page. Fix this by subtracting extra_space from the buffer size when computing max_blocks, like we do for writes.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 5c58ea19a909ef6bed4f0f824e9cd7e30d7e4775 , < 9988c1c9e0d1c78391e3d8e2817beb667470c76f (git)
Affected: 6228722c27304e4682cddc1fede03898f87e4414 , < dd08a645195f410f2dcaa40de379a45ce110e873 (git)
Affected: 68c5c42567bc462139128968ebbfadd0aefff519 , < 59e6f919d77d72ec79cbf171256f2f7819737580 (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.3-rc1
Unaffected: 0 , < 7.3-rc1 (semver)
Unaffected: 7.3-rc2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/md/dm-integrity.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "9988c1c9e0d1c78391e3d8e2817beb667470c76f",
              "status": "affected",
              "version": "5c58ea19a909ef6bed4f0f824e9cd7e30d7e4775",
              "versionType": "git"
            },
            {
              "lessThan": "dd08a645195f410f2dcaa40de379a45ce110e873",
              "status": "affected",
              "version": "6228722c27304e4682cddc1fede03898f87e4414",
              "versionType": "git"
            },
            {
              "lessThan": "59e6f919d77d72ec79cbf171256f2f7819737580",
              "status": "affected",
              "version": "68c5c42567bc462139128968ebbfadd0aefff519",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/md/dm-integrity.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7.3-rc1"
            },
            {
              "lessThan": "7.3-rc1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc2",
                  "versionStartIncluding": "7.3-rc1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndm-integrity: fix buffer overflow with keyed discard\n\nSince commit 68c5c42567bc (\"dm-integrity: replace forgeable discard\nfiller with a keyed sector marker\"), integrity_metadata computes a\nchecksum for every discarded block into the \"checksums\" buffer.\nintegrity_sector_checksum always writes the whole digest. So if the tag\nsize is smaller than the digest size, the checksum of the last block\nthat fits into the buffer is written past the end of it. For example,\nwith hmac(sha256) and tag size 16, a 4MiB discard writes 16 bytes past\nthe kmalloc\u0027ed page.\n\nFix this by subtracting extra_space from the buffer size when computing\nmax_blocks, like we do for writes."
        }
      ],
      "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 overflow is triggered by a REQ_OP_DISCARD bio entering dm_integrity_map() \u2192 dm_integrity_map_continue() \u2192 integrity_metadata(). That bio is built by blk_ioctl_discard()/blkdev_issue_discard() from ioctl(BLKDISCARD) or by a filesystem discard; the discard LBA range is a local block operation, not a field parsed from a remote protocol message.\nAC:L - With allow_discards_keyed and tag_size \u003c internal_hash_digestsize, a discard of max_blocks (PAGE_SIZE/tag_size) blocks makes integrity_discard_fill_tags() call integrity_discard_checksum() so crypto_shash_final()/crypto_ahash_digest() store the full digest at checksums+i*tag_size, deterministically writing extra_space bytes past the kmalloc(PAGE_SIZE) buffer. No race is required.\nPR:L - Loading the integrity table needs ctl_ioctl()\u0027s capable(CAP_SYS_ADMIN), but that is only the deployment of allow_discards_keyed. blk_ioctl_discard() has no capable() check, only a write-open fd, and an unprivileged user can generate REQ_OP_DISCARD via fallocate/unlink on a discard-enabled filesystem (f2fs default_options() sets DISCARD when the mapped device advertises it).\nUI:N - The attacker issues BLKDISCARD or hole-punches/unlinks their own file on the already-mapped volume; integrity_metadata() then runs on that bio. No separate victim must mount attacker-supplied media or open a file.\nS:U - integrity_discard_fill_tags() overruns a kmalloc checksums buffer in the host kernel\u0027s dm-integrity I/O path. That is in-kernel heap corruption under the same OS authority, not a VM, IOMMU, or sandbox escape.\nC:H - integrity_sector_checksum_shash()/ahash write a full HMAC digest (32 bytes for hmac(sha256)) into a tag_size-strided buffer, overflowing extra_space bytes (16 with a 16-byte tag) into the next kmalloc-4k/page. That heap overflow can corrupt adjacent objects and be turned into a kernel read primitive.\nI:H - The same out-of-bounds write from crypto_shash_final() past the PAGE_SIZE checksums allocation in the keyed-discard loop corrupts adjacent kernel heap/page contents, giving an exploitable write primitive for control-flow hijack rather than a tag-only on-disk change.\nA:H - Overwriting the extra_space bytes after the kmalloc(PAGE_SIZE) checksums buffer in integrity_discard_fill_tags() corrupts the following kernel page or slab object, which can oops/panic immediately or when the smashed object is later used."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:52:46.592Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/9988c1c9e0d1c78391e3d8e2817beb667470c76f"
        },
        {
          "url": "https://git.kernel.org/stable/c/dd08a645195f410f2dcaa40de379a45ce110e873"
        },
        {
          "url": "https://git.kernel.org/stable/c/59e6f919d77d72ec79cbf171256f2f7819737580"
        }
      ],
      "title": "dm-integrity: fix buffer overflow with keyed discard",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90052",
    "datePublished": "2026-09-17T16:05:38.281Z",
    "dateReserved": "2026-09-11T19:38:34.783Z",
    "dateUpdated": "2026-09-18T17:52:46.592Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90052",
      "date": "2026-09-25",
      "epss": "0.00187",
      "percentile": "0.07418"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/md/dm-integrity.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "9988c1c9e0d1c78391e3d8e2817beb667470c76f",
                    "status": "affected",
                    "version": "5c58ea19a909ef6bed4f0f824e9cd7e30d7e4775",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "dd08a645195f410f2dcaa40de379a45ce110e873",
                    "status": "affected",
                    "version": "6228722c27304e4682cddc1fede03898f87e4414",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "59e6f919d77d72ec79cbf171256f2f7819737580",
                    "status": "affected",
                    "version": "68c5c42567bc462139128968ebbfadd0aefff519",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/md/dm-integrity.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "7.3-rc1"
                  },
                  {
                    "lessThan": "7.3-rc1",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc2",
                    "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\ndm-integrity: fix buffer overflow with keyed discard\n\nSince commit 68c5c42567bc (\"dm-integrity: replace forgeable discard\nfiller with a keyed sector marker\"), integrity_metadata computes a\nchecksum for every discarded block into the \"checksums\" buffer.\nintegrity_sector_checksum always writes the whole digest. So if the tag\nsize is smaller than the digest size, the checksum of the last block\nthat fits into the buffer is written past the end of it. For example,\nwith hmac(sha256) and tag size 16, a 4MiB discard writes 16 bytes past\nthe kmalloc\u0027ed page.\n\nFix this by subtracting extra_space from the buffer size when computing\nmax_blocks, like we do for writes."
          }
        ],
        "id": "CVE-2026-90052",
        "lastModified": "2026-09-18T18:17:39.910",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:16:53.610",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/59e6f919d77d72ec79cbf171256f2f7819737580"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/9988c1c9e0d1c78391e3d8e2817beb667470c76f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/dd08a645195f410f2dcaa40de379a45ce110e873"
          }
        ],
        "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…