From: Marcos Paulo de Souza <mpdesouza@suse.com>
To: Josh Poimboeuf <jpoimboe@kernel.org>,
Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>,
Petr Mladek <pmladek@suse.com>,
Joe Lawrence <joe.lawrence@redhat.com>,
Shuah Khan <shuah@kernel.org>
Cc: live-patching@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] selftests: livepatch: Test atomic replace against multiple modules
Date: Mon, 03 Jun 2024 14:31:53 -0300 [thread overview]
Message-ID: <6e0845f56efcffa8ed1e7ef1c63d20e383614e6d.camel@suse.com> (raw)
In-Reply-To: <20240603-lp-atomic-replace-v3-1-9f3b8ace5c9f@suse.com>
On Mon, 2024-06-03 at 14:26 -0300, Marcos Paulo de Souza wrote:
> Adapt the current test-livepatch.sh script to account the number of
> applied livepatches and ensure that an atomic replace livepatch
> disables
> all previously applied livepatches.
>
> Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
> ---
> Changes since v2:
> * Used variables to stop the name of other livepatches applied to
Typo here :)
s/stop/show
> test
> the atomic replace. (Joe)
>
> Changes since v1:
> * Added checks in the existing test-livepatch.sh instead of creating
> a
> new test file. (Joe)
> * Fixed issues reported by ShellCheck (Joe)
> ---
> Changes in v3:
> - EDITME: describe what is new in this series revision.
> - EDITME: use bulletpoints and terse descriptions.
> - Link to v2:
> https://lore.kernel.org/r/20240525-lp-atomic-replace-v2-1-142199bb65a1@suse.com
> ---
> .../testing/selftests/livepatch/test-livepatch.sh | 138
> +++++++++++++--------
> 1 file changed, 89 insertions(+), 49 deletions(-)
>
> diff --git a/tools/testing/selftests/livepatch/test-livepatch.sh
> b/tools/testing/selftests/livepatch/test-livepatch.sh
> index e3455a6b1158..ca770b8c62fc 100755
> --- a/tools/testing/selftests/livepatch/test-livepatch.sh
> +++ b/tools/testing/selftests/livepatch/test-livepatch.sh
> @@ -4,7 +4,9 @@
>
> . $(dirname $0)/functions.sh
>
> -MOD_LIVEPATCH=test_klp_livepatch
> +MOD_LIVEPATCH1=test_klp_livepatch
> +MOD_LIVEPATCH2=test_klp_syscall
> +MOD_LIVEPATCH3=test_klp_callbacks_demo
> MOD_REPLACE=test_klp_atomic_replace
>
> setup_config
> @@ -16,33 +18,33 @@ setup_config
>
> start_test "basic function patching"
>
> -load_lp $MOD_LIVEPATCH
> +load_lp $MOD_LIVEPATCH1
>
> -if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live
> patched" ]] ; then
> +if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH1: this has been live
> patched" ]] ; then
> echo -e "FAIL\n\n"
> die "livepatch kselftest(s) failed"
> fi
>
> -disable_lp $MOD_LIVEPATCH
> -unload_lp $MOD_LIVEPATCH
> +disable_lp $MOD_LIVEPATCH1
> +unload_lp $MOD_LIVEPATCH1
>
> -if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live
> patched" ]] ; then
> +if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH1: this has been live
> patched" ]] ; then
> echo -e "FAIL\n\n"
> die "livepatch kselftest(s) failed"
> fi
>
> -check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
> -livepatch: enabling patch '$MOD_LIVEPATCH'
> -livepatch: '$MOD_LIVEPATCH': initializing patching transition
> -livepatch: '$MOD_LIVEPATCH': starting patching transition
> -livepatch: '$MOD_LIVEPATCH': completing patching transition
> -livepatch: '$MOD_LIVEPATCH': patching complete
> -% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
> -livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
> -livepatch: '$MOD_LIVEPATCH': starting unpatching transition
> -livepatch: '$MOD_LIVEPATCH': completing unpatching transition
> -livepatch: '$MOD_LIVEPATCH': unpatching complete
> -% rmmod $MOD_LIVEPATCH"
> +check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
> +livepatch: enabling patch '$MOD_LIVEPATCH1'
> +livepatch: '$MOD_LIVEPATCH1': initializing patching transition
> +livepatch: '$MOD_LIVEPATCH1': starting patching transition
> +livepatch: '$MOD_LIVEPATCH1': completing patching transition
> +livepatch: '$MOD_LIVEPATCH1': patching complete
> +% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH1/enabled
> +livepatch: '$MOD_LIVEPATCH1': initializing unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': starting unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': completing unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': unpatching complete
> +% rmmod $MOD_LIVEPATCH1"
>
>
> # - load a livepatch that modifies the output from /proc/cmdline and
> @@ -53,7 +55,7 @@ livepatch: '$MOD_LIVEPATCH': unpatching complete
>
> start_test "multiple livepatches"
>
> -load_lp $MOD_LIVEPATCH
> +load_lp $MOD_LIVEPATCH1
>
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
> @@ -69,26 +71,26 @@ unload_lp $MOD_REPLACE
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
>
> -disable_lp $MOD_LIVEPATCH
> -unload_lp $MOD_LIVEPATCH
> +disable_lp $MOD_LIVEPATCH1
> +unload_lp $MOD_LIVEPATCH1
>
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
>
> -check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
> -livepatch: enabling patch '$MOD_LIVEPATCH'
> -livepatch: '$MOD_LIVEPATCH': initializing patching transition
> -livepatch: '$MOD_LIVEPATCH': starting patching transition
> -livepatch: '$MOD_LIVEPATCH': completing patching transition
> -livepatch: '$MOD_LIVEPATCH': patching complete
> -$MOD_LIVEPATCH: this has been live patched
> +check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
> +livepatch: enabling patch '$MOD_LIVEPATCH1'
> +livepatch: '$MOD_LIVEPATCH1': initializing patching transition
> +livepatch: '$MOD_LIVEPATCH1': starting patching transition
> +livepatch: '$MOD_LIVEPATCH1': completing patching transition
> +livepatch: '$MOD_LIVEPATCH1': patching complete
> +$MOD_LIVEPATCH1: this has been live patched
> % insmod test_modules/$MOD_REPLACE.ko replace=0
> livepatch: enabling patch '$MOD_REPLACE'
> livepatch: '$MOD_REPLACE': initializing patching transition
> livepatch: '$MOD_REPLACE': starting patching transition
> livepatch: '$MOD_REPLACE': completing patching transition
> livepatch: '$MOD_REPLACE': patching complete
> -$MOD_LIVEPATCH: this has been live patched
> +$MOD_LIVEPATCH1: this has been live patched
> $MOD_REPLACE: this has been live patched
> % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
> livepatch: '$MOD_REPLACE': initializing unpatching transition
> @@ -96,35 +98,57 @@ livepatch: '$MOD_REPLACE': starting unpatching
> transition
> livepatch: '$MOD_REPLACE': completing unpatching transition
> livepatch: '$MOD_REPLACE': unpatching complete
> % rmmod $MOD_REPLACE
> -$MOD_LIVEPATCH: this has been live patched
> -% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
> -livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
> -livepatch: '$MOD_LIVEPATCH': starting unpatching transition
> -livepatch: '$MOD_LIVEPATCH': completing unpatching transition
> -livepatch: '$MOD_LIVEPATCH': unpatching complete
> -% rmmod $MOD_LIVEPATCH"
> +$MOD_LIVEPATCH1: this has been live patched
> +% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH1/enabled
> +livepatch: '$MOD_LIVEPATCH1': initializing unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': starting unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': completing unpatching transition
> +livepatch: '$MOD_LIVEPATCH1': unpatching complete
> +% rmmod $MOD_LIVEPATCH1"
>
>
> # - load a livepatch that modifies the output from /proc/cmdline and
> # verify correct behavior
> -# - load an atomic replace livepatch and verify that only the second
> is active
> -# - remove the first livepatch and verify that the atomic replace
> livepatch
> -# is still active
> +# - load two addtional livepatches and check the number of livepatch
> modules
> +# applied
> +# - load an atomic replace livepatch and check that the other three
> modules were
> +# disabled
> +# - remove all livepatches besides the atomic replace one and verify
> that the
> +# atomic replace livepatch is still active
> # - remove the atomic replace livepatch and verify that none are
> active
>
> start_test "atomic replace livepatch"
>
> -load_lp $MOD_LIVEPATCH
> +load_lp $MOD_LIVEPATCH1
>
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
>
> +for mod in $MOD_LIVEPATCH2 $MOD_LIVEPATCH3; do
> + load_lp "$mod"
> +done
> +
> +mods=(/sys/kernel/livepatch/*)
> +nmods=${#mods[@]}
> +if [ "$nmods" -ne 3 ]; then
> + die "Expecting three modules listed, found $nmods"
> +fi
> +
> load_lp $MOD_REPLACE replace=1
>
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
>
> -unload_lp $MOD_LIVEPATCH
> +mods=(/sys/kernel/livepatch/*)
> +nmods=${#mods[@]}
> +if [ "$nmods" -ne 1 ]; then
> + die "Expecting only one moduled listed, found $nmods"
> +fi
> +
> +# These modules were disabled by the atomic replace
> +for mod in $MOD_LIVEPATCH3 $MOD_LIVEPATCH2 $MOD_LIVEPATCH1; do
> + unload_lp "$mod"
> +done
>
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
> @@ -135,13 +159,27 @@ unload_lp $MOD_REPLACE
> grep 'live patched' /proc/cmdline > /dev/kmsg
> grep 'live patched' /proc/meminfo > /dev/kmsg
>
> -check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
> -livepatch: enabling patch '$MOD_LIVEPATCH'
> -livepatch: '$MOD_LIVEPATCH': initializing patching transition
> -livepatch: '$MOD_LIVEPATCH': starting patching transition
> -livepatch: '$MOD_LIVEPATCH': completing patching transition
> -livepatch: '$MOD_LIVEPATCH': patching complete
> -$MOD_LIVEPATCH: this has been live patched
> +check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
> +livepatch: enabling patch '$MOD_LIVEPATCH1'
> +livepatch: '$MOD_LIVEPATCH1': initializing patching transition
> +livepatch: '$MOD_LIVEPATCH1': starting patching transition
> +livepatch: '$MOD_LIVEPATCH1': completing patching transition
> +livepatch: '$MOD_LIVEPATCH1': patching complete
> +$MOD_LIVEPATCH1: this has been live patched
> +% insmod test_modules/$MOD_LIVEPATCH2.ko
> +livepatch: enabling patch '$MOD_LIVEPATCH2'
> +livepatch: '$MOD_LIVEPATCH2': initializing patching transition
> +livepatch: '$MOD_LIVEPATCH2': starting patching transition
> +livepatch: '$MOD_LIVEPATCH2': completing patching transition
> +livepatch: '$MOD_LIVEPATCH2': patching complete
> +% insmod test_modules/$MOD_LIVEPATCH3.ko
> +livepatch: enabling patch '$MOD_LIVEPATCH3'
> +livepatch: '$MOD_LIVEPATCH3': initializing patching transition
> +$MOD_LIVEPATCH3: pre_patch_callback: vmlinux
> +livepatch: '$MOD_LIVEPATCH3': starting patching transition
> +livepatch: '$MOD_LIVEPATCH3': completing patching transition
> +$MOD_LIVEPATCH3: post_patch_callback: vmlinux
> +livepatch: '$MOD_LIVEPATCH3': patching complete
> % insmod test_modules/$MOD_REPLACE.ko replace=1
> livepatch: enabling patch '$MOD_REPLACE'
> livepatch: '$MOD_REPLACE': initializing patching transition
> @@ -149,7 +187,9 @@ livepatch: '$MOD_REPLACE': starting patching
> transition
> livepatch: '$MOD_REPLACE': completing patching transition
> livepatch: '$MOD_REPLACE': patching complete
> $MOD_REPLACE: this has been live patched
> -% rmmod $MOD_LIVEPATCH
> +% rmmod $MOD_LIVEPATCH3
> +% rmmod $MOD_LIVEPATCH2
> +% rmmod $MOD_LIVEPATCH1
> $MOD_REPLACE: this has been live patched
> % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
> livepatch: '$MOD_REPLACE': initializing unpatching transition
>
> ---
> base-commit: 6d69b6c12fce479fde7bc06f686212451688a102
> change-id: 20240525-lp-atomic-replace-90b33ed018dc
>
> Best regards,
next prev parent reply other threads:[~2024-06-03 17:32 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 17:26 [PATCH v3] selftests: livepatch: Test atomic replace against multiple modules Marcos Paulo de Souza
2024-06-03 17:31 ` Marcos Paulo de Souza [this message]
2024-06-04 18:10 ` Joe Lawrence
2024-06-04 20:59 ` Marcos Paulo de Souza
2024-06-07 8:26 ` Miroslav Benes
2024-06-18 8:44 ` Petr Mladek
2024-06-18 9:52 ` Petr Mladek
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=6e0845f56efcffa8ed1e7ef1c63d20e383614e6d.camel@suse.com \
--to=mpdesouza@suse.com \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=pmladek@suse.com \
--cc=shuah@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox