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

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