| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 |
|
| 6 | . $(dirname $0)/functions.sh
|
| 7 |
|
| 8 | MOD_SYSCALL=test_klp_syscall
|
| 9 |
|
| 10 | setup_config
|
| 11 |
|
| 12 | |
| 13 | |
| 14 | |
| 15 |
|
| 16 | start_test "patch getpid syscall while being heavily hammered"
|
| 17 |
|
| 18 | NPROC=$(getconf _NPROCESSORS_ONLN)
|
| 19 | MAXPROC=128
|
| 20 |
|
| 21 | for i in $(seq 1 $(($NPROC < $MAXPROC ? $NPROC : $MAXPROC))); do
|
| 22 | ./test_klp-call_getpid &
|
| 23 | pids[$i]="$!"
|
| 24 | done
|
| 25 |
|
| 26 | pid_list=$(echo ${pids[@]} | tr ' ' ',')
|
| 27 | load_lp $MOD_SYSCALL klp_pids=$pid_list
|
| 28 |
|
| 29 | |
| 30 | loop_until 'grep -q '^0$' $SYSFS_KERNEL_DIR/$MOD_SYSCALL/npids'
|
| 31 |
|
| 32 | pending_pids=$(cat $SYSFS_KERNEL_DIR/$MOD_SYSCALL/npids)
|
| 33 | log "$MOD_SYSCALL: Remaining not livepatched processes: $pending_pids"
|
| 34 |
|
| 35 | for pid in ${pids[@]}; do
|
| 36 | kill $pid || true
|
| 37 | done
|
| 38 |
|
| 39 | disable_lp $MOD_SYSCALL
|
| 40 | unload_lp $MOD_SYSCALL
|
| 41 |
|
| 42 | check_result "% insmod test_modules/$MOD_SYSCALL.ko klp_pids=$pid_list
|
| 43 | livepatch: enabling patch '$MOD_SYSCALL'
|
| 44 | livepatch: '$MOD_SYSCALL': initializing patching transition
|
| 45 | livepatch: '$MOD_SYSCALL': starting patching transition
|
| 46 | livepatch: '$MOD_SYSCALL': completing patching transition
|
| 47 | livepatch: '$MOD_SYSCALL': patching complete
|
| 48 | $MOD_SYSCALL: Remaining not livepatched processes: 0
|
| 49 | % echo 0 > $SYSFS_KLP_DIR/$MOD_SYSCALL/enabled
|
| 50 | livepatch: '$MOD_SYSCALL': initializing unpatching transition
|
| 51 | livepatch: '$MOD_SYSCALL': starting unpatching transition
|
| 52 | livepatch: '$MOD_SYSCALL': completing unpatching transition
|
| 53 | livepatch: '$MOD_SYSCALL': unpatching complete
|
| 54 | % rmmod $MOD_SYSCALL"
|
| 55 |
|
| 56 | exit 0
|