Commit 9b5546c3 authored by Qu Wenruo's avatar Qu Wenruo Committed by Tom Rini
Browse files

fs: btrfs: inode: handle uninitialized type before returning it



In btrfs_lookup_path() the local variable @type should always be updated
after we hit any file/dir.

But if @filename is NULL from the very beginning, then we don't
initialize it and return it directly.

To prevent such problem from happening, we initialize @type to
BTRFS_FT_UNKNOWN.
For normal execution route, it will get updated for each filename we
resolved.
Buf if we didn't find any path, we check if the type is still FT_UNKNOWN
and ret == 0. If true we know there is something wrong, just return
-EUCLEAN to inform the caller.

Reported-by: Coverity CID 312958
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarMarek Behún <marek.behun@nic.cz>
parent c49b0eb0
...@@ -251,7 +251,7 @@ int btrfs_lookup_path(struct btrfs_root *root, u64 ino, const char *filename, ...@@ -251,7 +251,7 @@ int btrfs_lookup_path(struct btrfs_root *root, u64 ino, const char *filename,
const char *cur = filename; const char *cur = filename;
u64 next_ino; u64 next_ino;
u8 next_type; u8 next_type;
u8 type; u8 type = BTRFS_FT_UNKNOWN;
int len; int len;
int ret = 0; int ret = 0;
...@@ -335,6 +335,10 @@ next: ...@@ -335,6 +335,10 @@ next:
cur += len; cur += len;
} }
/* We haven't found anything, but still get no error? */
if (type == BTRFS_FT_UNKNOWN && !ret)
ret = -EUCLEAN;
if (!ret) { if (!ret) {
*root_ret = root; *root_ret = root;
*ino_ret = ino; *ino_ret = ino;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment