Filipe Manana
91567128a9
btrfs: fix wrong address when faulting in pages in the search ioctl
...
commit 1c78544eaa4660096aeb6a57ec82b42cdb3bfe5a upstream.
When faulting in the pages for the user supplied buffer for the search
ioctl, we are passing only the base address of the buffer to the function
fault_in_pages_writeable(). This means that after the first iteration of
the while loop that searches for leaves, when we have a non-zero offset,
stored in 'sk_offset', we try to fault in a wrong page range.
So fix this by adding the offset in 'sk_offset' to the base address of the
user supplied buffer when calling fault_in_pages_writeable().
Several users have reported that the applications compsize and bees have
started to operate incorrectly since commit a48b73eca4ceb9 ("btrfs: fix
potential deadlock in the search ioctl") was added to stable trees, and
these applications make heavy use of the search ioctls. This fixes their
issues.
Link: https://lore.kernel.org/linux-btrfs/632b888d-a3c3-b085-cdf5-f9bb61017d92@lechevalier.se/
Link: https://github.com/kilobyte/compsize/issues/34
Fixes: a48b73eca4ceb9 ("btrfs: fix potential deadlock in the search ioctl")
CC: stable@vger.kernel.org # 4.4+
Tested-by: A L <mail@lechevalier.se>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-17 13:45:28 +02:00
..
tests
Btrfs: fix selftests failure due to uninitialized i_mode in test inodes
2020-08-05 10:06:00 +02:00
acl.c
Btrfs: setup a nofs context for memory allocation at __btrfs_set_acl
2019-03-23 20:10:00 +01:00
async-thread.c
Btrfs: fix crash during unmount due to race with delayed inode workers
2020-04-17 10:48:49 +02:00
async-thread.h
Btrfs: fix crash during unmount due to race with delayed inode workers
2020-04-17 10:48:49 +02:00
backref.c
btrfs: fix double free on ulist after backref resolution failure
2020-07-29 10:16:47 +02:00
backref.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
btrfs_inode.h
btrfs: use tagged writepage to mitigate livelock of snapshot
2019-02-12 19:47:11 +01:00
check-integrity.c
btrfs: fix possible NULL-pointer dereference in integrity checks
2020-02-24 08:34:49 +01:00
check-integrity.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
compression.c
btrfs: correctly validate compression type
2019-09-16 08:22:19 +02:00
compression.h
btrfs: correctly validate compression type
2019-09-16 08:22:19 +02:00
ctree.c
btrfs: set the lockdep class for log tree extent buffers
2020-09-09 19:04:29 +02:00
ctree.h
btrfs: export helpers for subvolume name/id resolution
2020-08-26 10:30:58 +02:00
dedupe.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
delayed-inode.c
btrfs: use nofs allocations for running delayed items
2020-04-17 10:48:54 +02:00
delayed-inode.h
btrfs: Remove fs_info from btrfs_delete_delayed_dir_index
2018-08-06 13:13:00 +02:00
delayed-ref.c
Btrfs: fix race between adding and putting tree mod seq elements and nodes
2020-02-11 04:34:06 -08:00
delayed-ref.h
btrfs: Remove fs_info from btrfs_add_delayed_data_ref
2018-08-06 13:12:34 +02:00
dev-replace.c
btrfs: merge btrfs_find_device and find_device
2020-06-22 09:04:59 +02:00
dev-replace.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
dir-item.c
btrfs: Remove fs_info from btrfs_insert_delayed_dir_index
2018-08-06 13:13:00 +02:00
disk-io.c
btrfs: fix space cache memory leak after transaction abort
2020-09-03 11:24:26 +02:00
disk-io.h
btrfs: Check the first key and level for cached extent buffer
2019-05-22 07:37:42 +02:00
export.c
btrfs: export helpers for subvolume name/id resolution
2020-08-26 10:30:58 +02:00
export.h
btrfs: export helpers for subvolume name/id resolution
2020-08-26 10:30:58 +02:00
extent-tree.c
btrfs: require only sector size alignment for parent eb bytenr
2020-09-17 13:45:28 +02:00
extent_io.c
btrfs: fix potential deadlock in the search ioctl
2020-09-09 19:04:29 +02:00
extent_io.h
btrfs: fix potential deadlock in the search ioctl
2020-09-09 19:04:29 +02:00
extent_map.c
Btrfs: fix race between using extent maps and merging them
2020-02-19 19:51:56 +01:00
extent_map.h
btrfs: use fs_info for btrfs_handle_em_exist tracepoint
2018-05-28 18:07:17 +02:00
file-item.c
btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums
2020-06-22 09:05:11 +02:00
file.c
btrfs: file: reserve qgroup space after the hole punch range is locked
2020-09-03 11:24:22 +02:00
free-space-cache.c
btrfs: fix space cache memory leak after transaction abort
2020-09-03 11:24:26 +02:00
free-space-cache.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
free-space-tree.c
btrfs: Remove fs_info from btrfs_del_root
2018-08-06 13:13:00 +02:00
free-space-tree.h
btrfs: Remove fs_info argument from add_to_free_space_tree
2018-05-28 18:07:36 +02:00
inode-item.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00
inode-map.c
Btrfs: fix inode cache waiters hanging on path allocation failure
2020-01-27 14:51:12 +01:00
inode-map.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
inode.c
btrfs: inode: fix NULL pointer dereference if inode doesn't need compression
2020-08-26 10:30:58 +02:00
ioctl.c
btrfs: fix wrong address when faulting in pages in the search ioctl
2020-09-17 13:45:28 +02:00
Kconfig
btrfs: add SPDX header to Kconfig
2018-04-12 16:29:55 +02:00
locking.c
btrfs: replace waitqueue_actvie with cond_wake_up
2018-05-28 18:23:09 +02:00
locking.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
lzo.c
btrfs: lzo: Harden inline lzo compressed extent decompression
2018-05-30 16:46:43 +02:00
Makefile
btrfs: Remove custom crc32c init code
2018-03-26 15:09:39 +02:00
math.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
ordered-data.c
Btrfs: fix btrfs_wait_ordered_range() so that it waits for all ordered extents
2020-02-28 16:38:58 +01:00
ordered-data.h
btrfs: remove remaing full_sync logic from btrfs_sync_file
2018-08-06 13:12:31 +02:00
orphan.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00
print-tree.c
btrfs: require only sector size alignment for parent eb bytenr
2020-09-17 13:45:28 +02:00
print-tree.h
btrfs: print-tree: debugging output enhancement
2018-04-20 19:18:16 +02:00
props.c
btrfs: correctly validate compression type
2019-09-16 08:22:19 +02:00
props.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
qgroup.c
btrfs: qgroup: mark qgroup inconsistent if we're inherting snapshot to a new qgroup
2020-06-22 09:05:19 +02:00
qgroup.h
btrfs: qgroup: Avoid calling qgroup functions if qgroup is not enabled
2018-11-13 11:08:56 -08:00
raid56.c
btrfs: raid56: properly unmap parity page in finish_parity_scrub()
2019-04-03 06:26:21 +02:00
raid56.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
rcu-string.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
reada.c
btrfs: don't prematurely free work in reada_start_machine_worker()
2019-12-31 16:36:16 +01:00
ref-verify.c
btrfs: ref-verify: fix memory leak in add_block_entry
2020-08-21 11:05:30 +02:00
ref-verify.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
relocation.c
btrfs: check commit root generation in should_ignore_root
2020-04-21 09:03:09 +02:00
root-tree.c
btrfs: do not delete mismatched root refs
2020-01-23 08:21:31 +01:00
scrub.c
btrfs: merge btrfs_find_device and find_device
2020-06-22 09:04:59 +02:00
send.c
btrfs: send: emit file capabilities after chown
2020-06-22 09:05:21 +02:00
send.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
struct-funcs.c
btrfs: prune unused includes
2018-08-06 13:12:43 +02:00
super.c
btrfs: reset compression level for lzo on remount
2020-09-03 11:24:26 +02:00
sysfs.c
btrfs: sysfs: use NOFS for device creation
2020-08-26 10:30:59 +02:00
sysfs.h
btrfs: sysfs: Use enum/define value for feature array definitions
2018-05-28 18:23:39 +02:00
transaction.c
btrfs: transaction: Avoid deadlock due to bad initialization timing of fs_info::journal_info
2020-05-06 08:13:33 +02:00
transaction.h
Btrfs: fix deadlock between fiemap and transaction commits
2019-08-25 10:47:54 +02:00
tree-checker.c
btrfs: tree-checker: Check level for leaves and nodes
2020-06-22 09:05:01 +02:00
tree-checker.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
tree-defrag.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00
tree-log.c
btrfs: check the right error variable in btrfs_del_dir_entries_in_log
2020-09-03 11:24:31 +02:00
tree-log.h
Btrfs: sync log after logging new name
2018-08-23 17:37:26 +02:00
ulist.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00
ulist.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
uuid-tree.c
btrfs: handle ENOENT in btrfs_uuid_tree_iterate
2019-12-31 16:34:44 +01:00
volumes.c
btrfs: fix lockdep splat in add_missing_dev
2020-09-17 13:45:28 +02:00
volumes.h
btrfs: merge btrfs_find_device and find_device
2020-06-22 09:04:59 +02:00
xattr.c
Btrfs: use nofs context when initializing security xattrs to avoid deadlock
2019-01-16 22:04:37 +01:00
xattr.h
btrfs: replace GPL boilerplate by SPDX -- headers
2018-04-12 16:29:46 +02:00
zlib.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00
zstd.c
btrfs: replace GPL boilerplate by SPDX -- sources
2018-04-12 16:29:51 +02:00