summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShyamsundarR <srangana@redhat.com>2018-08-20 16:01:47 -0400
committerShyamsundarR <srangana@redhat.com>2018-08-20 16:16:55 -0400
commit690ca8207269919e89341a9a49a3cff0e56e344b (patch)
tree1934044e0371be443607b0a0d3527cb6690ece89
parenta0fb796c233f30cbbde56768f7073e954e02dfcb (diff)
cli: Fix invalid access of option_str variable
In function cli_cmd_volume_statedump_options_parse if the wordcount of arguments is exactly 3, then option_str would remain NULL, and hence the function will generate a segmentation fault on the strstr check in its body. This can be triggered when we run the command, `gluster volume statedump <volname>` The fix is to check if option_str is non-NULL before use and also to pass in a duplicated empty string to the dict key "options" when this is NULL. Fixes: bz#1619423 Change-Id: Ic029ab60b64890d92c7a0876a638929495d3aa59 Signed-off-by: ShyamsundarR <srangana@redhat.com>
-rw-r--r--cli/src/cli-cmd-parser.c9
-rwxr-xr-xtests/bugs/cli/bug-1169302.t3
2 files changed, 10 insertions, 2 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
index 16b0cc81cd6..5472b3e8f38 100644
--- a/cli/src/cli-cmd-parser.c
+++ b/cli/src/cli-cmd-parser.c
@@ -3607,7 +3607,9 @@ cli_cmd_volume_statedump_options_parse (const char **words, int wordcount,
goto out;
}
}
- if ((strstr (option_str, "nfs")) && strstr (option_str, "quotad")) {
+ if (option_str &&
+ (strstr (option_str, "nfs")) &&
+ strstr (option_str, "quotad")) {
ret = -1;
goto out;
}
@@ -3619,7 +3621,10 @@ cli_cmd_volume_statedump_options_parse (const char **words, int wordcount,
goto out;
}
- ret = dict_set_dynstr (dict, "options", option_str);
+ /* dynamic string in dict is freed up when dict is freed up, and hence
+ if option_str is NULL pass in an duplicate empty string to the same */
+ ret = dict_set_dynstr (dict, "options",
+ (option_str ? option_str : gf_strdup("")));
if (ret)
goto out;
option_str = NULL;
diff --git a/tests/bugs/cli/bug-1169302.t b/tests/bugs/cli/bug-1169302.t
index 0bdaf56307e..19660e033a8 100755
--- a/tests/bugs/cli/bug-1169302.t
+++ b/tests/bugs/cli/bug-1169302.t
@@ -20,6 +20,9 @@ TEST $CLI_1 volume create $V0 $H1:$B1/$V0 $H2:$B2/$V0 $H3:$B3/$V0
TEST $CLI_1 volume start $V0
# test CLI parameter acceptance
+TEST $CLI_1 volume statedump $V0
+TEST $CLI_2 volume statedump $V0
+TEST $CLI_3 volume statedump $V0
TEST ! $CLI_1 volume statedump $V0 client $H2:0
TEST ! $CLI_2 volume statedump $V0 client $H2:-1
TEST $CLI_3 volume statedump $V0 client $H2:765