16a717704SMarcos Paulo de Souza#!/bin/bash 26a717704SMarcos Paulo de Souza# SPDX-License-Identifier: GPL-2.0 36a717704SMarcos Paulo de Souza# Copyright (C) 2023 SUSE 46a717704SMarcos Paulo de Souza# Author: Marcos Paulo de Souza <[email protected]> 56a717704SMarcos Paulo de Souza 66a717704SMarcos Paulo de Souza. $(dirname $0)/functions.sh 76a717704SMarcos Paulo de Souza 86a717704SMarcos Paulo de SouzaMOD_SYSCALL=test_klp_syscall 96a717704SMarcos Paulo de Souza 106a717704SMarcos Paulo de Souzasetup_config 116a717704SMarcos Paulo de Souza 126a717704SMarcos Paulo de Souza# - Start _NRPROC processes calling getpid and load a livepatch to patch the 136a717704SMarcos Paulo de Souza# getpid syscall. Check if all the processes transitioned to the livepatched 146a717704SMarcos Paulo de Souza# state. 156a717704SMarcos Paulo de Souza 166a717704SMarcos Paulo de Souzastart_test "patch getpid syscall while being heavily hammered" 176a717704SMarcos Paulo de Souza 1846edf5d7SRyan SullivanNPROC=$(getconf _NPROCESSORS_ONLN) 1946edf5d7SRyan SullivanMAXPROC=128 2046edf5d7SRyan Sullivan 2146edf5d7SRyan Sullivanfor i in $(seq 1 $(($NPROC < $MAXPROC ? $NPROC : $MAXPROC))); do 226a717704SMarcos Paulo de Souza ./test_klp-call_getpid & 236a717704SMarcos Paulo de Souza pids[$i]="$!" 246a717704SMarcos Paulo de Souzadone 256a717704SMarcos Paulo de Souza 266a717704SMarcos Paulo de Souzapid_list=$(echo ${pids[@]} | tr ' ' ',') 276a717704SMarcos Paulo de Souzaload_lp $MOD_SYSCALL klp_pids=$pid_list 286a717704SMarcos Paulo de Souza 296a717704SMarcos Paulo de Souza# wait for all tasks to transition to patched state 30*59766286SMichael Vetterloop_until 'grep -q '^0$' $SYSFS_KERNEL_DIR/$MOD_SYSCALL/npids' 316a717704SMarcos Paulo de Souza 32*59766286SMichael Vetterpending_pids=$(cat $SYSFS_KERNEL_DIR/$MOD_SYSCALL/npids) 336a717704SMarcos Paulo de Souzalog "$MOD_SYSCALL: Remaining not livepatched processes: $pending_pids" 346a717704SMarcos Paulo de Souza 356a717704SMarcos Paulo de Souzafor pid in ${pids[@]}; do 366a717704SMarcos Paulo de Souza kill $pid || true 376a717704SMarcos Paulo de Souzadone 386a717704SMarcos Paulo de Souza 396a717704SMarcos Paulo de Souzadisable_lp $MOD_SYSCALL 406a717704SMarcos Paulo de Souzaunload_lp $MOD_SYSCALL 416a717704SMarcos Paulo de Souza 426a717704SMarcos Paulo de Souzacheck_result "% insmod test_modules/$MOD_SYSCALL.ko klp_pids=$pid_list 436a717704SMarcos Paulo de Souzalivepatch: enabling patch '$MOD_SYSCALL' 446a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': initializing patching transition 456a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': starting patching transition 466a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': completing patching transition 476a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': patching complete 486a717704SMarcos Paulo de Souza$MOD_SYSCALL: Remaining not livepatched processes: 0 49637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_SYSCALL/enabled 506a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': initializing unpatching transition 516a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': starting unpatching transition 526a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': completing unpatching transition 536a717704SMarcos Paulo de Souzalivepatch: '$MOD_SYSCALL': unpatching complete 546a717704SMarcos Paulo de Souza% rmmod $MOD_SYSCALL" 556a717704SMarcos Paulo de Souza 566a717704SMarcos Paulo de Souzaexit 0 57