{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-90052","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.783Z","datePublished":"2026-09-17T16:05:38.281Z","dateUpdated":"2026-09-18T17:52:46.592Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-18T17:52:46.592Z"},"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'ed page.\n\nFix this by subtracting extra_space from the buffer size when computing\nmax_blocks, like we do for writes."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The overflow is triggered by a REQ_OP_DISCARD bio entering dm_integrity_map() → dm_integrity_map_continue() → 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 < 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()'s 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's 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."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/md/dm-integrity.c"],"versions":[{"version":"5c58ea19a909ef6bed4f0f824e9cd7e30d7e4775","lessThan":"9988c1c9e0d1c78391e3d8e2817beb667470c76f","status":"affected","versionType":"git"},{"version":"6228722c27304e4682cddc1fede03898f87e4414","lessThan":"dd08a645195f410f2dcaa40de379a45ce110e873","status":"affected","versionType":"git"},{"version":"68c5c42567bc462139128968ebbfadd0aefff519","lessThan":"59e6f919d77d72ec79cbf171256f2f7819737580","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/md/dm-integrity.c"],"versions":[{"version":"7.3-rc1","status":"affected"},{"version":"0","lessThan":"7.3-rc1","status":"unaffected","versionType":"semver"},{"version":"7.3-rc2","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.3-rc1","versionEndExcluding":"7.3-rc2"}]}]}],"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"}}}}