aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKinga Tanska <kinga.tanska@intel.com>2022-07-14 09:02:10 +0200
committerJes Sorensen <jsorensen@fb.com>2022-07-28 17:10:22 -0400
commitc8d1c398505b62d9129a4e711f17e4469f4327ff (patch)
tree780e9e27726b48eff4a1411199d8397201a4189f
parent751757620afb25a4c02746bf8368a7b5f22352ec (diff)
downloadmdadm-c8d1c398505b62d9129a4e711f17e4469f4327ff.tar.gz
Monitor: use devname as char array instead of pointer
Device name wasn't filled properly due to incorrect use of strcpy. Strcpy was used twice. Firstly to fill devname with "/dev/md/" and then to add chosen name. First strcpy result was overwritten by second one (as a result <device_name> instead of "/dev/md/<device_name>" was assigned). This commit changes this implementation to use snprintf and devname with fixed size. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r--Monitor.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/Monitor.c b/Monitor.c
index 6ca1ebe5..a5b11ae2 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -190,9 +190,11 @@ int Monitor(struct mddev_dev *devlist,
if (mdlist->devname[0] == '/')
st->devname = xstrdup(mdlist->devname);
else {
- st->devname = xmalloc(8+strlen(mdlist->devname)+1);
- strcpy(strcpy(st->devname, "/dev/md/"),
- mdlist->devname);
+ /* length of "/dev/md/" + device name + terminating byte */
+ size_t _len = sizeof("/dev/md/") + strnlen(mdlist->devname, PATH_MAX);
+
+ st->devname = xcalloc(_len, sizeof(char));
+ snprintf(st->devname, _len, "/dev/md/%s", mdlist->devname);
}
if (!is_mddev(mdlist->devname))
return 1;