1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker# Copyright (C) 2018 Joe Lawrence <[email protected]> 4*053f45beSAndroid Build Coastguard Worker 5*053f45beSAndroid Build Coastguard Worker. $(dirname $0)/functions.sh 6*053f45beSAndroid Build Coastguard Worker 7*053f45beSAndroid Build Coastguard WorkerMOD_LIVEPATCH=test_klp_livepatch 8*053f45beSAndroid Build Coastguard WorkerMOD_REPLACE=test_klp_atomic_replace 9*053f45beSAndroid Build Coastguard Worker 10*053f45beSAndroid Build Coastguard Workersetup_config 11*053f45beSAndroid Build Coastguard Worker 12*053f45beSAndroid Build Coastguard Worker 13*053f45beSAndroid Build Coastguard Worker# - load a livepatch that modifies the output from /proc/cmdline and 14*053f45beSAndroid Build Coastguard Worker# verify correct behavior 15*053f45beSAndroid Build Coastguard Worker# - unload the livepatch and make sure the patch was removed 16*053f45beSAndroid Build Coastguard Worker 17*053f45beSAndroid Build Coastguard Workerstart_test "basic function patching" 18*053f45beSAndroid Build Coastguard Worker 19*053f45beSAndroid Build Coastguard Workerload_lp $MOD_LIVEPATCH 20*053f45beSAndroid Build Coastguard Worker 21*053f45beSAndroid Build Coastguard Workerif [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then 22*053f45beSAndroid Build Coastguard Worker echo -e "FAIL\n\n" 23*053f45beSAndroid Build Coastguard Worker die "livepatch kselftest(s) failed" 24*053f45beSAndroid Build Coastguard Workerfi 25*053f45beSAndroid Build Coastguard Worker 26*053f45beSAndroid Build Coastguard Workerdisable_lp $MOD_LIVEPATCH 27*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_LIVEPATCH 28*053f45beSAndroid Build Coastguard Worker 29*053f45beSAndroid Build Coastguard Workerif [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then 30*053f45beSAndroid Build Coastguard Worker echo -e "FAIL\n\n" 31*053f45beSAndroid Build Coastguard Worker die "livepatch kselftest(s) failed" 32*053f45beSAndroid Build Coastguard Workerfi 33*053f45beSAndroid Build Coastguard Worker 34*053f45beSAndroid Build Coastguard Workercheck_result "% modprobe $MOD_LIVEPATCH 35*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_LIVEPATCH' 36*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing patching transition 37*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting patching transition 38*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing patching transition 39*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': patching complete 40*053f45beSAndroid Build Coastguard Worker% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled 41*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 42*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting unpatching transition 43*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 44*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': unpatching complete 45*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_LIVEPATCH" 46*053f45beSAndroid Build Coastguard Worker 47*053f45beSAndroid Build Coastguard Worker 48*053f45beSAndroid Build Coastguard Worker# - load a livepatch that modifies the output from /proc/cmdline and 49*053f45beSAndroid Build Coastguard Worker# verify correct behavior 50*053f45beSAndroid Build Coastguard Worker# - load another livepatch and verify that both livepatches are active 51*053f45beSAndroid Build Coastguard Worker# - unload the second livepatch and verify that the first is still active 52*053f45beSAndroid Build Coastguard Worker# - unload the first livepatch and verify none are active 53*053f45beSAndroid Build Coastguard Worker 54*053f45beSAndroid Build Coastguard Workerstart_test "multiple livepatches" 55*053f45beSAndroid Build Coastguard Worker 56*053f45beSAndroid Build Coastguard Workerload_lp $MOD_LIVEPATCH 57*053f45beSAndroid Build Coastguard Worker 58*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 59*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 60*053f45beSAndroid Build Coastguard Worker 61*053f45beSAndroid Build Coastguard Workerload_lp $MOD_REPLACE replace=0 62*053f45beSAndroid Build Coastguard Worker 63*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 64*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 65*053f45beSAndroid Build Coastguard Worker 66*053f45beSAndroid Build Coastguard Workerdisable_lp $MOD_REPLACE 67*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_REPLACE 68*053f45beSAndroid Build Coastguard Worker 69*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 70*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 71*053f45beSAndroid Build Coastguard Worker 72*053f45beSAndroid Build Coastguard Workerdisable_lp $MOD_LIVEPATCH 73*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_LIVEPATCH 74*053f45beSAndroid Build Coastguard Worker 75*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 76*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 77*053f45beSAndroid Build Coastguard Worker 78*053f45beSAndroid Build Coastguard Workercheck_result "% modprobe $MOD_LIVEPATCH 79*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_LIVEPATCH' 80*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing patching transition 81*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting patching transition 82*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing patching transition 83*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': patching complete 84*053f45beSAndroid Build Coastguard Worker$MOD_LIVEPATCH: this has been live patched 85*053f45beSAndroid Build Coastguard Worker% modprobe $MOD_REPLACE replace=0 86*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_REPLACE' 87*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': initializing patching transition 88*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': starting patching transition 89*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': completing patching transition 90*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': patching complete 91*053f45beSAndroid Build Coastguard Worker$MOD_LIVEPATCH: this has been live patched 92*053f45beSAndroid Build Coastguard Worker$MOD_REPLACE: this has been live patched 93*053f45beSAndroid Build Coastguard Worker% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled 94*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': initializing unpatching transition 95*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': starting unpatching transition 96*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': completing unpatching transition 97*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': unpatching complete 98*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_REPLACE 99*053f45beSAndroid Build Coastguard Worker$MOD_LIVEPATCH: this has been live patched 100*053f45beSAndroid Build Coastguard Worker% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled 101*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 102*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting unpatching transition 103*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 104*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': unpatching complete 105*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_LIVEPATCH" 106*053f45beSAndroid Build Coastguard Worker 107*053f45beSAndroid Build Coastguard Worker 108*053f45beSAndroid Build Coastguard Worker# - load a livepatch that modifies the output from /proc/cmdline and 109*053f45beSAndroid Build Coastguard Worker# verify correct behavior 110*053f45beSAndroid Build Coastguard Worker# - load an atomic replace livepatch and verify that only the second is active 111*053f45beSAndroid Build Coastguard Worker# - remove the first livepatch and verify that the atomic replace livepatch 112*053f45beSAndroid Build Coastguard Worker# is still active 113*053f45beSAndroid Build Coastguard Worker# - remove the atomic replace livepatch and verify that none are active 114*053f45beSAndroid Build Coastguard Worker 115*053f45beSAndroid Build Coastguard Workerstart_test "atomic replace livepatch" 116*053f45beSAndroid Build Coastguard Worker 117*053f45beSAndroid Build Coastguard Workerload_lp $MOD_LIVEPATCH 118*053f45beSAndroid Build Coastguard Worker 119*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 120*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 121*053f45beSAndroid Build Coastguard Worker 122*053f45beSAndroid Build Coastguard Workerload_lp $MOD_REPLACE replace=1 123*053f45beSAndroid Build Coastguard Worker 124*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 125*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 126*053f45beSAndroid Build Coastguard Worker 127*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_LIVEPATCH 128*053f45beSAndroid Build Coastguard Worker 129*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 130*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 131*053f45beSAndroid Build Coastguard Worker 132*053f45beSAndroid Build Coastguard Workerdisable_lp $MOD_REPLACE 133*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_REPLACE 134*053f45beSAndroid Build Coastguard Worker 135*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/cmdline > /dev/kmsg 136*053f45beSAndroid Build Coastguard Workergrep 'live patched' /proc/meminfo > /dev/kmsg 137*053f45beSAndroid Build Coastguard Worker 138*053f45beSAndroid Build Coastguard Workercheck_result "% modprobe $MOD_LIVEPATCH 139*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_LIVEPATCH' 140*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing patching transition 141*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting patching transition 142*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing patching transition 143*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': patching complete 144*053f45beSAndroid Build Coastguard Worker$MOD_LIVEPATCH: this has been live patched 145*053f45beSAndroid Build Coastguard Worker% modprobe $MOD_REPLACE replace=1 146*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_REPLACE' 147*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': initializing patching transition 148*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': starting patching transition 149*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': completing patching transition 150*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': patching complete 151*053f45beSAndroid Build Coastguard Worker$MOD_REPLACE: this has been live patched 152*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_LIVEPATCH 153*053f45beSAndroid Build Coastguard Worker$MOD_REPLACE: this has been live patched 154*053f45beSAndroid Build Coastguard Worker% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled 155*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': initializing unpatching transition 156*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': starting unpatching transition 157*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': completing unpatching transition 158*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_REPLACE': unpatching complete 159*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_REPLACE" 160*053f45beSAndroid Build Coastguard Worker 161*053f45beSAndroid Build Coastguard Worker 162*053f45beSAndroid Build Coastguard Workerexit 0 163