summaryrefslogtreecommitdiffstats
path: root/patches/ima-evm-utils-1.1/0004-evmctl-find-add-missing-error-handling-and-propagate.patch
blob: 68660d95eda01f12e3aaa8eb378e84b4c8705ef8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: Fri, 13 Nov 2015 14:04:37 +0100
Subject: [PATCH] evmctl: find(): add missing error handling and propagate
 error

This patch adds the missing error handling to the while() loop in the find()
function, so that evmctl properly fails on errors.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
 src/evmctl.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/evmctl.c b/src/evmctl.c
index 20eccfa93b2b..55fc619f5990 100644
--- a/src/evmctl.c
+++ b/src/evmctl.c
@@ -1234,13 +1234,20 @@ static int find(const char *path, int dts, find_cb_t func)
 	}
 
 	while ((de = readdir(dir))) {
+		int err = 0;
+
 		if (!strcmp(de->d_name, "..") || !strcmp(de->d_name, "."))
 			continue;
 		log_debug("path: %s, type: %u\n", de->d_name, de->d_type);
 		if (de->d_type == DT_DIR)
-			find(de->d_name, dts, func);
+			err = find(de->d_name, dts, func);
 		else if (dts & (1 << de->d_type))
-			func(de->d_name);
+			err = func(de->d_name);
+
+		if (err) {
+			closedir(dir);
+			return -1;
+		}
 	}
 
 	if (chdir("..")) {
@@ -1249,8 +1256,13 @@ static int find(const char *path, int dts, find_cb_t func)
 		return -1;
 	}
 
-	if (dts & DIR_MASK)
-		func(path);
+	if (dts & DIR_MASK) {
+		int err;
+
+		err = func(path);
+		if (err)
+			return -1;
+	}
 
 	closedir(dir);