From d5cdeeba4c40ac64ad1b37d0ba736c14002c66cc Mon Sep 17 00:00:00 2001 From: love_hangzhou Date: Fri, 18 Jun 2021 15:22:29 +0800 Subject: [PATCH] backport patch to fix some bugs libkmod-module:check "new_from_name" return value in get_builtin libkmod:fix possible double free with wrong modules.buildin.modinfo libkmod:fix an overflow with wrong modules.builtin.modinfo libkmod-config:fix a memory leak when kmod_list_append() fails Fix "modinfo -F always shows name for built-ins" --- ...fo-F-always-shows-name-for-built-ins.patch | 44 +++++++++++++++++++ ...ix-a-memory-leak-when-kmod_list_appe.patch | 36 +++++++++++++++ ...verflow-with-wrong-modules.builtin.m.patch | 32 ++++++++++++++ ...sible-double-free-with-wrong-modules.patch | 33 ++++++++++++++ ...heck-new_from_name-return-value-in-g.patch | 37 ++++++++++++++++ kmod.spec | 15 ++++++- 6 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 backport-Fix-modinfo-F-always-shows-name-for-built-ins.patch create mode 100644 backport-libkmod-config-fix-a-memory-leak-when-kmod_list_appe.patch create mode 100644 backport-libkmod-fix-an-overflow-with-wrong-modules.builtin.m.patch create mode 100644 backport-libkmod-fix-possible-double-free-with-wrong-modules.patch create mode 100644 backport-libkmod-module-check-new_from_name-return-value-in-g.patch diff --git a/backport-Fix-modinfo-F-always-shows-name-for-built-ins.patch b/backport-Fix-modinfo-F-always-shows-name-for-built-ins.patch new file mode 100644 index 0000000..ea6eeee --- /dev/null +++ b/backport-Fix-modinfo-F-always-shows-name-for-built-ins.patch @@ -0,0 +1,44 @@ +From fa67110f896cdef67f42cbc2206ae2a8524acee6 Mon Sep 17 00:00:00 2001 +From: Marco d'Itri +Date: Thu, 7 Jan 2021 20:17:48 -0800 +Subject: [PATCH] Fix "modinfo -F always shows name for built-ins" + +Conflict:NA +Reference:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=fa67110f896cdef67f42cbc2206ae2a8524acee6 + +Bug reported by Ben Hutchings : +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=970871 + + Now that the kernel provides module information for potentially + modular code that's actually built-in, it's possible to query these + built-ins with "modinfo -F". However, this doesn't work quite right: + + $ modinfo -Flicense e1000e + GPL v2 + $ modinfo -Flicense bitrev + name: bitrev + GPL +--- + tools/modinfo.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/tools/modinfo.c b/tools/modinfo.c +index 0231bb0..f6a971f 100644 +--- a/tools/modinfo.c ++++ b/tools/modinfo.c +@@ -178,7 +178,11 @@ static int modinfo_do(struct kmod_module *mod) + is_builtin = (filename == NULL); + + if (is_builtin) { +- printf("%-16s%s%c", "name:", kmod_module_get_name(mod), separator); ++ if (field == NULL) ++ printf("%-16s%s%c", "name:", ++ kmod_module_get_name(mod), separator); ++ else if (field != NULL && streq(field, "name")) ++ printf("%s%c", kmod_module_get_name(mod), separator); + filename = "(builtin)"; + } + +-- +2.23.0 + diff --git a/backport-libkmod-config-fix-a-memory-leak-when-kmod_list_appe.patch b/backport-libkmod-config-fix-a-memory-leak-when-kmod_list_appe.patch new file mode 100644 index 0000000..f6a2288 --- /dev/null +++ b/backport-libkmod-config-fix-a-memory-leak-when-kmod_list_appe.patch @@ -0,0 +1,36 @@ +From 39dd171623744ac390dadf487c5a3ebf0b69f2ca Mon Sep 17 00:00:00 2001 +From: Seung-Woo Kim +Date: Fri, 9 Apr 2021 18:44:23 +0900 +Subject: [PATCH] libkmod-config: fix a memory leak when kmod_list_append() + fails + +Conflict:NA +Reference:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=39dd171623744ac390dadf487c5a3ebf0b69f2ca + +From kmod_config_new(), when kmod_list_append() fails, +fix not list-appended kmod_config_path leak. + +Signed-off-by: Seung-Woo Kim +--- + libkmod/libkmod-config.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c +index 4fdd40f..e83621b 100644 +--- a/libkmod/libkmod-config.c ++++ b/libkmod/libkmod-config.c +@@ -909,8 +909,10 @@ int kmod_config_new(struct kmod_ctx *ctx, struct kmod_config **p_config, + memcpy(cf->path, path, pathlen); + + tmp = kmod_list_append(path_list, cf); +- if (tmp == NULL) ++ if (tmp == NULL) { ++ free(cf); + goto oom; ++ } + path_list = tmp; + } + +-- +2.23.0 + diff --git a/backport-libkmod-fix-an-overflow-with-wrong-modules.builtin.m.patch b/backport-libkmod-fix-an-overflow-with-wrong-modules.builtin.m.patch new file mode 100644 index 0000000..21edaf9 --- /dev/null +++ b/backport-libkmod-fix-an-overflow-with-wrong-modules.builtin.m.patch @@ -0,0 +1,32 @@ +From 1cab02ecf6ee2a0aa34f3615dfd99c59f7e04e90 Mon Sep 17 00:00:00 2001 +From: Seung-Woo Kim +Date: Tue, 13 Apr 2021 20:23:14 +0900 +Subject: [PATCH] libkmod: fix an overflow with wrong modules.builtin.modinfo + +Conflict:NA +Reference:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=1cab02ecf6ee2a0aa34f3615dfd99c59f7e04e90 + +Fix a possbile overflow with exact PATH_MAX length modname +in wrong modules.builtin.modinfo. + +Signed-off-by: Seung-Woo Kim +--- + libkmod/libkmod-builtin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libkmod/libkmod-builtin.c b/libkmod/libkmod-builtin.c +index fc9a376..a75a542 100644 +--- a/libkmod/libkmod-builtin.c ++++ b/libkmod/libkmod-builtin.c +@@ -246,7 +246,7 @@ bool kmod_builtin_iter_get_modname(struct kmod_builtin_iter *iter, + + len = dot - line; + +- if (len > PATH_MAX) { ++ if (len >= PATH_MAX) { + sv_errno = ENAMETOOLONG; + goto fail; + } +-- +2.23.0 + diff --git a/backport-libkmod-fix-possible-double-free-with-wrong-modules.patch b/backport-libkmod-fix-possible-double-free-with-wrong-modules.patch new file mode 100644 index 0000000..db0b796 --- /dev/null +++ b/backport-libkmod-fix-possible-double-free-with-wrong-modules.patch @@ -0,0 +1,33 @@ +From 675410c3b3b1cf4523f02ab6e3128c39bd5d5101 Mon Sep 17 00:00:00 2001 +From: Seung-Woo Kim +Date: Tue, 13 Apr 2021 20:23:15 +0900 +Subject: [PATCH] libkmod: fix possible double free with wrong + modules.builtin.modinfo + +Conflict:NA +Reference:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=675410c3b3b1cf4523f02ab6e3128c39bd5d5101 + +Fix double free for *modinfo with non '\0' terminated wrong +modules.builtin.modinfo, which is because EOF is minus value. + +Signed-off-by: Seung-Woo Kim +--- + libkmod/libkmod-builtin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libkmod/libkmod-builtin.c b/libkmod/libkmod-builtin.c +index a75a542..a002cb5 100644 +--- a/libkmod/libkmod-builtin.c ++++ b/libkmod/libkmod-builtin.c +@@ -313,7 +313,7 @@ ssize_t kmod_builtin_get_modinfo(struct kmod_ctx *ctx, const char *modname, + while (offset < iter->next) { + offset = get_string(iter, pos, &line, &linesz); + if (offset <= 0) { +- count = (offset) ? -errno : -EOF; ++ count = (offset) ? -errno : -EINVAL; + free(*modinfo); + goto fail; + } +-- +2.23.0 + diff --git a/backport-libkmod-module-check-new_from_name-return-value-in-g.patch b/backport-libkmod-module-check-new_from_name-return-value-in-g.patch new file mode 100644 index 0000000..a91450e --- /dev/null +++ b/backport-libkmod-module-check-new_from_name-return-value-in-g.patch @@ -0,0 +1,37 @@ +From 64541d6aad210879e104e4796beeef49d4311f6d Mon Sep 17 00:00:00 2001 +From: Yauheni Kaliuta +Date: Tue, 8 Jun 2021 09:29:22 +0300 +Subject: [PATCH] libkmod-module: check "new_from_name" return value in + get_builtin + +Conflict:NA +Reference:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=64541d6aad210879e104e4796beeef49d4311f6d + +kmod_module_new_from_name() may fail and return error value. It is +handled properly across the code, but in this particular place the +check is missing. + +Signed-off-by: Yauheni Kaliuta +--- + libkmod/libkmod-module.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c +index b6320cc..6e0ff1a 100644 +--- a/libkmod/libkmod-module.c ++++ b/libkmod/libkmod-module.c +@@ -2912,7 +2912,10 @@ int kmod_module_get_builtin(struct kmod_ctx *ctx, struct kmod_list **list) + goto fail; + } + +- kmod_module_new_from_name(ctx, modname, &mod); ++ err = kmod_module_new_from_name(ctx, modname, &mod); ++ if (err < 0) ++ goto fail; ++ + kmod_module_set_builtin(mod, true); + + *list = kmod_list_append(*list, mod); +-- +2.23.0 + diff --git a/kmod.spec b/kmod.spec index 46b996e..338a185 100644 --- a/kmod.spec +++ b/kmod.spec @@ -1,6 +1,6 @@ Name: kmod Version: 27 -Release: 4 +Release: 5 Summary: Kernel module management # GPLv2+ is used by programs, LGPLv2+ is used for libraries. License: GPLv2+ and LGPLv2+ @@ -15,6 +15,12 @@ Patch6002: backport-depmod-do-not-output-.bin-to-stdout.patch Patch6003: backport-libkmod-kmod_builtin_get_modinfo-free-modinfo-on-err.patch Patch6004: backport-depmod-output_builtin_alias_bin-free-idx-on-error-pa.patch Patch6005: backport-libkmod-kmod_log_null-qualify-ctx-argument-as-const.patch +Patch6006: backport-Fix-modinfo-F-always-shows-name-for-built-ins.patch +Patch6007: backport-libkmod-config-fix-a-memory-leak-when-kmod_list_appe.patch +Patch6008: backport-libkmod-fix-an-overflow-with-wrong-modules.builtin.m.patch +Patch6009: backport-libkmod-fix-possible-double-free-with-wrong-modules.patch +Patch6010: backport-libkmod-module-check-new_from_name-return-value-in-g.patch + Patch9000: bugfix-kmod-20-8-depmod-Don-t-unlinkat-orig-depfile-and-add-fsync.patch BuildRequires: gcc chrpath zlib-devel xz-devel libxslt openssl-devel @@ -110,6 +116,13 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d/dist.conf %doc TODO NEWS README %changelog +* Fri Jun 18 2021 hushiyuan - 27-5 +- libkmod-module: check "new_from_name" return value in get_builtin +- libkmod:fix double free for modinfo in modules.buildin.modinfo +- libkmod:fix an overflow with wrong modules.builtin.modinfo +- libkmod-config:fix a memory leak when kmod_list_append failes +- Fix "modinfo -F always shows name for build-ins" + * Thu Jan 14 2021 xinghe - 27-4 - fix memory leak in kmodinfo and build warning -- Gitee