lkml.org 
[lkml]   [2024]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 17/20] btrfs: export: handle invalid inode or root reference in btrfs_get_parent()
    Date
    From: David Sterba <dsterba@suse.com>

    [ Upstream commit 26b66d1d366a375745755ca7365f67110bbf6bd5 ]

    The get_parent handler looks up a parent of a given dentry, this can be
    either a subvolume or a directory. The search is set up with offset -1
    but it's never expected to find such item, as it would break allowed
    range of inode number or a root id. This means it's a corruption (ext4
    also returns this error code).

    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/btrfs/export.c | 9 ++++++++-
    1 file changed, 8 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c
    index fab7eb76e53b2..58b0f04d7123f 100644
    --- a/fs/btrfs/export.c
    +++ b/fs/btrfs/export.c
    @@ -161,8 +161,15 @@ struct dentry *btrfs_get_parent(struct dentry *child)
    ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
    if (ret < 0)
    goto fail;
    + if (ret == 0) {
    + /*
    + * Key with offset of -1 found, there would have to exist an
    + * inode with such number or a root with such id.
    + */
    + ret = -EUCLEAN;
    + goto fail;
    + }

    - BUG_ON(ret == 0); /* Key with offset of -1 found */
    if (path->slots[0] == 0) {
    ret = -ENOENT;
    goto fail;
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:15    [W:2.309 / U:0.372 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site