From 0db74b55dc721a50c9d1eed551f9b98b91d49837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 30 Jun 2022 17:40:51 +0200 Subject: [PATCH] btrfs: fix SMAP violation, reading inline uncompressed data should fix for #17061 Change-Id: I5973be6c443e8cf4460c6a3aca7b5378e90d717b Reviewed-on: https://review.haiku-os.org/c/haiku/+/5426 Reviewed-by: waddlesplash --- src/add-ons/kernel/file_systems/btrfs/Inode.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp index 8faa9f007c..d6e3fbfd9b 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp @@ -269,9 +269,10 @@ Inode::ReadAt(off_t pos, uint8* buffer, size_t* _length) } *_length = min_c(extent_data->Size() - diff, *_length); - if (compression == BTRFS_EXTENT_COMPRESS_NONE) - memcpy(buffer, extent_data->inline_data, *_length); - else if (compression == BTRFS_EXTENT_COMPRESS_ZLIB) { + if (compression == BTRFS_EXTENT_COMPRESS_NONE) { + if (user_memcpy(buffer, extent_data->inline_data, *_length) < B_OK) + return B_BAD_ADDRESS; + } else if (compression == BTRFS_EXTENT_COMPRESS_ZLIB) { char in[2048]; z_stream zStream = { (Bytef*)in, // next in