]> git.ipfire.org Git - thirdparty/u-boot.git/commit
fs: btrfs: fix reading when length specified
authorSam Edwards <cfsworks@gmail.com>
Sat, 11 Nov 2023 15:19:04 +0000 (08:19 -0700)
committerTom Rini <trini@konsulko.com>
Thu, 16 Nov 2023 23:59:58 +0000 (18:59 -0500)
commit6d6ea52b629c384fb8605678b9003d2a077f9148
treeb721c9f59b665421dc5ef8ebcee9d38edf8cf12b
parentdfeb4f0d79351dc0256b45c7a9f26c752c4e0e09
fs: btrfs: fix reading when length specified

The btrfs read function limits the read length to ensure that it
and the read offset do not together exceed the size of the file.
However, this size was only being queried if the read length was
passed a value of zero (meaning "whole file"), and the size is
defaulted to 0 otherwise. This means the clamp will just zero out
the length if one is specified, preventing reading of the file.

Fix this by checking the file size unconditionally, and unifying
the default length and clamping logic as a single range check instead.

This bug was discovered when trying to boot Linux with initrd= via
'bootefi' from a btrfs partition. The EFI stub entered an infinite
loop of zero-length reads while trying to read the initrd, and the
boot process stalled indefinitely.

Signed-off-by: Sam Edwards <CFSworks@gmail.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
fs/btrfs/btrfs.c