{"id":"CVE-2026-80631","state":"PUBLISHED","title":"btrfs: lzo: reject compressed segment that overflows the compressed input","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: lzo: reject compressed segment that overflows the compressed input\n\nlzo_decompress_bio() validates each on-disk segment length seg_len only\nagainst the workspace cbuf size, not against the compressed input size\n(compressed_len, the total folio bytes of the bio).  A crafted extent can\ncarry a segment whose seg_len passes the cbuf check but runs past the end\nof the bio, so copy_compressed_segment() walks off the last folio:\nget_current_folio() then returns the NULL folio from bio_next_folio(), and\nwith CONFIG_BTRFS_ASSERT disabled (default) folio_size(NULL) faults.\n\n BUG: KASAN: null-ptr-deref in lzo_decompress_bio (fs/btrfs/lzo.c:383)\n Read of size 8 at addr 0000000000000000 by task kworker/u8:1/29\n Workqueue: btrfs-endio simple_end_io_work\n  kasan_report (mm/kasan/report.c:590)\n  lzo_decompress_bio (fs/btrfs/lzo.c:383)\n  end_bbio_compressed_read (fs/btrfs/compression.c:1065)\n  btrfs_bio_end_io (fs/btrfs/bio.c:135)\n  btrfs_check_read_bio (fs/btrfs/bio.c:180 fs/btrfs/bio.c:285)\n  simple_end_io_work\n  process_one_work\n  worker_thread\n\nReject any segment whose payload would extend beyond compressed_len before\ncopying it, treating it as corruption like the other on-disk validation\nfailures in this function.","publishedAt":"2026-08-28T06:48:47.166Z","updatedAt":"2026-10-30T12:30:47.841Z","severity":{"score":7.5,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"e4325fb00e0c7269cb67f97d7148507787a57fd7","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"d9b17f9ce67d00e48fab62dcae197612a58f625f","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"1c48c8c807e49ac4f72819a89035fb8d2d094015","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"be7fb59512ffc2da5d98214a00117dfe9eccab78","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"1641d058adfbd50cf95d54581ed5d142ee82c07f","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"b0d27d43791b7a3057c3c4aedf9b4aa033d37c46","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/btrfs/lzo.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.15","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/btrfs/lzo.c"]}],"references":["https://git.kernel.org/stable/c/e4325fb00e0c7269cb67f97d7148507787a57fd7","https://git.kernel.org/stable/c/d9b17f9ce67d00e48fab62dcae197612a58f625f","https://git.kernel.org/stable/c/1c48c8c807e49ac4f72819a89035fb8d2d094015","https://git.kernel.org/stable/c/be7fb59512ffc2da5d98214a00117dfe9eccab78","https://git.kernel.org/stable/c/1641d058adfbd50cf95d54581ed5d142ee82c07f","https://git.kernel.org/stable/c/b0d27d43791b7a3057c3c4aedf9b4aa033d37c46"],"weaknesses":[],"ingestedAt":"2026-10-30T12:50:04.827Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/80xxx/CVE-2026-80631.json","commit":"1f312381e38164a43607eebab851b151dd16861e","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-80631","state":"PUBLISHED","datePublished":"2026-08-28T06:48:47.166Z","dateUpdated":"2026-10-30T12:30:47.841Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-08-26T14:34:25.776Z"},"containers":{"cna":{"title":"btrfs: lzo: reject compressed segment that overflows the compressed input","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: lzo: reject compressed segment that overflows the compressed input\n\nlzo_decompress_bio() validates each on-disk segment length seg_len only\nagainst the workspace cbuf size, not against the compressed input size\n(compressed_len, the total folio bytes of the bio).  A crafted extent can\ncarry a segment whose seg_len passes the cbuf check but runs past the end\nof the bio, so copy_compressed_segment() walks off the last folio:\nget_current_folio() then returns the NULL folio from bio_next_folio(), and\nwith CONFIG_BTRFS_ASSERT disabled (default) folio_size(NULL) faults.\n\n BUG: KASAN: null-ptr-deref in lzo_decompress_bio (fs/btrfs/lzo.c:383)\n Read of size 8 at addr 0000000000000000 by task kworker/u8:1/29\n Workqueue: btrfs-endio simple_end_io_work\n  kasan_report (mm/kasan/report.c:590)\n  lzo_decompress_bio (fs/btrfs/lzo.c:383)\n  end_bbio_compressed_read (fs/btrfs/compression.c:1065)\n  btrfs_bio_end_io (fs/btrfs/bio.c:135)\n  btrfs_check_read_bio (fs/btrfs/bio.c:180 fs/btrfs/bio.c:285)\n  simple_end_io_work\n  process_one_work\n  worker_thread\n\nReject any segment whose payload would extend beyond compressed_len before\ncopying it, treating it as corruption like the other on-disk validation\nfailures in this function."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"e4325fb00e0c7269cb67f97d7148507787a57fd7","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"d9b17f9ce67d00e48fab62dcae197612a58f625f","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"1c48c8c807e49ac4f72819a89035fb8d2d094015","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"be7fb59512ffc2da5d98214a00117dfe9eccab78","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"1641d058adfbd50cf95d54581ed5d142ee82c07f","versionType":"git"},{"version":"a6e66e6f8c1b685e11b778bef614480a9c1a5278","status":"affected","lessThan":"b0d27d43791b7a3057c3c4aedf9b4aa033d37c46","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/btrfs/lzo.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.15","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/btrfs/lzo.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/e4325fb00e0c7269cb67f97d7148507787a57fd7"},{"url":"https://git.kernel.org/stable/c/d9b17f9ce67d00e48fab62dcae197612a58f625f"},{"url":"https://git.kernel.org/stable/c/1c48c8c807e49ac4f72819a89035fb8d2d094015"},{"url":"https://git.kernel.org/stable/c/be7fb59512ffc2da5d98214a00117dfe9eccab78"},{"url":"https://git.kernel.org/stable/c/1641d058adfbd50cf95d54581ed5d142ee82c07f"},{"url":"https://git.kernel.org/stable/c/b0d27d43791b7a3057c3c4aedf9b4aa033d37c46"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","baseScore":7.5,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:N - On btrfs-backed NAS/cloud storage exported via nfsd or ksmbd, a remote client's read I/O is served by the server kernel through btrfs_do_readpage→btrfs_submit_compressed_read→lzo_decompress_bio, reaching the vulnerable LZO segment parser without local syscall access on the server.\nAC:L - A crafted on-disk LZO segment header with seg_len that passes the cbuf-size check but exceeds remaining compressed_len deterministically drives copy_compressed_segment past the last bio folio; no race, special memory layout, or rare kernel config is required.\nPR:N - Triggering needs only read access to btrfs content on an already-mounted/exported volume (e.g., NFS/ksmbd read); planting malformed LZO segment metadata is done via offline btrfs image crafting and does not require init-namespace root or a local account on the victim.\nUI:N - Exploitation is the attacker's own read against a btrfs volume that already contains the crafted LZO-compressed extent (backup restore, shared storage, or export); no separate victim mount, click, or plug-in action is needed beyond that read.\nS:U - Impact is a kernel NULL-pointer dereference and oops in the btrfs-endio workqueue on the host parsing attacker-supplied compressed data; this is standard host-kernel failure within one security authority, not VM escape or IOMMU bypass.\nC:N - The demonstrated failure is a null-ptr-deref read at address 0 in folio_size(NULL) when walking past the bio; unlike slab OOB reads in related btrfs LZO bugs, no adjacent kernel memory is disclosed before the fault.\nI:N - The bug faults during folio iteration before completing an out-of-bounds copy or decompression; there is no demonstrated or plausible kernel heap/stack write, control-flow hijack, or other integrity corruption beyond attacker-controlled on-disk bytes already in the bio.\nA:H - The NULL dereference in lzo_decompress_bio runs in btrfs-endio kworker context and produces a KASAN-reported kernel oops/panic; any process read (local or remote via NFS/ksmbd) of the crafted extent can repeatedly crash the host."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:30:47.841Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.12.114"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.18.57"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"7.1.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"7.2"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}