diff options
author | ShyamsundarR <srangana@redhat.com> | 2018-07-26 13:32:52 -0400 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2018-07-27 09:06:09 +0000 |
commit | 405c6e8a8a64f29b37c154091e1677ef67440e73 (patch) | |
tree | f1152850ed93c05d8b323e1e6f9167678234add9 /xlators | |
parent | 46a2cbfb73f7fade3426fd07c5830e9fac82883c (diff) |
stack: Reduce stack usage for local variables to store tmpfile names
This patch moves stack based PATH_MAX allocations for tmpfile
names, to heap allocated names instead. Reducing the impact on
stack space used and accruing benefits thereof.
Change-Id: I646d9cb091018de6768b3523902788fa2ba14d96
Updates: bz#1193929
Signed-off-by: ShyamsundarR <srangana@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c | 37 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-svc-helper.c | 23 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c | 21 |
3 files changed, 61 insertions, 20 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c b/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c index 781cdbf6818..72baa3424e9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c +++ b/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c @@ -90,7 +90,7 @@ glusterd_is_gfproxyd_enabled (glusterd_volinfo_t *volinfo) static int glusterd_svc_get_gfproxyd_volfile (glusterd_volinfo_t *volinfo, char *svc_name, - char *orgvol, char *tmpvol, int path_len) + char *orgvol, char **tmpvol, int path_len) { int tmp_fd = -1; int ret = -1; @@ -99,23 +99,31 @@ glusterd_svc_get_gfproxyd_volfile (glusterd_volinfo_t *volinfo, char *svc_name, glusterd_svc_build_gfproxyd_volfile_path (volinfo, orgvol, path_len); - snprintf (tmpvol, path_len, "/tmp/g%s-XXXXXX", svc_name); + ret = gf_asprintf(tmpvol, "/tmp/g%s-XXXXXX", svc_name); + if (ret < 0) { + goto out; + } /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ - tmp_fd = mkstemp (tmpvol); + tmp_fd = mkstemp (*tmpvol); if (tmp_fd < 0) { gf_msg ("glusterd", GF_LOG_WARNING, errno, GD_MSG_FILE_OP_FAILED, "Unable to create temp file" - " %s:(%s)", tmpvol, strerror (errno)); + " %s:(%s)", *tmpvol, strerror (errno)); + ret = -1; goto out; } need_unlink = 1; - ret = glusterd_build_gfproxyd_volfile (volinfo, tmpvol); - + ret = glusterd_build_gfproxyd_volfile (volinfo, *tmpvol); out: if (need_unlink && ret < 0) - sys_unlink (tmpvol); + sys_unlink (*tmpvol); + + if ((ret < 0) && (*tmpvol != NULL)) { + GF_FREE(*tmpvol); + *tmpvol = NULL; + } if (tmp_fd >= 0) sys_close (tmp_fd); @@ -129,14 +137,14 @@ glusterd_svc_check_gfproxyd_volfile_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; int ret = -1; int need_unlink = 0; GF_VALIDATE_OR_GOTO ("glusterd", identical, out); ret = glusterd_svc_get_gfproxyd_volfile (volinfo, svc_name, orgvol, - tmpvol, PATH_MAX); + &tmpvol, PATH_MAX); if (ret) goto out; @@ -150,6 +158,9 @@ out: if (need_unlink) sys_unlink (tmpvol); + if (tmpvol != NULL) + GF_FREE (tmpvol); + return ret; } @@ -159,14 +170,14 @@ glusterd_svc_check_gfproxyd_topology_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; int ret = -1; int tmpclean = 0; GF_VALIDATE_OR_GOTO ("glusterd", identical, out); ret = glusterd_svc_get_gfproxyd_volfile (volinfo, svc_name, orgvol, - tmpvol, PATH_MAX); + &tmpvol, PATH_MAX); if (ret) goto out; @@ -178,6 +189,10 @@ glusterd_svc_check_gfproxyd_topology_identical (char *svc_name, out: if (tmpclean) sys_unlink (tmpvol); + + if (tmpvol != NULL) + GF_FREE (tmpvol); + return ret; } diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c index abf979eada5..40726dbfb3e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c +++ b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c @@ -162,7 +162,7 @@ glusterd_svc_check_volfile_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; glusterd_conf_t *conf = NULL; xlator_t *this = NULL; int ret = -1; @@ -178,7 +178,10 @@ glusterd_svc_check_volfile_identical (char *svc_name, glusterd_svc_build_volfile_path (svc_name, conf->workdir, orgvol, sizeof (orgvol)); - snprintf (tmpvol, sizeof (tmpvol), "/tmp/g%s-XXXXXX", svc_name); + ret = gf_asprintf(&tmpvol, "/tmp/g%s-XXXXXX", svc_name); + if (ret < 0) { + goto out; + } /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmp_fd = mkstemp (tmpvol); @@ -186,6 +189,7 @@ glusterd_svc_check_volfile_identical (char *svc_name, gf_msg (this->name, GF_LOG_WARNING, errno, GD_MSG_FILE_OP_FAILED, "Unable to create temp file" " %s:(%s)", tmpvol, strerror (errno)); + ret = -1; goto out; } @@ -196,11 +200,13 @@ glusterd_svc_check_volfile_identical (char *svc_name, goto out; ret = glusterd_check_files_identical (orgvol, tmpvol, identical); - out: if (need_unlink) sys_unlink (tmpvol); + if (tmpvol != NULL) + GF_FREE(tmpvol); + if (tmp_fd >= 0) sys_close (tmp_fd); @@ -213,7 +219,7 @@ glusterd_svc_check_topology_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; glusterd_conf_t *conf = NULL; xlator_t *this = THIS; int ret = -1; @@ -231,13 +237,18 @@ glusterd_svc_check_topology_identical (char *svc_name, orgvol, sizeof (orgvol)); /* Create the temporary volfile */ - snprintf (tmpvol, sizeof (tmpvol), "/tmp/g%s-XXXXXX", svc_name); + ret = gf_asprintf(&tmpvol, "/tmp/g%s-XXXXXX", svc_name); + if (ret < 0) { + goto out; + } + /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmpfd = mkstemp (tmpvol); if (tmpfd < 0) { gf_msg (this->name, GF_LOG_WARNING, errno, GD_MSG_FILE_OP_FAILED, "Unable to create temp file" " %s:(%s)", tmpvol, strerror (errno)); + ret = -1; goto out; } @@ -256,5 +267,7 @@ out: sys_close (tmpfd); if (tmpclean) sys_unlink (tmpvol); + if (tmpvol != NULL) + GF_FREE(tmpvol); return ret; } diff --git a/xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c b/xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c index 8b54ac10594..b8e373e7e83 100644 --- a/xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c +++ b/xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c @@ -89,7 +89,7 @@ glusterd_svc_check_tier_volfile_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; xlator_t *this = NULL; int ret = -1; int need_unlink = 0; @@ -103,7 +103,10 @@ glusterd_svc_check_tier_volfile_identical (char *svc_name, glusterd_svc_build_tierd_volfile_path (volinfo, orgvol, sizeof (orgvol)); - snprintf (tmpvol, sizeof (tmpvol), "/tmp/g%s-XXXXXX", svc_name); + ret = gf_asprintf(&tmpvol, "/tmp/g%s-XXXXXX", svc_name); + if (ret < 0) { + goto out; + } /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmp_fd = mkstemp (tmpvol); @@ -111,6 +114,7 @@ glusterd_svc_check_tier_volfile_identical (char *svc_name, gf_msg (this->name, GF_LOG_WARNING, errno, GD_MSG_FILE_OP_FAILED, "Unable to create temp file" " %s:(%s)", tmpvol, strerror (errno)); + ret = -1; goto out; } @@ -128,6 +132,9 @@ out: if (need_unlink) sys_unlink (tmpvol); + if (tmpvol != NULL) + GF_FREE(tmpvol); + if (tmp_fd >= 0) sys_close (tmp_fd); @@ -140,7 +147,7 @@ glusterd_svc_check_tier_topology_identical (char *svc_name, gf_boolean_t *identical) { char orgvol[PATH_MAX] = {0,}; - char tmpvol[PATH_MAX] = {0,}; + char *tmpvol = NULL; glusterd_conf_t *conf = NULL; xlator_t *this = THIS; int ret = -1; @@ -157,7 +164,10 @@ glusterd_svc_check_tier_topology_identical (char *svc_name, glusterd_svc_build_tierd_volfile_path (volinfo, orgvol, sizeof (orgvol)); - snprintf (tmpvol, sizeof (tmpvol), "/tmp/g%s-XXXXXX", svc_name); + ret = gf_asprintf(&tmpvol, "/tmp/g%s-XXXXXX", svc_name); + if (ret < 0) { + goto out; + } /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmpfd = mkstemp (tmpvol); @@ -165,6 +175,7 @@ glusterd_svc_check_tier_topology_identical (char *svc_name, gf_msg (this->name, GF_LOG_WARNING, errno, GD_MSG_FILE_OP_FAILED, "Unable to create temp file" " %s:(%s)", tmpvol, strerror (errno)); + ret = -1; goto out; } @@ -181,5 +192,7 @@ out: sys_close (tmpfd); if (tmpclean) sys_unlink (tmpvol); + if (tmpvol != NULL) + GF_FREE(tmpvol); return ret; } |