mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
6a71770442
The test proves that a syscall can be livepatched. It is interesting because syscalls are called a tricky way. Also the process gets livepatched either when sleeping in the userspace or when entering or leaving the kernel space. The livepatch is a bit tricky: 1. The syscall function name is architecture specific. Also ARCH_HAS_SYSCALL_WRAPPER must be taken in account. 2. The syscall must stay working the same way for other processes on the system. It is solved by decrementing a counter only for PIDs of the test processes. It means that the test processes has to call the livepatched syscall at least once. The test creates one userspace process per online cpu. The processes are calling getpid in a busy loop. The intention is to create random locations when the livepatch gets enabled. Nothing is guarantted. The magic is in the randomness. Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> |
||
---|---|---|
.. | ||
test_modules | ||
config | ||
functions.sh | ||
Makefile | ||
README | ||
settings | ||
test_klp-call_getpid.c | ||
test-callbacks.sh | ||
test-ftrace.sh | ||
test-livepatch.sh | ||
test-shadow-vars.sh | ||
test-state.sh | ||
test-syscall.sh | ||
test-sysfs.sh |
==================== Livepatch Self Tests ==================== This is a small set of sanity tests for the kernel livepatching. The test suite loads and unloads several test kernel modules to verify livepatch behavior. Debug information is logged to the kernel's message buffer and parsed for expected messages. (Note: the tests will compare the message buffer for only the duration of each individual test.) Config ------ Set CONFIG_LIVEPATCH=y option and it's prerequisites. Building the tests ------------------ To only build the tests without running them, run: % make -C tools/testing/selftests/livepatch The command above will compile all test modules and test programs, making them ready to be packaged if so desired. Running the tests ----------------- Test kernel modules are built before running the livepatch selftests. The modules are located under test_modules directory, and are built as out-of-tree modules. This is specially useful since the same sources can be built and tested on systems with different kABI, ensuring they the tests are backwards compatible. The modules will be loaded by the test scripts using insmod. To run the livepatch selftests, from the top of the kernel source tree: % make -C tools/testing/selftests TARGETS=livepatch run_tests or % make kselftest TARGETS=livepatch Adding tests ------------ See the common functions.sh file for the existing collection of utility functions, most importantly setup_config(), start_test() and check_result(). The latter function greps the kernel's ring buffer for "livepatch:" and "test_klp" strings, so tests be sure to include one of those strings for result comparison. Other utility functions include general module loading and livepatch loading helpers (waiting for patch transitions, sysfs entries, etc.)