selftests: livepatch: Test livepatching a heavily called syscall
authorMarcos Paulo de Souza <mpdesouza@suse.com>
Fri, 12 Jan 2024 17:43:52 +0000 (14:43 -0300)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 22 Jan 2024 17:29:53 +0000 (10:29 -0700)
commit6a71770442b5b7cf8f880ca1c0a72456c918c757
tree87d53c582666ed3fa5540ac3f841c3303aff34a2
parentc4bbe83d27c2446a033cc0381c3fb6be5e8c41c7
selftests: livepatch: Test livepatching a heavily called syscall

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>
tools/testing/selftests/livepatch/Makefile
tools/testing/selftests/livepatch/test-syscall.sh [new file with mode: 0755]
tools/testing/selftests/livepatch/test_klp-call_getpid.c [new file with mode: 0644]
tools/testing/selftests/livepatch/test_modules/Makefile
tools/testing/selftests/livepatch/test_modules/test_klp_syscall.c [new file with mode: 0644]