Re: [PATCH v3 0/3] livepatch: Move modules to selftests and add a new test

From: Marcos Paulo de Souza
Date: Thu Nov 30 2023 - 08:42:16 EST


Humble ping :)

On Tue, Oct 31, 2023 at 06:10:50PM -0300, Marcos Paulo de Souza wrote:
> This patchset moves the current kernel testing livepatch modules from
> lib/livepatches to tools/testing/selftest/livepatch/test_modules, and compiles
> them as out-of-tree modules before testing.
>
> There is also a new test being added. This new test exercises multiple processes
> calling a syscall, while a livepatch patched the syscall.
>
> Why this move is an improvement:
> * The modules are now compiled as out-of-tree modules against the current
> running kernel, making them capable of being tested on different systems with
> newer or older kernels.
> * Such approach now needs kernel-devel package to be installed, since they are
> out-of-tree modules. These can be generated by running "make rpm-pkg" in the
> kernel source.
>
> What needs to be solved:
> * Currently gen_tar only packages the resulting binaries of the tests, and not
> the sources. For the current approach, the newly added modules would be
> compiled and then packaged. It works when testing on a system with the same
> kernel version. But it will fail when running on a machine with different kernel
> version, since module was compiled against the kernel currently running.
>
> This is not a new problem, just aligning the expectations. For the current
> approach to be truly system agnostic gen_tar would need to include the module
> and program sources to be compiled in the target systems.
>
> I'm sending the patches now so it can be discussed before Plumbers.
>
> Thanks in advance!
> Marcos
>
> To: Shuah Khan <shuah@xxxxxxxxxx>
> To: Jonathan Corbet <corbet@xxxxxxx>
> To: Heiko Carstens <hca@xxxxxxxxxxxxx>
> To: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> To: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
> To: Christian Borntraeger <borntraeger@xxxxxxxxxxxxx>
> To: Sven Schnelle <svens@xxxxxxxxxxxxx>
> To: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> To: Jiri Kosina <jikos@xxxxxxxxxx>
> To: Miroslav Benes <mbenes@xxxxxxx>
> To: Petr Mladek <pmladek@xxxxxxxx>
> To: Joe Lawrence <joe.lawrence@xxxxxxxxxx>
> Cc: linux-kselftest@xxxxxxxxxxxxxxx
> Cc: linux-doc@xxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Cc: linux-s390@xxxxxxxxxxxxxxx
> Cc: live-patching@xxxxxxxxxxxxxxx
> Signed-off-by: Marcos Paulo de Souza <mpdesouza@xxxxxxxx>
>
> Changes in v3:
> * Rebased on top of v6.6-rc5
> * The commits messages were improved (Thanks Petr!)
> * Created TEST_GEN_MODS_DIR variable to point to a directly that contains kernel
> modules, and adapt selftests to build it before running the test.
> * Moved test_klp-call_getpid out of test_programs, since the gen_tar
> would just copy the generated test programs to the livepatches dir,
> and so scripts relying on test_programs/test_klp-call_getpid will fail.
> * Added a module_param for klp_pids, describing it's usage.
> * Simplified the call_getpid program to ignore the return of getpid syscall,
> since we only want to make sure the process transitions correctly to the
> patched stated
> * The test-syscall.sh not prints a log message showing the number of remaining
> processes to transition into to livepatched state, and check_output expects it
> to be 0.
> * Added MODULE_AUTHOR and MODULE_DESCRIPTION to test_klp_syscall.c
>
> The v2 can be seen here:
> https://lore.kernel.org/linux-kselftest/20220630141226.2802-1-mpdesouza@xxxxxxxx/
>
> ---
> Marcos Paulo de Souza (3):
> kselftests: lib.mk: Add TEST_GEN_MODS_DIR variable
> livepatch: Move tests from lib/livepatch to selftests/livepatch
> selftests: livepatch: Test livepatching a heavily called syscall
>
> Documentation/dev-tools/kselftest.rst | 4 +
> arch/s390/configs/debug_defconfig | 1 -
> arch/s390/configs/defconfig | 1 -
> lib/Kconfig.debug | 22 ----
> lib/Makefile | 2 -
> lib/livepatch/Makefile | 14 ---
> tools/testing/selftests/lib.mk | 20 +++-
> tools/testing/selftests/livepatch/Makefile | 5 +-
> tools/testing/selftests/livepatch/README | 17 +--
> tools/testing/selftests/livepatch/config | 1 -
> tools/testing/selftests/livepatch/functions.sh | 34 +++---
> .../testing/selftests/livepatch/test-callbacks.sh | 50 ++++-----
> tools/testing/selftests/livepatch/test-ftrace.sh | 6 +-
> .../testing/selftests/livepatch/test-livepatch.sh | 10 +-
> .../selftests/livepatch/test-shadow-vars.sh | 2 +-
> tools/testing/selftests/livepatch/test-state.sh | 18 ++--
> tools/testing/selftests/livepatch/test-syscall.sh | 53 ++++++++++
> tools/testing/selftests/livepatch/test-sysfs.sh | 6 +-
> .../selftests/livepatch/test_klp-call_getpid.c | 44 ++++++++
> .../selftests/livepatch/test_modules/Makefile | 20 ++++
> .../test_modules}/test_klp_atomic_replace.c | 0
> .../test_modules}/test_klp_callbacks_busy.c | 0
> .../test_modules}/test_klp_callbacks_demo.c | 0
> .../test_modules}/test_klp_callbacks_demo2.c | 0
> .../test_modules}/test_klp_callbacks_mod.c | 0
> .../livepatch/test_modules}/test_klp_livepatch.c | 0
> .../livepatch/test_modules}/test_klp_shadow_vars.c | 0
> .../livepatch/test_modules}/test_klp_state.c | 0
> .../livepatch/test_modules}/test_klp_state2.c | 0
> .../livepatch/test_modules}/test_klp_state3.c | 0
> .../livepatch/test_modules/test_klp_syscall.c | 116 +++++++++++++++++++++
> 31 files changed, 325 insertions(+), 121 deletions(-)
> ---
> base-commit: 6489bf2e1df1c84e9bcd4694029ff35b39fd3397
> change-id: 20231031-send-lp-kselftests-4c917dcd4565
>
> Best regards,
> --
> Marcos Paulo de Souza <mpdesouza@xxxxxxxx>
>