diff options
author | Liu Bo <bo.li.liu@oracle.com> | 2016-06-06 12:01:23 -0700 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-06-17 18:32:40 +0200 |
commit | c871b0f2fd27e7f9097d507f47de5270f88003b9 (patch) | |
tree | 76635b17aa4948c8a8af7f9da1a3a8225ac2d518 /fs/btrfs/ctree.c | |
parent | 16ff4b454f1b56e8d89a9075feed0dd6ac510c3d (diff) | |
download | op-kernel-dev-c871b0f2fd27e7f9097d507f47de5270f88003b9.zip op-kernel-dev-c871b0f2fd27e7f9097d507f47de5270f88003b9.tar.gz |
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/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 4602568..827c949 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2512,6 +2512,8 @@ read_block_for_search(struct btrfs_trans_handle *trans, if (!btrfs_buffer_uptodate(tmp, 0, 0)) ret = -EIO; free_extent_buffer(tmp); + } else { + ret = PTR_ERR(tmp); } return ret; } |