Blame SOURCES/specify-enough-length-when-write-to-buffer.patch

2c1b57
From ff9239ee3177630d62c7a58408992af7a779763c Mon Sep 17 00:00:00 2001
2c1b57
From: Xiao Ni <xni@redhat.com>
2c1b57
Date: Fri, 17 Mar 2017 19:55:43 +0800
2c1b57
Subject: [RHEL6.9 PATCH 1/1] mdadm: Specify enough length when write to buffer
2c1b57
MIME-Version: 1.0
2c1b57
Content-Type: text/plain; charset=UTF-8
2c1b57
Content-Transfer-Encoding: 8bit
2c1b57
2c1b57
In Detail.c the buffer path in function Detail is defined as path[200],
2c1b57
in fact the max lenth of content which needs to write to the buffer is
2c1b57
287. Because the length of dname of struct dirent is 255.
2c1b57
During building it reports error:
2c1b57
error: ā€˜%sā€™ directive writing up to 255 bytes into a region of size 189
2c1b57
[-Werror=format-overflow=]
2c1b57
2c1b57
In function examine_super0 there is a buffer nb with length 5.
2c1b57
But it need to show a int type argument. The lenght of max
2c1b57
number of int is 10. So the buffer length should be 11.
2c1b57
2c1b57
In human_size function the length of buf is 30. During building
2c1b57
there is a error:
2c1b57
output between 20 and 47 bytes into a destination of size 30.
2c1b57
Change the length to 47.
2c1b57
2c1b57
Signed-off-by: Xiao Ni <xni@redhat.com>
2c1b57
Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
2c1b57
---
2c1b57
 Detail.c | 2 +-
2c1b57
 super0.c | 2 +-
2c1b57
 util.c   | 2 +-
2c1b57
 3 files changed, 3 insertions(+), 3 deletions(-)
2c1b57
2c1b57
diff --git a/Detail.c b/Detail.c
2c1b57
index 509b0d4..cb33794 100644
2c1b57
--- a/Detail.c
2c1b57
+++ b/Detail.c
2c1b57
@@ -575,7 +575,7 @@ This is pretty boring
2c1b57
 			printf("  Member Arrays :");
2c1b57
 
2c1b57
 			while (dir && (de = readdir(dir)) != NULL) {
2c1b57
-				char path[200];
2c1b57
+				char path[287];
2c1b57
 				char vbuf[1024];
2c1b57
 				int nlen = strlen(sra->sys_name);
2c1b57
 				dev_t devid;
2c1b57
diff --git a/super0.c b/super0.c
2c1b57
index 938cfd9..f5b4507 100644
2c1b57
--- a/super0.c
2c1b57
+++ b/super0.c
2c1b57
@@ -231,7 +231,7 @@ static void examine_super0(struct supertype *st, char *homehost)
2c1b57
 	     d++) {
2c1b57
 		mdp_disk_t *dp;
2c1b57
 		char *dv;
2c1b57
-		char nb[5];
2c1b57
+		char nb[11];
2c1b57
 		int wonly, failfast;
2c1b57
 		if (d>=0) dp = &sb->disks[d];
2c1b57
 		else dp = &sb->this_disk;
2c1b57
diff --git a/util.c b/util.c
2c1b57
index f100972..32bd909 100644
2c1b57
--- a/util.c
2c1b57
+++ b/util.c
2c1b57
@@ -811,7 +811,7 @@ unsigned long calc_csum(void *super, int bytes)
2c1b57
 #ifndef MDASSEMBLE
2c1b57
 char *human_size(long long bytes)
2c1b57
 {
2c1b57
-	static char buf[30];
2c1b57
+	static char buf[47];
2c1b57
 
2c1b57
 	/* We convert bytes to either centi-M{ega,ibi}bytes or
2c1b57
 	 * centi-G{igi,ibi}bytes, with appropriate rounding,
2c1b57
-- 
2c1b57
2.7.4
2c1b57