Blame SOURCES/0081-restripe-fix-ignoring-return-value-of-read-and-lseek.patch

3c4af5
From d92cee7b374db9944b63bdd6c1784a2dd90ee9ca Mon Sep 17 00:00:00 2001
3c4af5
From: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
3c4af5
Date: Mon, 18 May 2020 23:53:36 +0200
3c4af5
Subject: [PATCH 081/108] =?UTF-8?q?restripe:=20fix=20ignoring=20return=20v?=
3c4af5
 =?UTF-8?q?alue=20of=20=E2=80=98read=E2=80=99=20and=20lseek?=
3c4af5
MIME-Version: 1.0
3c4af5
Content-Type: text/plain; charset=UTF-8
3c4af5
Content-Transfer-Encoding: 8bit
3c4af5
3c4af5
Got below error when run "make everything".
3c4af5
3c4af5
restripe.c: In function ‘test_stripes’:
3c4af5
restripe.c:870:4: error: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Werror=unused-result]
3c4af5
    read(source[i], stripes[i], chunk_size);
3c4af5
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3c4af5
3c4af5
Fix it by check the return value of ‘read’, and free memory
3c4af5
in the failure case.
3c4af5
3c4af5
And check the return value of lseek as well per Jes's comment.
3c4af5
3c4af5
Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
3c4af5
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
3c4af5
---
3c4af5
 restripe.c | 12 ++++++++++--
3c4af5
 1 file changed, 10 insertions(+), 2 deletions(-)
3c4af5
3c4af5
diff --git a/restripe.c b/restripe.c
3c4af5
index 31b07e8..86e1d00 100644
3c4af5
--- a/restripe.c
3c4af5
+++ b/restripe.c
3c4af5
@@ -866,8 +866,16 @@ int test_stripes(int *source, unsigned long long *offsets,
3c4af5
 		int disk;
3c4af5
 
3c4af5
 		for (i = 0 ; i < raid_disks ; i++) {
3c4af5
-			lseek64(source[i], offsets[i]+start, 0);
3c4af5
-			read(source[i], stripes[i], chunk_size);
3c4af5
+			if ((lseek64(source[i], offsets[i]+start, 0) < 0) ||
3c4af5
+			    (read(source[i], stripes[i], chunk_size) !=
3c4af5
+			     chunk_size)) {
3c4af5
+				free(q);
3c4af5
+				free(p);
3c4af5
+				free(blocks);
3c4af5
+				free(stripes);
3c4af5
+				free(stripe_buf);
3c4af5
+				return -1;
3c4af5
+			}
3c4af5
 		}
3c4af5
 		for (i = 0 ; i < data_disks ; i++) {
3c4af5
 			int disk = geo_map(i, start/chunk_size, raid_disks,
3c4af5
-- 
3c4af5
2.7.5
3c4af5