summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-log.c
diff options
context:
space:
mode:
authorLiu Bo2016-06-06 21:01:23 +0200
committerDavid Sterba2016-06-17 18:32:40 +0200
commitc871b0f2fd27e7f9097d507f47de5270f88003b9 (patch)
tree76635b17aa4948c8a8af7f9da1a3a8225ac2d518 /fs/btrfs/tree-log.c
parentbtrfs: Use correct format specifier (diff)
downloadkernel-qcow2-linux-c871b0f2fd27e7f9097d507f47de5270f88003b9.tar.gz
kernel-qcow2-linux-c871b0f2fd27e7f9097d507f47de5270f88003b9.tar.xz
kernel-qcow2-linux-c871b0f2fd27e7f9097d507f47de5270f88003b9.zip
Btrfs: check if extent buffer is aligned to sectorsize
Thanks to fuzz testing, we can pass an invalid bytenr to extent buffer via alloc_extent_buffer(). An unaligned eb can have more pages than it should have, which ends up extent buffer's leak or some corrupted content in extent buffer. This adds a warning to let us quickly know what was happening. Now that alloc_extent_buffer() no more returns NULL, this changes its caller and callers of its caller to match with the new error handling. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/tree-log.c')
-rw-r--r--fs/btrfs/tree-log.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index aa8fed11f749..8ab1dc64cbba 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -2422,8 +2422,8 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
root_owner = btrfs_header_owner(parent);
next = btrfs_find_create_tree_block(root, bytenr);
- if (!next)
- return -ENOMEM;
+ if (IS_ERR(next))
+ return PTR_ERR(next);
if (*level == 1) {
ret = wc->process_func(root, next, wc, ptr_gen);