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. Signed-off-by: Liu Bo <bo.li....@oracle.com> --- fs/btrfs/extent_io.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index d247fc0..e601e0f 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4868,6 +4868,10 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, int uptodate = 1; int ret; + WARN_ONCE(!IS_ALIGNED(start, fs_info->tree_root->sectorsize), + KERN_WARNING "eb->start(%llu) is not aligned to root->sectorsize(%u)\n", + start, fs_info->tree_root->sectorsize); + eb = find_extent_buffer(fs_info, start); if (eb) return eb; -- 2.5.5 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html