Btrfs: add missing error code to BTRFS_IOC_INO_LOOKUP handler
authorFilipe David Borba Manana <fdmanana@gmail.com>
Wed, 14 Aug 2013 02:00:20 +0000 (03:00 +0100)
committerChris Mason <chris.mason@fusionio.com>
Sun, 1 Sep 2013 12:15:48 +0000 (08:15 -0400)
If the path doesn't fit in the input buffer, return ENAMETOOLONG
instead of returning with a success code (0) and a partially
filled and right justified buffer.

Also removed useless buffer pointer check outside the while loop.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/ioctl.c

index 317a984fe3c9bca6b9da6c9d17338864e12d82d2..f88eeea365f386d0b3ddc75f52dd11abcb0a30b8 100644 (file)
@@ -2030,8 +2030,10 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info,
                len = btrfs_inode_ref_name_len(l, iref);
                ptr -= len + 1;
                total_len += len + 1;
-               if (ptr < name)
+               if (ptr < name) {
+                       ret = -ENAMETOOLONG;
                        goto out;
+               }
 
                *(ptr + len) = '/';
                read_extent_buffer(l, ptr,(unsigned long)(iref + 1), len);
@@ -2044,8 +2046,6 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info,
                key.offset = (u64)-1;
                dirid = key.objectid;
        }
-       if (ptr < name)
-               goto out;
        memmove(name, ptr, total_len);
        name[total_len]='\0';
        ret = 0;