Blame SOURCES/0029-Monitor-use-devname-as-char-array-instead-of-pointer.patch

fdf7c0
From c8d1c398505b62d9129a4e711f17e4469f4327ff Mon Sep 17 00:00:00 2001
fdf7c0
From: Kinga Tanska <kinga.tanska@intel.com>
fdf7c0
Date: Thu, 14 Jul 2022 09:02:10 +0200
fdf7c0
Subject: [PATCH 29/52] Monitor: use devname as char array instead of pointer
fdf7c0
fdf7c0
Device name wasn't filled properly due to incorrect use of strcpy.
fdf7c0
Strcpy was used twice. Firstly to fill devname with "/dev/md/"
fdf7c0
and then to add chosen name. First strcpy result was overwritten by
fdf7c0
second one (as a result <device_name> instead of "/dev/md/<device_name>"
fdf7c0
was assigned). This commit changes this implementation to use snprintf
fdf7c0
and devname with fixed size.
fdf7c0
fdf7c0
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
fdf7c0
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
fdf7c0
---
fdf7c0
 Monitor.c | 8 +++++---
fdf7c0
 1 file changed, 5 insertions(+), 3 deletions(-)
fdf7c0
fdf7c0
diff --git a/Monitor.c b/Monitor.c
fdf7c0
index 6ca1ebe5..a5b11ae2 100644
fdf7c0
--- a/Monitor.c
fdf7c0
+++ b/Monitor.c
fdf7c0
@@ -190,9 +190,11 @@ int Monitor(struct mddev_dev *devlist,
fdf7c0
 			if (mdlist->devname[0] == '/')
fdf7c0
 				st->devname = xstrdup(mdlist->devname);
fdf7c0
 			else {
fdf7c0
-				st->devname = xmalloc(8+strlen(mdlist->devname)+1);
fdf7c0
-				strcpy(strcpy(st->devname, "/dev/md/"),
fdf7c0
-				       mdlist->devname);
fdf7c0
+				/* length of "/dev/md/" + device name + terminating byte */
fdf7c0
+				size_t _len = sizeof("/dev/md/") + strnlen(mdlist->devname, PATH_MAX);
fdf7c0
+
fdf7c0
+				st->devname = xcalloc(_len, sizeof(char));
fdf7c0
+				snprintf(st->devname, _len, "/dev/md/%s", mdlist->devname);
fdf7c0
 			}
fdf7c0
 			if (!is_mddev(mdlist->devname))
fdf7c0
 				return 1;
fdf7c0
-- 
fdf7c0
2.31.1
fdf7c0