summaryrefslogtreecommitdiffstats
path: root/debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch')
-rw-r--r--debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch b/debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch
new file mode 100644
index 0000000..0e6490c
--- /dev/null
+++ b/debian/patches/upstream/libblkid-Fix-segfault-when-blkid.conf-doesn-t-exist.patch
@@ -0,0 +1,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;
+ }