diff options
author | Yaniv Kaul <ykaul@redhat.com> | 2018-08-21 20:41:20 +0300 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2018-09-07 16:17:18 +0000 |
commit | a880d6f6aa7a2979df8aa32b58f716ef0c578d3f (patch) | |
tree | bb95d28a14afc944c3755e612c05a44ca97a4979 /xlators/mgmt/glusterd/src/glusterd-handshake.c | |
parent | df697c68f6e1d676ae101e18b19f69e7241dc84a (diff) |
multiple xlators (mgmt): strncpy()->sprintf(), reduce strlen()'s
xlators/mgmt/glusterd/src/glusterd-geo-rep.c
xlators/mgmt/glusterd/src/glusterd-handshake.c
xlators/mgmt/glusterd/src/glusterd-sm.c
xlators/mgmt/glusterd/src/glusterd-store.c
xlators/mgmt/glusterd/src/glusterd-utils.c
xlators/mgmt/glusterd/src/glusterd-volgen.c
xlators/mgmt/glusterd/src/glusterd-volume-ops.c
xlators/mgmt/glusterd/src/glusterd.c
strncpy may not be very efficient for short strings copied into
a large buffer: If the length of src is less than n,
strncpy() writes additional null bytes to dest to ensure
that a total of n bytes are written.
Instead, use snprintf(). Try to ensure output is not
truncated.
Also:
- save the result of strlen() and re-use it when possible.
- move from strlen to SLEN (sizeof() ) for const strings.
Compile-tested only!
Change-Id: Ib5d001857236f43e41c4a51b5f48e1a33110aaeb
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-handshake.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handshake.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index ce0304a3d73..6b5940ce565 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handshake.c +++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c @@ -458,7 +458,9 @@ gotvolinfo: ret = sys_stat (path, &stbuf); if ((ret == -1) && (errno == ENOENT)) { - strncpy (dup_volid, volid_ptr, (PATH_MAX - 1)); + if (snprintf (dup_volid, PATH_MAX, "%s", volid_ptr) + >= PATH_MAX) + goto out; if (!strchr (dup_volid, '.')) { switch (volinfo->transport_type) { case GF_TRANSPORT_TCP: @@ -668,8 +670,16 @@ glusterd_create_missed_snap (glusterd_missed_snap_info *missed_snapinfo, ret = -1; goto out; } - strncpy (brickinfo->device_path, device, - sizeof(brickinfo->device_path) - 1); + if (snprintf (brickinfo->device_path , + sizeof (brickinfo->device_path), "%s", device) >= + sizeof (brickinfo->device_path)) { + gf_msg (this->name, GF_LOG_ERROR, ENXIO, + GD_MSG_SNAP_DEVICE_NAME_GET_FAIL, + "cannot copy the device_path " + "(device_path: %s)", brickinfo->device_path); + ret = -1; + goto out; + } /* Update the backend file-system type of snap brick in * snap volinfo. */ @@ -914,9 +924,19 @@ __server_getspec (rpcsvc_request_t *req) * support nfs style mount parameters for native gluster mount */ if (volume[0] == '/') - strncpy (peerinfo->volname, &volume[1], strlen(&volume[1])); + ret = snprintf (peerinfo->volname, sizeof (peerinfo->volname), + "%s", &volume[1]); else - strncpy (peerinfo->volname, volume, strlen(volume)); + ret = snprintf (peerinfo->volname, sizeof (peerinfo->volname), + "%s", volume); + if (ret < 0 || ret >= sizeof (peerinfo->volname)) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_VOLINFO_GET_FAIL, + "peerinfo->volname %s truncated or error occured: " + "(ret: %d)", peerinfo->volname, ret); + ret = -1; + goto fail; + } ret = glusterd_get_args_from_dict (&args, peerinfo, &brick_name); if (ret) { |