{"dataType":"CVE_RECORD","cveMetadata":{"cveId":"CVE-2024-26697","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-02-19T14:20:24.156Z","datePublished":"2024-04-03T14:54:57.848Z","dateUpdated":"2026-08-05T11:26:45.330Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:26:45.330Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnilfs2: fix data corruption in dsync block recovery for small block sizes\n\nThe helper function nilfs_recovery_copy_block() of\nnilfs_recovery_dsync_blocks(), which recovers data from logs created by\ndata sync writes during a mount after an unclean shutdown, incorrectly\ncalculates the on-page offset when copying repair data to the file's page\ncache.  In environments where the block size is smaller than the page\nsize, this flaw can cause data corruption and leak uninitialized memory\nbytes during the recovery process.\n\nFix these issues by correcting this byte offset calculation on the page."}],"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 vulnerable code is only reachable by mounting a nilfs2 block device or image whose last logs are unclean data-sync logs, which requires local system access (removable media, loop device, or autofs/udisks handling). No network-facing service reaches `nilfs_do_roll_forward()`.\nAC:L - The attacker fully controls the on-disk parameters that drive the defect — block size (1K/2K via mkfs, guaranteeing blocksize < PAGE_SIZE), `fi_ino`, `bi_blkoff`, and the log block placement that fixes `bh_offset(bh_org)` — so the misdirected copy and the uninitialized target buffer occur deterministically on every mount, with no race or environmental precondition.\nPR:L - nilfs2 registers as FS_REQUIRES_DEV without FS_USERNS_MOUNT, so unprivileged user namespaces do not grant the mount, but in the most severe realistic deployment (desktop/kiosk/embedded with udisks2 or autofs auto-mounting removable media, or an fstab `user` entry) an ordinary local user supplies the image and the mount happens on their behalf.\nUI:N - The attacker inserts their own media or invokes the permitted mount themselves and then reads back the recovered file; no separate victim needs to take any action.\nS:U - The disclosed memory and the corrupted data both belong to the same kernel security authority as the vulnerable code; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - Each recovered block leaves the intended buffer filled with stale contents of a freshly allocated page-cache page — previously freed anonymous memory, other files' page cache, slab or page-table pages — and `__block_commit_write()` marks it uptodate and dirty, so it becomes readable file data and is persisted to disk. The attacker can place an unbounded number of dsync recovery blocks in the crafted log and repeat the mount, turning this into a large-volume, groomable disclosure of kernel and other users' memory.\nI:H - The recovered bytes are written to an attacker-chosen wrong offset in the folio while the intended block is filled with uninitialized memory and then marked dirty, permanently corrupting file contents on disk. Because `fi_ino` is unvalidated at this version, the attacker can direct this corruption at any inode, including directories and nilfs2 metadata files, so on-disk data and metadata integrity is fully lost.\nA:H - The garbage injected into an attacker-selected inode's page cache is committed and written back, so directing it at the root directory or a metadata inode feeds corrupted entries into nilfs2's directory and btree parsers — the same input class that produces the documented nilfs2 kernel BUG_ON/oops crashes — and `nilfs_error()` renders the filesystem unusable (panic under `errors=panic`)."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nilfs2/recovery.c"],"versions":[{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"5278c3eb6bf5896417572b52adb6be9d26e92f65","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"a6efe6dbaaf504f5b3f8a5c3f711fe54e7dda0ba","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"364a66be2abdcd4fd426ffa44d9b8f40aafb3caa","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"120f7fa2008e3bd8b7680b4ab5df942decf60fd5","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"9c9c68d64fd3284f7097ed6ae057c8441f39fcd3","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"2e1480538ef60bfee5473dfe02b1ecbaf1a4aa0d","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"2000016bab499074e6248ea85aeea7dd762355d9","status":"affected","versionType":"git"},{"version":"0f3e1c7f23f8a6f8224fa1d275381f6d9279ad4b","lessThan":"67b8bcbaed4777871bb0dcc888fb02a614a98ab1","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nilfs2/recovery.c"],"versions":[{"version":"2.6.30","status":"affected"},{"version":"0","lessThan":"2.6.30","status":"unaffected","versionType":"semver"},{"version":"4.19.307","lessThanOrEqual":"4.19.*","status":"unaffected","versionType":"semver"},{"version":"5.4.269","lessThanOrEqual":"5.4.*","status":"unaffected","versionType":"semver"},{"version":"5.10.210","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.149","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.79","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.18","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.7.6","lessThanOrEqual":"6.7.*","status":"unaffected","versionType":"semver"},{"version":"6.8","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":"2.6.30","versionEndExcluding":"4.19.307"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"5.4.269"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"5.10.210"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"5.15.149"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"6.1.79"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"6.6.18"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"6.7.6"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.30","versionEndExcluding":"6.8"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/5278c3eb6bf5896417572b52adb6be9d26e92f65"},{"url":"https://git.kernel.org/stable/c/a6efe6dbaaf504f5b3f8a5c3f711fe54e7dda0ba"},{"url":"https://git.kernel.org/stable/c/364a66be2abdcd4fd426ffa44d9b8f40aafb3caa"},{"url":"https://git.kernel.org/stable/c/120f7fa2008e3bd8b7680b4ab5df942decf60fd5"},{"url":"https://git.kernel.org/stable/c/9c9c68d64fd3284f7097ed6ae057c8441f39fcd3"},{"url":"https://git.kernel.org/stable/c/2e1480538ef60bfee5473dfe02b1ecbaf1a4aa0d"},{"url":"https://git.kernel.org/stable/c/2000016bab499074e6248ea85aeea7dd762355d9"},{"url":"https://git.kernel.org/stable/c/67b8bcbaed4777871bb0dcc888fb02a614a98ab1"}],"title":"nilfs2: fix data corruption in dsync block recovery for small block sizes","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2024-08-02T00:14:12.662Z"},"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/5278c3eb6bf5896417572b52adb6be9d26e92f65","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/a6efe6dbaaf504f5b3f8a5c3f711fe54e7dda0ba","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/364a66be2abdcd4fd426ffa44d9b8f40aafb3caa","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/120f7fa2008e3bd8b7680b4ab5df942decf60fd5","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/9c9c68d64fd3284f7097ed6ae057c8441f39fcd3","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/2e1480538ef60bfee5473dfe02b1ecbaf1a4aa0d","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/2000016bab499074e6248ea85aeea7dd762355d9","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/67b8bcbaed4777871bb0dcc888fb02a614a98ab1","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/06/msg00020.html","tags":["x_transferred"]}]},{"metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2024-26697","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-09-10T15:52:50.686290Z"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-09-11T17:33:29.604Z"}}]},"dataVersion":"5.2"}