Files
linux-stable-mirror/include/uapi/linux
You-Kai ZhengandDavid Sterba b95181f392 btrfs: declare btrfs_ioctl_search_args_v2::buf as __u8
The variable-sized buffer buf in struct btrfs_ioctl_search_args_v2 is
declared as __u64[], but it holds a packed byte stream of search results,
where all offsets into the buffer are in bytes.

Declaring buf as __u64[] makes it easy for user space to write incorrect
pointer arithmetic: adding a byte offset directly to a __u64 pointer
scales the offset by 8, landing at byte position offset*8 instead of
offset.

This recently caused an infinite loop in btrfs-progs: the accessor read
all-zero data from misaddressed items, which fed zeroed search keys back
into the ioctl loop and spun forever. The issue was worked around at the
time by disabling TREE_SEARCH_V2 entirely in btrfs-progs (d73e69824854:
"btrfs-progs: temporarily disable usage of v2 of search tree ioctl").

The kernel side already treats buf as a byte buffer, so change the
declaration to __u8[] to match the actual semantics and prevent similar
misuse in user space. The change is ABI compatible: both the structure size
and alignment are unchanged.

Fixes: cc68a8a5a4 ("btrfs: new ioctl TREE_SEARCH_V2")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: You-Kai Zheng <ykzheng@synology.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-07-14 07:02:39 +02:00
..
2026-03-30 16:55:36 +02:00
2026-03-05 22:16:08 -05:00
2026-03-19 11:38:24 -06:00
2026-03-18 09:59:57 +00:00
2026-03-05 16:26:52 +01:00
2026-03-12 13:33:54 +01:00
2026-02-06 20:35:06 -08:00
2026-04-09 18:21:45 -07:00
2026-02-27 19:21:56 -08:00
2026-03-31 07:04:00 -06:00
2026-02-09 12:21:32 -05:00