summaryrefslogtreecommitdiffstats
path: root/debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch
blob: 0e6490ca775cdfb4b4dd226a364174e16e103eab (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
From: Karel Zak <kzak@redhat.com>
Date: Mon, 1 Apr 2024 12:14:50 +0200
Subject: libblkid: Fix segfault when blkid.conf doesn't exist

* Move 'line' and 'uevent' to the beginning of the LIBECONF code.
* Remove unwanted space between function name and arguments.
* Check for 'line' pointer before dereferencing.

References: https://github.com/util-linux/util-linux/pull/2883
Signed-off-by: Karel Zak <kzak@redhat.com>
(cherry picked from commit 7e357241b413a01c37b0b4d064bc0a47e3259361)
---
 libblkid/src/config.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libblkid/src/config.c b/libblkid/src/config.c
index 7b8b04f..66c1864 100644
--- a/libblkid/src/config.c
+++ b/libblkid/src/config.c
@@ -153,6 +153,8 @@ struct blkid_config *blkid_read_config(const char *filename)
 #else /* !HAVE_LIBECONF */
 
 	static econf_file *file = NULL;
+	char *line = NULL;
+	bool uevent = false;
 	econf_err error;
 
 	if (filename) {
@@ -187,7 +189,6 @@ struct blkid_config *blkid_read_config(const char *filename)
 		}
 	}
 
-	bool uevent = false;
 	if ((error = econf_getBoolValue(file, NULL, "SEND_UEVENT", &uevent))) {
 		if (error != ECONF_NOKEY) {
 			DBG(CONFIG, ul_debug("couldn't fetch SEND_UEVENT corrently: %s", econf_errString(error)));
@@ -209,7 +210,6 @@ struct blkid_config *blkid_read_config(const char *filename)
 		}
 	}
 
-	char *line = NULL;
 	if ((error = econf_getStringValue(file, NULL, "EVALUATE", &line))) {
 		conf->nevals = 0;
 		if (error != ECONF_NOKEY) {
@@ -219,7 +219,7 @@ struct blkid_config *blkid_read_config(const char *filename)
 			DBG(CONFIG, ul_debug("key CACHE_FILE not found, using built-in default "));
 		}
 	} else {
-		if (*line && parse_evaluate(conf, line) == -1)
+		if (line && *line && parse_evaluate(conf, line) == -1)
 			goto err;
 	}
 
@@ -238,8 +238,8 @@ dflt:
 	if (f)
 		fclose(f);
 #else
-	econf_free (file);
-	free (line);
+	econf_free(file);
+	free(line);
 #endif
 	return conf;
 err:
@@ -248,8 +248,8 @@ err:
 #ifndef HAVE_LIBECONF
 	fclose(f);
 #else
-	econf_free (file);
-	free (line);
+	econf_free(file);
+	free(line);
 #endif
 	return NULL;
 }