| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # | |
| # As for static branches, a static call key owned by a module must be rejected | |
| # while a vmlinux-owned one is accepted. | |
| . "$(dirname "$0")/../lib.sh" | |
| setup | |
| build_pair static_call.c | |
| has_input_section orig.o .static_call_sites || | |
| probe_skip "fixture produced no .static_call_sites on this arch" | |
| run_diff | |
| assert_patched target | |
| # The accepted half has to show the entry was carried, not just that the | |
| # function was: dropping the section silently would leave the patched call | |
| # unregistered, and "target was cloned" cannot tell the two apart. | |
| assert_section .static_call_sites | |
| assert_reloc_sym .static_call_sites target | |
| rm -f "$workdir/out.o" | |
| build_pair static_call.c -DMODNAME='"klp_testmod"' | |
| run_diff 255 | |
| diff_log | grep -q 'unsupported static call key __SCK__klp_test_call' || | |
| fail "expected rejection, got: $(diff_log | tail -1)" | |
| # A rejection has to leave nothing behind. out.o was removed above, so | |
| # anything here was written by the run which was supposed to refuse. | |
| [ -e "$workdir/out.o" ] && | |
| fail "output object produced for a rejected input" | |
| pass "module-owned static call key rejected, vmlinux-owned accepted" |