From c4588d390608d22c7a57a7ebf762139a5231d62d Mon Sep 17 00:00:00 2001 From: liuh Date: Mon, 3 Nov 2025 19:36:16 +0800 Subject: [PATCH] libkmod: Fix UB for non-existent keys (cherry picked from commit e9ad6ee9d0736ee0a65821a6c358920d62e071fe) --- ...libkmod-Fix-UB-for-non-existent-keys.patch | 56 +++++++++++++++++++ kmod.spec | 6 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 backport-libkmod-Fix-UB-for-non-existent-keys.patch diff --git a/backport-libkmod-Fix-UB-for-non-existent-keys.patch b/backport-libkmod-Fix-UB-for-non-existent-keys.patch new file mode 100644 index 0000000..68db8cb --- /dev/null +++ b/backport-libkmod-Fix-UB-for-non-existent-keys.patch @@ -0,0 +1,56 @@ +From 8867f89ceb8154dce2266ecfbadb08f50fd95053 Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +Date: Thu, 27 Feb 2025 09:40:11 -0600 +Subject: [PATCH] libkmod: Fix UB for non-existent keys + +When running the testsuite with UBSAN and a non-existent info key is +used, the following happens: + +TESTSUITE: running test_modinfo_sig_hashalgo, in forked context +TESTSUITE: ERR: 'test_modinfo_sig_hashalgo' [4212] terminated by signal 6 (Aborted) +TESTSUITE: ------ +TESTSUITE: running test_modinfo_sig_key, in forked context +TESTSUITE: ERR: 'test_modinfo_sig_key' [4292] terminated by signal 6 (Aborted) +TESTSUITE: ------ +TESTSUITE: running test_modinfo_signer, in forked context +TESTSUITE: ERR: 'test_modinfo_signer' [4348] terminated by signal 6 (Aborted) + +In CI this happens when disabling module signature handling with +-D openssl=disabled. The UBSAN report is as below: + +../dist-unpack/kmod-34/libkmod/libkmod-module.c:1773:2: runtime error: null pointer passed as argument 2, which is declared to never be null + #0 0x55bb657aa13b (/__w/kmod/kmod/build/meson-private/dist-build/kmod+0x9f13b) (BuildId: 2c8f9c0ffdbcdf249a3cca29a9d2bc47f706a324) + #1 0x55bb6580a4be (/__w/kmod/kmod/build/meson-private/dist-build/kmod+0xff4be) (BuildId: 2c8f9c0ffdbcdf249a3cca29a9d2bc47f706a324) + #2 0x55bb657cc360 (/__w/kmod/kmod/build/meson-private/dist-build/kmod+0xc1360) (BuildId: 2c8f9c0ffdbcdf249a3cca29a9d2bc47f706a324) + #3 0x55bb657cdf43 (/__w/kmod/kmod/build/meson-private/dist-build/kmod+0xc2f43) (BuildId: 2c8f9c0ffdbcdf249a3cca29a9d2bc47f706a324) + #4 0x7f0651bb3487 (/usr/lib/libc.so.6+0x27487) (BuildId: 0b707b217b15b106c25fe51df3724b25848310c0) + #5 0x7f0651bb354b (/usr/lib/libc.so.6+0x2754b) (BuildId: 0b707b217b15b106c25fe51df3724b25848310c0) + #6 0x55bb657aeb14 (/__w/kmod/kmod/build/meson-private/dist-build/kmod+0xa3b14) (BuildId: 2c8f9c0ffdbcdf249a3cca29a9d2bc47f706a324) + +Keep the current behavior of appending a 0-length value, just skipping +the pointless memcpy. + +Signed-off-by: Lucas De Marchi +Reviewed-by: Tobias Stoeckmann +Link: https://github.com/kmod-project/kmod/pull/300 +--- + libkmod/libkmod-module.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c +index 9994343..b81cccb 100644 +--- a/libkmod/libkmod-module.c ++++ b/libkmod/libkmod-module.c +@@ -2240,7 +2240,8 @@ static struct kmod_module_info *kmod_module_info_new(const char *key, size_t key + + valuelen + 1; + memcpy(info->key, key, keylen); + info->key[keylen] = '\0'; +- memcpy(info->value, value, valuelen); ++ if (value) ++ memcpy(info->value, value, valuelen); + info->value[valuelen] = '\0'; + return info; + } +-- +2.43.0 + diff --git a/kmod.spec b/kmod.spec index ea7a503..606c391 100644 --- a/kmod.spec +++ b/kmod.spec @@ -1,6 +1,6 @@ Name: kmod Version: 30 -Release: 10 +Release: 11 Summary: Kernel module management # GPLv2+ is used by programs, LGPLv2+ is used for libraries. License: GPLv2+ and LGPLv2+ @@ -24,6 +24,7 @@ Patch0006: backport-libkmod-clear-file-memory-if-map-fails.patch Patch0007: backport-check-strtol-strtoul-strtoull-results.patch Patch0008: backport-tools-modprobe-Fix-odd-remove-holders-behavior.patch Patch0009: backport-util-fix-endless-loop-in-get_backoff_delta_msec.patch +Patch0010: backport-libkmod-Fix-UB-for-non-existent-keys.patch %description The kmod package provides several commands to manage the kernel modules, @@ -131,6 +132,9 @@ make check %doc TODO NEWS README.md %changelog +* Mon Nov 3 2025 liuh - 30-11 +- libkmod: Fix UB for non-existent keys + * Wed Oct 29 2025 liuh - 30-10 - util: fix endless loop in get_backoff_delta_msec -- Gitee