Blame SOURCES/0019-mdopen-fix-gcc-8.1-string-overflow-error.patch

d922d5
From c1b78589cf042221e22a014332b195b2309cb178 Mon Sep 17 00:00:00 2001
d922d5
From: Jes Sorensen <jsorensen@fb.com>
d922d5
Date: Thu, 31 May 2018 13:11:21 -0400
d922d5
Subject: [RHEL7.5 PATCH 19/26] mdopen: fix gcc 8.1 string overflow error
d922d5
d922d5
We already cut symlinks longer than 1000, so rely on this calling
d922d5
readlink and error out if we are able to read more than 1000 bytes.
d922d5
d922d5
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
d922d5
---
d922d5
 mdopen.c | 8 +++++---
d922d5
 1 file changed, 5 insertions(+), 3 deletions(-)
d922d5
d922d5
diff --git a/mdopen.c b/mdopen.c
d922d5
index 4ec13f5..98c54e4 100644
d922d5
--- a/mdopen.c
d922d5
+++ b/mdopen.c
d922d5
@@ -44,7 +44,7 @@ void make_parts(char *dev, int cnt)
d922d5
 	int nlen = strlen(dev) + 20;
d922d5
 	char *name;
d922d5
 	int dig = isdigit(dev[strlen(dev)-1]);
d922d5
-	char orig[1024];
d922d5
+	char orig[1001];
d922d5
 	char sym[1024];
d922d5
 	int err;
d922d5
 
d922d5
@@ -58,8 +58,10 @@ void make_parts(char *dev, int cnt)
d922d5
 		minor_num = minor(stb.st_rdev);
d922d5
 		odig = -1;
d922d5
 	} else if (S_ISLNK(stb.st_mode)) {
d922d5
-		int len = readlink(dev, orig, sizeof(orig));
d922d5
-		if (len < 0 || len > 1000)
d922d5
+		int len;
d922d5
+
d922d5
+		len = readlink(dev, orig, sizeof(orig));
d922d5
+		if (len < 0 || len >= (int)sizeof(orig))
d922d5
 			return;
d922d5
 		orig[len] = 0;
d922d5
 		odig = isdigit(orig[len-1]);
d922d5
-- 
d922d5
2.7.4
d922d5