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: Qu Wenruo <wqu@suse.com> Reviewed-by: Marek Behún <marek.behun@nic.cz>
This commit is contained in:
parent
c49b0eb034
commit
9b5546c37a
@ -251,7 +251,7 @@ int btrfs_lookup_path(struct btrfs_root *root, u64 ino, const char *filename,
|
||||
const char *cur = filename;
|
||||
u64 next_ino;
|
||||
u8 next_type;
|
||||
u8 type;
|
||||
u8 type = BTRFS_FT_UNKNOWN;
|
||||
int len;
|
||||
int ret = 0;
|
||||
|
||||
@ -335,6 +335,10 @@ next:
|
||||
cur += len;
|
||||
}
|
||||
|
||||
/* We haven't found anything, but still get no error? */
|
||||
if (type == BTRFS_FT_UNKNOWN && !ret)
|
||||
ret = -EUCLEAN;
|
||||
|
||||
if (!ret) {
|
||||
*root_ret = root;
|
||||
*ino_ret = ino;
|
||||
|
Loading…
Reference in New Issue
Block a user