From: Song Liu <song@kernel.org>
To: live-patching@vger.kernel.org
Cc: jpoimboe@kernel.org, peterz@infradead.org, jikos@kernel.org,
mbenes@suse.cz, pmladek@suse.com, joe.lawrence@redhat.com,
puranjay@kernel.org, kernel-team@meta.com,
Song Liu <song@kernel.org>
Subject: [PATCH v4 43/58] objtool/klp: Test rejection of a file-local static branch key
Date: Tue, 15 Sep 2026 16:34:39 -0700 [thread overview]
Message-ID: <20260915233454.2405019-44-song@kernel.org> (raw)
In-Reply-To: <20260915233454.2405019-1-song@kernel.org>
A static branch key owned by a module cannot be reached with a klp reloc:
late module patching allows the livepatch module to load first, leaving the
__jump_table entry unresolved for jump_label_add_module() to dereference.
validate_special_section_klp_reloc() rejects it at build time.
test-jump-label-module-key covers that for a global key. A file-local one
takes a different route to the same check: the compiler references a static
through its section symbol plus an addend, so the key has to be resolved
from the section before it can be recognised as STT_OBJECT at all. Until
commit f9fb44b0ecef ("objtool/klp: Fix detection of corrupt static
branch/call entries") it was not, and the reference was silently emitted.
Give the fixture a STATIC_KEY knob and cover it. The test checks that the
input really does reference the key through its section, since without that
it is only a second copy of the existing test.
Verified by reverting commit f9fb44b0ecef ("objtool/klp: Fix detection of
corrupt static branch/call entries"): klp diff accepts the input and the
test fails, under both gcc and clang.
Assisted-by: Claude:claude-opus-4
Based-on-test-by: Joe Lawrence <joe.lawrence@redhat.com>
Assisted-by: Claude:claude-opus-5
Signed-off-by: Song Liu <song@kernel.org>
---
.../test-jump-label-module-static-key.sh | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100755 tools/objtool/tests/generic/test-jump-label-module-static-key.sh
diff --git a/tools/objtool/tests/generic/test-jump-label-module-static-key.sh b/tools/objtool/tests/generic/test-jump-label-module-static-key.sh
new file mode 100755
index 000000000000..7bdcbaf2fa60
--- /dev/null
+++ b/tools/objtool/tests/generic/test-jump-label-module-static-key.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# A static branch key owned by a module is rejected whether the key is global
+# or file-local.
+#
+# The rejection matters because late module patching allows the livepatch
+# module to load before the module it depends on: the __jump_table klp reloc is
+# then unresolved, and jump_label_add_module() dereferences an uninitialized
+# pointer. Catching it at build time is the only defence.
+#
+# test-jump-label-module-key covers the global key. A file-local one reaches
+# the same check by a different route: the compiler emits the reference against
+# the section symbol plus an addend, so validate_special_section_klp_reloc()
+# has to resolve it to the underlying object before it can see a key at all.
+# Until it did, a static key was passed over as "not STT_OBJECT" and the
+# unsupported reference was emitted with nothing said.
+#
+# Fixed by f9fb44b0ecef ("objtool/klp: Fix detection of corrupt static
+# branch/call entries").
+
+. "$(dirname "$0")/../lib.sh"
+
+setup
+build_pair jump_label.c -DSTATIC_KEY -DMODNAME='"klp_testmod"'
+
+require_input_section __jump_table
+
+# The premise: the key is reached through its section symbol, not by name.
+# Without that this is just a second copy of test-jump-label-module-key.
+input_jump_relocs="$(in_relocs orig.o | awk '/rela__jump_table/,/^$/')"
+
+echo "$input_jump_relocs" | grep -q klp_test_key ||
+ fail "fixture produced no __jump_table reference to the key"
+echo "$input_jump_relocs" | grep -qE '\.(bss|data)\.klp_test_key' ||
+ probe_skip "compiler referenced the static key by name, not through its section"
+
+run_diff 255
+
+diff_log | grep -q 'unsupported static branch key klp_test_key' ||
+ fail "expected rejection, got: $(diff_log | tail -1)"
+[ -e "$workdir/out.o" ] &&
+ fail "output object produced for a rejected input"
+
+pass "module-owned file-local static branch key rejected"
--
2.53.0-Meta
next prev parent reply other threads:[~2026-09-15 23:38 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 23:33 [PATCH v4 00/58] Unit test framework for klp-build toolchain Song Liu
2026-09-15 23:33 ` [PATCH v4 01/58] objtool: Add test harness for the klp subcommands Song Liu
2026-09-15 23:33 ` [PATCH v4 02/58] objtool/klp: Check the klp test environment once, before any test Song Liu
2026-09-15 23:33 ` [PATCH v4 03/58] objtool/klp: Group the klp tests by architecture Song Liu
2026-09-15 23:34 ` [PATCH v4 04/58] objtool/klp: Classify klp test outcomes Song Liu
2026-09-15 23:34 ` [PATCH v4 05/58] objtool/klp: Build klp test fixtures through the harness Song Liu
2026-09-15 23:34 ` [PATCH v4 06/58] objtool/klp: Grow the klp test harness vocabulary Song Liu
2026-09-15 23:50 ` sashiko-bot
2026-09-16 17:33 ` Song Liu
2026-09-15 23:34 ` [PATCH v4 07/58] objtool/klp: Give each run one working directory, one per test inside it Song Liu
2026-09-15 23:34 ` [PATCH v4 08/58] objtool/klp: Run the klp tests under set -u Song Liu
2026-09-15 23:34 ` [PATCH v4 09/58] objtool/klp: Document the klp test harness Song Liu
2026-09-15 23:34 ` [PATCH v4 10/58] objtool: Keep failing test workdirs by default Song Liu
2026-09-15 23:34 ` [PATCH v4 11/58] objtool: Forward toolchain variables to the klp test runner Song Liu
2026-09-15 23:34 ` [PATCH v4 12/58] objtool/klp: Add test for rejecting changed data Song Liu
2026-09-15 23:34 ` [PATCH v4 13/58] objtool/klp: Add test for newly introduced data Song Liu
2026-09-15 23:34 ` [PATCH v4 14/58] objtool/klp: Add test for newly introduced functions Song Liu
2026-09-15 23:34 ` [PATCH v4 15/58] objtool/klp: Add test for static local correlation Song Liu
2026-09-15 23:46 ` sashiko-bot
2026-09-16 17:45 ` Song Liu
2026-09-15 23:34 ` [PATCH v4 16/58] objtool/klp: Add test for cold function halves Song Liu
2026-09-15 23:34 ` [PATCH v4 17/58] objtool/klp: Add test for special section extraction Song Liu
2026-09-15 23:34 ` [PATCH v4 18/58] objtool/klp: Add test for selective " Song Liu
2026-09-15 23:34 ` [PATCH v4 19/58] objtool/klp: Add test for jump table key relocations Song Liu
2026-09-15 23:34 ` [PATCH v4 20/58] objtool/klp: Add test for rejecting module-owned static branch keys Song Liu
2026-09-15 23:34 ` [PATCH v4 21/58] objtool/klp: Add test for rejecting module-owned static call keys Song Liu
2026-09-15 23:34 ` [PATCH v4 22/58] objtool/klp: Add test for symids in discarded sections Song Liu
2026-09-15 23:34 ` [PATCH v4 23/58] objtool/klp: Add test for rejecting references to init code/data Song Liu
2026-09-15 23:34 ` [PATCH v4 24/58] objtool/klp: Add test for correlation across ThinLTO name mangling Song Liu
2026-09-15 23:34 ` [PATCH v4 25/58] objtool/klp: Add test for objects without .modinfo Song Liu
2026-09-15 23:34 ` [PATCH v4 26/58] objtool/klp: Add test for unchecksummed input Song Liu
2026-09-15 23:34 ` [PATCH v4 27/58] objtool/klp: Add klp diff and post-link regression tests Song Liu
2026-09-15 23:34 ` [PATCH v4 28/58] objtool/klp: Add test for klp reloc section naming in module objects Song Liu
2026-09-15 23:34 ` [PATCH v4 29/58] objtool/klp: Add test for vmlinux relocs in a patched module Song Liu
2026-09-15 23:34 ` [PATCH v4 30/58] objtool/klp: Add test for Module.symvers path normalization Song Liu
2026-09-15 23:34 ` [PATCH v4 31/58] objtool/klp: Add test for the contents of the klp_funcs list Song Liu
2026-09-15 23:34 ` [PATCH v4 32/58] objtool/klp: Add test for EXPORT_SYMBOL_FOR_MODULES references Song Liu
2026-09-15 23:34 ` [PATCH v4 33/58] objtool/klp: Add test for new references to exported symbols Song Liu
2026-09-15 23:48 ` sashiko-bot
2026-09-16 17:40 ` Song Liu
2026-09-15 23:34 ` [PATCH v4 34/58] objtool/klp: Add test for empty x86 alternative replacements Song Liu
2026-09-15 23:34 ` [PATCH v4 35/58] objtool/klp: Add test for recorded checksum values Song Liu
2026-09-15 23:34 ` [PATCH v4 36/58] objtool/klp: Add test for position-independent checksums Song Liu
2026-09-15 23:34 ` [PATCH v4 37/58] objtool/klp: Add test for sympos in module objects Song Liu
2026-09-15 23:34 ` [PATCH v4 38/58] objtool/klp: Add test for sympos resolved against a linked vmlinux Song Liu
2026-09-15 23:34 ` [PATCH v4 39/58] objtool/klp: Add test for static locals which must not be correlated Song Liu
2026-09-15 23:51 ` sashiko-bot
2026-09-16 17:51 ` Song Liu
2026-09-15 23:34 ` [PATCH v4 40/58] objtool/klp: Add test for __bug_table, __ex_table and __mcount_loc extraction Song Liu
2026-09-15 23:34 ` [PATCH v4 41/58] objtool/klp: Add test for kCFI prefix symbols and traps Song Liu
2026-09-15 23:34 ` [PATCH v4 42/58] objtool/klp: Add test for symbols whose linkage the patch changes Song Liu
2026-09-15 23:34 ` Song Liu [this message]
2026-09-15 23:34 ` [PATCH v4 44/58] objtool/klp: Test a hand-built livepatch module's static call keys Song Liu
2026-09-15 23:34 ` [PATCH v4 45/58] objtool/klp: Test text annotations on alternative replacements Song Liu
2026-09-15 23:34 ` [PATCH v4 46/58] objtool/klp: Add test for data object checksums Song Liu
2026-09-15 23:53 ` sashiko-bot
2026-09-16 7:00 ` Song Liu
2026-09-15 23:34 ` [PATCH v4 47/58] objtool/klp: Add test for symbols with no checksum entry of their own Song Liu
2026-09-15 23:34 ` [PATCH v4 48/58] objtool/klp: Add test for a static branch introduced by the patch Song Liu
2026-09-15 23:34 ` [PATCH v4 49/58] objtool/klp: Add test for tracepoint and pr_debug static branch keys Song Liu
2026-09-15 23:34 ` [PATCH v4 50/58] objtool/klp: Add test for a static call introduced by the patch Song Liu
2026-09-15 23:34 ` [PATCH v4 51/58] objtool/klp: Add test for instruction operand checksums Song Liu
2026-09-15 23:34 ` [PATCH v4 52/58] objtool/klp: Add test for alternative replacement code in checksums Song Liu
2026-09-15 23:34 ` [PATCH v4 53/58] objtool/klp: Add test for the alignment of cloned data sections Song Liu
2026-09-15 23:34 ` [PATCH v4 54/58] objtool/klp: Add test for a patch which strips a data annotation Song Liu
2026-09-15 23:34 ` [PATCH v4 55/58] objtool/klp: Add test for absolute and __ADDRESSABLE symbols Song Liu
2026-09-15 23:34 ` [PATCH v4 56/58] objtool/klp: Add test for UBSAN metadata in an unchanged function Song Liu
2026-09-15 23:34 ` [PATCH v4 57/58] objtool/klp: Add test for Clang switch jump tables Song Liu
2026-09-15 23:34 ` [PATCH v4 58/58] objtool/klp: Add test for ThinLTO symbols sharing a demangled name Song Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260915233454.2405019-44-song@kernel.org \
--to=song@kernel.org \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@kernel.org \
--cc=kernel-team@meta.com \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=puranjay@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.