From 8c8cf8a2d8567d00a93963b1d59a7bdc8cede06a Mon Sep 17 00:00:00 2001 From: GeLiXin Date: Tue, 11 Oct 2016 06:30:22 +0800 Subject: [PATCH] Fix coverity defects: CID 147639 When array is passed as a parameter it degenerates into a pointer so the sizeof(path) in is_shorthand_path() and always get return value of 8, instead of the string length we want. Reviewed-by: Brian Behlendorf Signed-off-by: GeLiXin Closes #5198 --- cmd/zpool/zpool_vdev.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cmd/zpool/zpool_vdev.c b/cmd/zpool/zpool_vdev.c index b0db5e873..91fe01300 100644 --- a/cmd/zpool/zpool_vdev.c +++ b/cmd/zpool/zpool_vdev.c @@ -536,19 +536,19 @@ is_whole_disk(const char *path) * (minus the slice number). */ static int -is_shorthand_path(const char *arg, char *path, +is_shorthand_path(const char *arg, char *path, size_t path_size, struct stat64 *statbuf, boolean_t *wholedisk) { int error; - error = zfs_resolve_shortname(arg, path, MAXPATHLEN); + error = zfs_resolve_shortname(arg, path, path_size); if (error == 0) { *wholedisk = is_whole_disk(path); if (*wholedisk || (stat64(path, statbuf) == 0)) return (0); } - strlcpy(path, arg, sizeof (path)); + strlcpy(path, arg, path_size); memset(statbuf, 0, sizeof (*statbuf)); *wholedisk = B_FALSE; @@ -658,9 +658,10 @@ make_leaf_vdev(nvlist_t *props, const char *arg, uint64_t is_log) } /* After is_whole_disk() check restore original passed path */ - strlcpy(path, arg, MAXPATHLEN); + strlcpy(path, arg, sizeof (path)); } else { - err = is_shorthand_path(arg, path, &statbuf, &wholedisk); + err = is_shorthand_path(arg, path, sizeof (path), + &statbuf, &wholedisk); if (err != 0) { /* * If we got ENOENT, then the user gave us