Re: [PATCH] btrfs: lzo: reject inline extents without both headers
From: Qu Wenruo
Date: Tue Jul 14 2026 - 04:39:43 EST
在 2026/7/14 16:40, David Lee 写道:
inline Btrfs LZO payload shorter than two LZO headers.
Fix the validation or lifetime rule at the vulnerable boundary so malformed
or racing input cannot reach the faulting path.
Signed-off-by: David Lee <david.lee@xxxxxxxxxxxxxxx>
Assisted-by: Codex:gpt-5.5
---
Trail of Bits has a reproducer for this bug demonstrating Kernel Panic which can be shared further if needed.
fs/btrfs/lzo.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/btrfs/lzo.c b/fs/btrfs/lzo.c
--- a/fs/btrfs/lzo.c
+++ b/fs/btrfs/lzo.c
@@ -552,7 +552,8 @@ int lzo_decompress(struct list_head *ws, const u8 *data_in,
size_t max_segment_len = workspace_buf_length(fs_info);
int ret;
- if (unlikely(srclen < LZO_LEN || srclen > max_segment_len + LZO_LEN * 2))
+ if (unlikely(srclen < LZO_LEN * 2 ||
srclen == LZO_LEN * 2 is also invalid, as that means the lzo payload is empty.
Also your base is a little too old.
The latest for-next branch has extra error messages, thus your patch doesn't apply cleanly.
Please rebase to the latest for-next branch:
https://github.com/btrfs/linux.git for-next
Otherwise the fix looks good to me.
Thanks,
Qu
+ srclen > max_segment_len + LZO_LEN * 2))
return -EUCLEAN;
in_len = get_unaligned_le32(data_in);