diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-02-13 11:24:33 +0000 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-02-13 11:24:33 +0000 |
commit | 4305d024938113df5d73021a09eb2a991f54ca2f (patch) | |
tree | d9e7ecc9db14bcc1394607a9e6c644a8b93e9bea /cmds-inspect.c | |
parent | e693f0e4ffb1776a05b78264ee3d93d5f07efede (diff) |
New upstream release Closes: #849353, #817806, #854915, #845473
Diffstat (limited to 'cmds-inspect.c')
-rw-r--r-- | cmds-inspect.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/cmds-inspect.c b/cmds-inspect.c index 4b7cea07..5e58a284 100644 --- a/cmds-inspect.c +++ b/cmds-inspect.c @@ -146,7 +146,7 @@ static int cmd_inspect_logical_resolve(int argc, char **argv) struct btrfs_ioctl_logical_ino_args loi; struct btrfs_data_container *inodes; u64 size = 4096; - char full_path[4096]; + char full_path[PATH_MAX]; char *path_ptr; DIR *dirstream = NULL; @@ -207,7 +207,10 @@ static int cmd_inspect_logical_resolve(int argc, char **argv) ret = snprintf(full_path, bytes_left, "%s/", argv[optind+1]); path_ptr = full_path + ret; bytes_left -= ret + 1; - BUG_ON(bytes_left < 0); + if (bytes_left < 0) { + error("path buffer too small: %d bytes", bytes_left); + goto out; + } for (i = 0; i < inodes->elem_cnt; i += 3) { u64 inum = inodes->val[i]; @@ -230,8 +233,12 @@ static int cmd_inspect_logical_resolve(int argc, char **argv) path_ptr[-1] = '/'; ret = snprintf(path_ptr, bytes_left, "%s", name); - BUG_ON(ret >= bytes_left); free(name); + if (ret >= bytes_left) { + error("path buffer too small: %d bytes", + bytes_left - ret); + goto out; + } path_fd = btrfs_open_dir(full_path, &dirs, 1); if (path_fd < 0) { ret = -ENOENT; @@ -319,7 +326,7 @@ static int cmd_inspect_rootid(int argc, char **argv) goto out; } - ret = lookup_ino_rootid(fd, &rootid); + ret = lookup_path_rootid(fd, &rootid); if (ret) { error("failed to lookup root id: %s", strerror(-ret)); goto out; |