Skip to content
  • Sam Edwards's avatar
    fs: btrfs: fix reading when length specified · 6d6ea52b
    Sam Edwards authored and Tom Rini's avatar Tom Rini committed
    
    
    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: default avatarSam Edwards <CFSworks@gmail.com>
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    6d6ea52b