---
id: CVE-2026-64567
title: |-
  In the Linux kernel, the following vulnerability has been resolved:

  btrfs: reject free space cache with more entries than pages

  When loading a v1 free space cache, __load_free_space_cache() takes
  num_entries and num_bitmaps straight fr…
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  btrfs: reject free space cache with more entries than pages

  When loading a v1 free space cache, __load_free_space_cache() takes
  num_entries and num_bitmaps straight fr…
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
published: '2026-08-05'
updated: '2026-08-08'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-64567'
references:
  - url: 'https://git.kernel.org/stable/c/33878ba25e2638bc0c61623d7a05c9ca2b74c039'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/404a0b986e0b6e79738fdf1f0ebbbc43b9acd2a2'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/5e1b2ca6b34939e70fb0785e8222b53cf060016f'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/a2d8d5647ed854e38f941741aea45b9eb15a6350'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/f9fef131fa3f59b857217f522fa5ea430d1b707c'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/8ded74c654a982dc8581a17b0caa7fcedb20de69'
  - url: 'https://git.kernel.org/stable/c/c9c38066b6446e83668c041702bb639b0ca49363'
  - url: 'https://git.kernel.org/stable/c/094734c7aaa2b36751dc32480a680a4952685e78'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-64567.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-64567'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2511408'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-64567'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-64567'
  - url: >-
      https://lore.kernel.org/linux-cve-announce/2026080558-CVE-2026-64567-a7b8@gregkh/T
tags:
  - nvd
  - cve.org
  - csaf
  - vex
  - red-hat
  - score-dispute
epss: 0.00125
epssPercentile: 0.02178
ingestedAt: '2026-08-08T20:29:49.170Z'
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    8ded74c654a982dc8581a17b0caa7fcedb20de69
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    c9c38066b6446e83668c041702bb639b0ca49363
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    094734c7aaa2b36751dc32480a680a4952685e78
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    33878ba25e2638bc0c61623d7a05c9ca2b74c039
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    404a0b986e0b6e79738fdf1f0ebbbc43b9acd2a2
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    5e1b2ca6b34939e70fb0785e8222b53cf060016f
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    f9fef131fa3f59b857217f522fa5ea430d1b707c
  - >-
    Linux >= 5b0e95bf607ddd59b39f52d3d55e6581c817b530 <
    a2d8d5647ed854e38f941741aea45b9eb15a6350
  - Linux 3.2
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: total
  timestamp: '2026-10-16T15:42:59.944567Z'
cwe:
  - CWE-125
scores:
  nvd: 7.8
  vendor: 5.5
  cna: 7.8
---

## Overview

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

btrfs: reject free space cache with more entries than pages

When loading a v1 free space cache, __load_free_space_cache() takes
num_entries and num_bitmaps straight from the on-disk
btrfs_free_space_header. That header is stored in the tree_root under a key
with type 0, which the tree-checker has no case for, so neither count is
validated before the load trusts it.

The load loops num_entries times and maps the next page whenever the current
one runs out, going through io_ctl_check_crc() -> io_ctl_map_page(), which
does io_ctl->pages[io_ctl->index++]. But pages[] is allocated in
io_ctl_init() from the cache inode's i_size, not from num_entries:

	num_pages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
	io_ctl->pages = kcalloc(num_pages, sizeof(struct page *), GFP_NOFS);

So if num_entries claims more records than the pages can hold, io_ctl->index
runs off the end of pages[]. The write side never hits this because
io_ctl_add_entry() and io_ctl_add_bitmap() both stop once
io_ctl->index >= io_ctl->num_pages; the read side just never had the same
check.

To trigger it, take a clean cache (num_entries = <N> here), set num_entries
in the header to 0x10000, and fix up the leaf checksum so it still passes
the tree-checker. The cache inode has i_size = 65536, so num_pages is 16 and
pages[] is a 16-pointer (kmalloc-128) array. The load now tries to read
65536 entries, io_ctl->index walks up to 16, and pages[16] is read past the
array:

  BUG: KASAN: slab-out-of-bounds in io_ctl_check_crc (fs/btrfs/free-space-cache.c:420 fs/btrfs/free-space-cache.c:565)
  Read of size 8 at addr ffff88800c833a80 by task kworker/u8:3/58
   io_ctl_check_crc (fs/btrfs/free-space-cache.c:420 fs/btrfs/free-space-cache.c:565)
   __load_free_space_cache (fs/btrfs/free-space-cache.c:655 fs/btrfs/free-space-cache.c:820)
   load_free_space_cache (fs/btrfs/free-space-cache.c:1017)
   caching_thread (fs/btrfs/block-group.c:880)
   btrfs_work_helper (fs/btrfs/async-thread.c:312)
   process_one_work
   worker_thread
   kthread
   ret_from_fork

free-space-cache.c:420 is io_ctl_map_page(), inlined into io_ctl_check_crc()
at line 565, which is why that is the frame KASAN names. The out-of-bounds
slot is then treated as a struct page and handed to crc32c(), so the bad
read turns into a GP fault.

Add the missing check to io_ctl_check_crc(), which is where both the entry
loop and the bitmap loop end up. When num_entries is too large the load now
fails like any corrupt cache: __load_free_space_cache() drops it and rebuilds
the free space from the extent tree, so a valid cache is never rejected.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 7 · no fix planned: Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 7 · updated 2026-10-16 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-64567.json)
