dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone

Blame SOURCES/Query-Handle-error-returned-by-fstat.patch

b7f731
From 8d0cd09d73a9a9d57ee73b7a79114e881dad1507 Mon Sep 17 00:00:00 2001
b7f731
From: Jes Sorensen <jsorensen@fb.com>
b7f731
Date: Thu, 13 Apr 2017 11:53:21 -0400
b7f731
Subject: [RHEL7.5 PATCH 079/169] Query: Handle error returned by fstat()
b7f731
b7f731
We shouldn't ignore any error returned by fstat() even if open() didn't
b7f731
fail.
b7f731
b7f731
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
b7f731
---
b7f731
 Query.c | 19 ++++++++++++-------
b7f731
 1 file changed, 12 insertions(+), 7 deletions(-)
b7f731
b7f731
diff --git a/Query.c b/Query.c
b7f731
index bea273f..0d18da4 100644
b7f731
--- a/Query.c
b7f731
+++ b/Query.c
b7f731
@@ -32,22 +32,21 @@ int Query(char *dev)
b7f731
 	 * whether it is an md device and whether it has
b7f731
 	 * a superblock
b7f731
 	 */
b7f731
-	int fd = open(dev, O_RDONLY);
b7f731
-	int ioctlerr;
b7f731
+	int fd;
b7f731
+	int ioctlerr, staterr;
b7f731
 	int superror;
b7f731
 	struct mdinfo info;
b7f731
 	mdu_array_info_t array;
b7f731
 	struct supertype *st = NULL;
b7f731
-
b7f731
 	unsigned long long larray_size;
b7f731
 	struct stat stb;
b7f731
 	char *mddev;
b7f731
 	mdu_disk_info_t disc;
b7f731
 	char *activity;
b7f731
 
b7f731
+	fd = open(dev, O_RDONLY);
b7f731
 	if (fd < 0){
b7f731
-		pr_err("cannot open %s: %s\n",
b7f731
-			dev, strerror(errno));
b7f731
+		pr_err("cannot open %s: %s\n", dev, strerror(errno));
b7f731
 		return 1;
b7f731
 	}
b7f731
 
b7f731
@@ -56,9 +55,12 @@ int Query(char *dev)
b7f731
 	else
b7f731
 		ioctlerr = 0;
b7f731
 
b7f731
-	fstat(fd, &stb;;
b7f731
+	if (fstat(fd, &stb) < 0)
b7f731
+		staterr = errno;
b7f731
+	else
b7f731
+		staterr = 0;
b7f731
 
b7f731
-	if (!ioctlerr) {
b7f731
+	if (!ioctlerr && !staterr) {
b7f731
 		if (!get_dev_size(fd, NULL, &larray_size))
b7f731
 			larray_size = 0;
b7f731
 	}
b7f731
@@ -68,6 +70,9 @@ int Query(char *dev)
b7f731
 	else if (ioctlerr)
b7f731
 		printf("%s: is an md device, but gives \"%s\" when queried\n",
b7f731
 		       dev, strerror(ioctlerr));
b7f731
+	else if (staterr)
b7f731
+		printf("%s: is not a valid md device, returning %s\n",
b7f731
+		       dev, strerror(ioctlerr));
b7f731
 	else {
b7f731
 		printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
b7f731
 		       dev,
b7f731
-- 
b7f731
2.7.4
b7f731