From dba81543259bbb4b590918477156dfb68812dd8a Mon Sep 17 00:00:00 2001
From: Amar Tumballi <amarts@redhat.com>
Date: Tue, 21 Aug 2018 19:33:08 +0530
Subject: [PATCH 356/359] io-stats: sanitize the dump path further
In the previous patch, while addressing the comment on review,
a "/" at the end of the "/var/run/gluster" directory was missed out.
Also noticed that the logic to convert the '/' to '-' for sanity
of the path needed to change.
Testing: Ran the tests which marked the bug as FailedQA,
and also validated the originally reported issue, and now we see
a specific log when not so clean path is given as the value to
this xattr.
BUG: 1605086
Change-Id: Ia8397ecd5841a72d0daca0106557e1226c293e35
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/147644
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Tested-by: Atin Mukherjee <amukherj@redhat.com>
---
xlators/debug/io-stats/src/io-stats.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c
index 868890f..16a11df 100644
--- a/xlators/debug/io-stats/src/io-stats.c
+++ b/xlators/debug/io-stats/src/io-stats.c
@@ -3014,7 +3014,7 @@ conditional_dump (dict_t *dict, char *key, data_t *value, void *data)
char *filename = NULL;
FILE *logfp = NULL;
struct ios_dump_args args = {0};
- int pid, namelen;
+ int pid, namelen, dirlen;
char dump_key[100];
char *slash_ptr = NULL;
char *path_in_value = NULL;
@@ -3039,16 +3039,17 @@ conditional_dump (dict_t *dict, char *key, data_t *value, void *data)
"%s: no \"../\" allowed in path", path_in_value);
return -1;
}
- namelen = (strlen (IOS_STATS_DUMP_DIR) + value->len +
- strlen (this->name) + 2); /* '.' and '\0' */
+ dirlen = strlen (IOS_STATS_DUMP_DIR);
+ namelen = (dirlen + value->len + strlen (this->name) + 3);
+ /* +3 for '/', '.' and '\0' added in snprintf below*/
filename = alloca0 (namelen);
- snprintf (filename, namelen, "%s%s.%s", IOS_STATS_DUMP_DIR,
+ snprintf (filename, namelen, "%s/%s.%s", IOS_STATS_DUMP_DIR,
path_in_value, this->name);
/* convert any slashes to '-' so that fopen works correctly */
- slash_ptr = strchr (filename + value->len + 1, '/');
+ slash_ptr = strchr (filename + dirlen + 1, '/');
while (slash_ptr) {
*slash_ptr = '-';
slash_ptr = strchr (slash_ptr, '/');
--
1.8.3.1