8f4a09
From cc1d7d17c6d2df0f603932becf238fdf264a9e30 Mon Sep 17 00:00:00 2001
8f4a09
From: Pingfan Liu <piliu@redhat.com>
8f4a09
Date: Thu, 10 Jun 2021 11:17:40 +0800
8f4a09
Subject: [PATCH 5/6] sysfs.c: prevent mem leak in sysfs_node_read()
8f4a09
8f4a09
Signed-off-by: Pingfan Liu <piliu@redhat.com>
8f4a09
---
8f4a09
 sysfs.c | 23 +++++++++++++++--------
8f4a09
 1 file changed, 15 insertions(+), 8 deletions(-)
8f4a09
8f4a09
diff --git a/sysfs.c b/sysfs.c
8f4a09
index 9ddf50d..a35c4b5 100644
8f4a09
--- a/sysfs.c
8f4a09
+++ b/sysfs.c
8f4a09
@@ -33,7 +33,7 @@ hidden char *sysfs_read(char *name)
8f4a09
 
8f4a09
 hidden int sysfs_node_read(struct bitmask *mask, char *fmt, ...)
8f4a09
 {
8f4a09
-	int n;
8f4a09
+	int n, ret = 0;
8f4a09
 	va_list ap;
8f4a09
 	char *p, *fn, *m, *end;
8f4a09
 	int num;
8f4a09
@@ -51,12 +51,18 @@ hidden int sysfs_node_read(struct bitmask *mask, char *fmt, ...)
8f4a09
 	m = p;
8f4a09
 	do {
8f4a09
 		num = strtol(m, &end, 0);
8f4a09
-		if (m == end)
8f4a09
-			return -1;
8f4a09
-		if (num < 0)
8f4a09
-			return -2;
8f4a09
-		if (num >= numa_num_task_nodes())
8f4a09
-			return -1;
8f4a09
+		if (m == end) {
8f4a09
+			ret = -1;
8f4a09
+			goto out;
8f4a09
+		}
8f4a09
+		if (num < 0) {
8f4a09
+			ret = -2;
8f4a09
+			goto out;
8f4a09
+		}
8f4a09
+		if (num >= numa_num_task_nodes()) {
8f4a09
+			ret = -1;
8f4a09
+			goto out;
8f4a09
+		}
8f4a09
 		numa_bitmask_setbit(mask, num);
8f4a09
 
8f4a09
 		/* Continuation not supported by kernel yet. */
8f4a09
@@ -64,6 +70,7 @@ hidden int sysfs_node_read(struct bitmask *mask, char *fmt, ...)
8f4a09
 		while (isspace(*m) || *m == ',')
8f4a09
 			m++;
8f4a09
 	} while (isdigit(*m));
8f4a09
+out:
8f4a09
 	free(p);
8f4a09
-	return 0;
8f4a09
+	return ret;
8f4a09
 }
8f4a09
-- 
8f4a09
2.29.2
8f4a09