lkml.org 
[lkml]   [2018]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 068/101] btrfs: Check if item pointer overlaps with the item itself
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Qu Wenruo <quwenruo.btrfs@gmx.com>

    commit 7f43d4affb2a254d421ab20b0cf65ac2569909fb upstream.

    Function check_leaf() checks if any item pointer points outside of the
    leaf, but it doesn't check if the pointer overlaps with the item itself.

    Normally only the last item may be the victim, but adding such check is
    never a bad idea anyway.

    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/btrfs/disk-io.c | 7 +++++++
    1 file changed, 7 insertions(+)

    --- a/fs/btrfs/disk-io.c
    +++ b/fs/btrfs/disk-io.c
    @@ -637,6 +637,13 @@ static noinline int check_leaf(struct bt
    return -EUCLEAN;
    }

    + /* Also check if the item pointer overlaps with btrfs item. */
    + if (btrfs_item_nr_offset(slot) + sizeof(struct btrfs_item) >
    + btrfs_item_ptr_offset(leaf, slot)) {
    + CORRUPT("slot overlap with its data", leaf, root, slot);
    + return -EUCLEAN;
    + }
    +
    prev_key.objectid = key.objectid;
    prev_key.type = key.type;
    prev_key.offset = key.offset;

    \
     
     \ /
      Last update: 2018-12-06 15:51    [W:2.932 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site