diff options
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.patch | 75 |
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; + } |