aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--queue-6.6/kunit-to-check-the-longest-symbol-length.patch184
-rw-r--r--queue-6.6/series2
-rw-r--r--queue-6.6/x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch40
3 files changed, 226 insertions, 0 deletions
diff --git a/queue-6.6/kunit-to-check-the-longest-symbol-length.patch b/queue-6.6/kunit-to-check-the-longest-symbol-length.patch
new file mode 100644
index 0000000000..db9b0ca9de
--- /dev/null
+++ b/queue-6.6/kunit-to-check-the-longest-symbol-length.patch
@@ -0,0 +1,184 @@
+From c104c16073b7fdb3e4eae18f66f4009f6b073d6f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sergio=20Gonz=C3=A1lez=20Collado?=
+ <sergio.collado@gmail.com>
+Date: Sun, 2 Mar 2025 23:15:18 +0100
+Subject: Kunit to check the longest symbol length
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Sergio González Collado <sergio.collado@gmail.com>
+
+commit c104c16073b7fdb3e4eae18f66f4009f6b073d6f upstream.
+
+The longest length of a symbol (KSYM_NAME_LEN) was increased to 512
+in the reference [1]. This patch adds kunit test suite to check the longest
+symbol length. These tests verify that the longest symbol length defined
+is supported.
+
+This test can also help other efforts for longer symbol length,
+like [2].
+
+The test suite defines one symbol with the longest possible length.
+
+The first test verify that functions with names of the created
+symbol, can be called or not.
+
+The second test, verify that the symbols are created (or
+not) in the kernel symbol table.
+
+[1] https://lore.kernel.org/lkml/20220802015052.10452-6-ojeda@kernel.org/
+[2] https://lore.kernel.org/lkml/20240605032120.3179157-1-song@kernel.org/
+
+Link: https://lore.kernel.org/r/20250302221518.76874-1-sergio.collado@gmail.com
+Tested-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
+Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
+Reviewed-by: Rae Moar <rmoar@google.com>
+Signed-off-by: Sergio González Collado <sergio.collado@gmail.com>
+Link: https://github.com/Rust-for-Linux/linux/issues/504
+Reviewed-by: Rae Moar <rmoar@google.com>
+Acked-by: David Gow <davidgow@google.com>
+Signed-off-by: Shuah Khan <shuah@kernel.org>
+Signed-off-by: Shuah Khan <shuah@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/tools/insn_decoder_test.c | 3 -
+ lib/Kconfig.debug | 9 ++++
+ lib/Makefile | 2
+ lib/longest_symbol_kunit.c | 82 +++++++++++++++++++++++++++++++++++++
+ 4 files changed, 95 insertions(+), 1 deletion(-)
+ create mode 100644 lib/longest_symbol_kunit.c
+
+--- a/arch/x86/tools/insn_decoder_test.c
++++ b/arch/x86/tools/insn_decoder_test.c
+@@ -10,6 +10,7 @@
+ #include <assert.h>
+ #include <unistd.h>
+ #include <stdarg.h>
++#include <linux/kallsyms.h>
+
+ #define unlikely(cond) (cond)
+
+@@ -106,7 +107,7 @@ static void parse_args(int argc, char **
+ }
+ }
+
+-#define BUFSIZE 256
++#define BUFSIZE (256 + KSYM_NAME_LEN)
+
+ int main(int argc, char **argv)
+ {
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -2747,6 +2747,15 @@ config FORTIFY_KUNIT_TEST
+ by the str*() and mem*() family of functions. For testing runtime
+ traps of FORTIFY_SOURCE, see LKDTM's "FORTIFY_*" tests.
+
++config LONGEST_SYM_KUNIT_TEST
++ tristate "Test the longest symbol possible" if !KUNIT_ALL_TESTS
++ depends on KUNIT && KPROBES
++ default KUNIT_ALL_TESTS
++ help
++ Tests the longest symbol possible
++
++ If unsure, say N.
++
+ config HW_BREAKPOINT_KUNIT_TEST
+ bool "Test hw_breakpoint constraints accounting" if !KUNIT_ALL_TESTS
+ depends on HAVE_HW_BREAKPOINT
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -402,6 +402,8 @@ obj-$(CONFIG_FORTIFY_KUNIT_TEST) += fort
+ obj-$(CONFIG_STRCAT_KUNIT_TEST) += strcat_kunit.o
+ obj-$(CONFIG_STRSCPY_KUNIT_TEST) += strscpy_kunit.o
+ obj-$(CONFIG_SIPHASH_KUNIT_TEST) += siphash_kunit.o
++obj-$(CONFIG_LONGEST_SYM_KUNIT_TEST) += longest_symbol_kunit.o
++CFLAGS_longest_symbol_kunit.o += $(call cc-disable-warning, missing-prototypes)
+
+ obj-$(CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED) += devmem_is_allowed.o
+
+--- /dev/null
++++ b/lib/longest_symbol_kunit.c
+@@ -0,0 +1,82 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Test the longest symbol length. Execute with:
++ * ./tools/testing/kunit/kunit.py run longest-symbol
++ * --arch=x86_64 --kconfig_add CONFIG_KPROBES=y --kconfig_add CONFIG_MODULES=y
++ * --kconfig_add CONFIG_RETPOLINE=n --kconfig_add CONFIG_CFI_CLANG=n
++ * --kconfig_add CONFIG_MITIGATION_RETPOLINE=n
++ */
++
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#include <kunit/test.h>
++#include <linux/stringify.h>
++#include <linux/kprobes.h>
++#include <linux/kallsyms.h>
++
++#define DI(name) s##name##name
++#define DDI(name) DI(n##name##name)
++#define DDDI(name) DDI(n##name##name)
++#define DDDDI(name) DDDI(n##name##name)
++#define DDDDDI(name) DDDDI(n##name##name)
++
++/*Generate a symbol whose name length is 511 */
++#define LONGEST_SYM_NAME DDDDDI(g1h2i3j4k5l6m7n)
++
++#define RETURN_LONGEST_SYM 0xAAAAA
++
++noinline int LONGEST_SYM_NAME(void);
++noinline int LONGEST_SYM_NAME(void)
++{
++ return RETURN_LONGEST_SYM;
++}
++
++_Static_assert(sizeof(__stringify(LONGEST_SYM_NAME)) == KSYM_NAME_LEN,
++"Incorrect symbol length found. Expected KSYM_NAME_LEN: "
++__stringify(KSYM_NAME_LEN) ", but found: "
++__stringify(sizeof(LONGEST_SYM_NAME)));
++
++static void test_longest_symbol(struct kunit *test)
++{
++ KUNIT_EXPECT_EQ(test, RETURN_LONGEST_SYM, LONGEST_SYM_NAME());
++};
++
++static void test_longest_symbol_kallsyms(struct kunit *test)
++{
++ unsigned long (*kallsyms_lookup_name)(const char *name);
++ static int (*longest_sym)(void);
++
++ struct kprobe kp = {
++ .symbol_name = "kallsyms_lookup_name",
++ };
++
++ if (register_kprobe(&kp) < 0) {
++ pr_info("%s: kprobe not registered", __func__);
++ KUNIT_FAIL(test, "test_longest_symbol kallsyms: kprobe not registered\n");
++ return;
++ }
++
++ kunit_warn(test, "test_longest_symbol kallsyms: kprobe registered\n");
++ kallsyms_lookup_name = (unsigned long (*)(const char *name))kp.addr;
++ unregister_kprobe(&kp);
++
++ longest_sym =
++ (void *) kallsyms_lookup_name(__stringify(LONGEST_SYM_NAME));
++ KUNIT_EXPECT_EQ(test, RETURN_LONGEST_SYM, longest_sym());
++};
++
++static struct kunit_case longest_symbol_test_cases[] = {
++ KUNIT_CASE(test_longest_symbol),
++ KUNIT_CASE(test_longest_symbol_kallsyms),
++ {}
++};
++
++static struct kunit_suite longest_symbol_test_suite = {
++ .name = "longest-symbol",
++ .test_cases = longest_symbol_test_cases,
++};
++kunit_test_suite(longest_symbol_test_suite);
++
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Test the longest symbol length");
++MODULE_AUTHOR("Sergio González Collado");
diff --git a/queue-6.6/series b/queue-6.6/series
index 5d1e3de795..b2e1ce417d 100644
--- a/queue-6.6/series
+++ b/queue-6.6/series
@@ -140,3 +140,5 @@ scripts-clean-up-ia-64-code.patch
kbuild-rpm-pkg-simplify-installkernel-post.patch
media-uvcvideo-rollback-non-processed-entities-on-error.patch
s390-entry-fix-last-breaking-event-handling-in-case-of-stack-corruption.patch
+kunit-to-check-the-longest-symbol-length.patch
+x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch
diff --git a/queue-6.6/x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch b/queue-6.6/x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch
new file mode 100644
index 0000000000..c14280356a
--- /dev/null
+++ b/queue-6.6/x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch
@@ -0,0 +1,40 @@
+From f710202b2a45addea3dcdcd862770ecbaf6597ef Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <nathan@kernel.org>
+Date: Tue, 18 Mar 2025 15:32:30 -0700
+Subject: x86/tools: Drop duplicate unlikely() definition in insn_decoder_test.c
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+commit f710202b2a45addea3dcdcd862770ecbaf6597ef upstream.
+
+After commit c104c16073b7 ("Kunit to check the longest symbol length"),
+there is a warning when building with clang because there is now a
+definition of unlikely from compiler.h in tools/include/linux, which
+conflicts with the one in the instruction decoder selftest:
+
+ arch/x86/tools/insn_decoder_test.c:15:9: warning: 'unlikely' macro redefined [-Wmacro-redefined]
+
+Remove the second unlikely() definition, as it is no longer necessary,
+clearing up the warning.
+
+Fixes: c104c16073b7 ("Kunit to check the longest symbol length")
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Acked-by: Shuah Khan <skhan@linuxfoundation.org>
+Link: https://lore.kernel.org/r/20250318-x86-decoder-test-fix-unlikely-redef-v1-1-74c84a7bf05b@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/tools/insn_decoder_test.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/arch/x86/tools/insn_decoder_test.c
++++ b/arch/x86/tools/insn_decoder_test.c
+@@ -12,8 +12,6 @@
+ #include <stdarg.h>
+ #include <linux/kallsyms.h>
+
+-#define unlikely(cond) (cond)
+-
+ #include <asm/insn.h>
+ #include <inat.c>
+ #include <insn.c>