1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# Copyright (C) 2019 SUSE 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun. $(dirname $0)/functions.sh 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunMOD_LIVEPATCH=test_klp_state 8*4882a593SmuzhiyunMOD_LIVEPATCH2=test_klp_state2 9*4882a593SmuzhiyunMOD_LIVEPATCH3=test_klp_state3 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunsetup_config 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun# Load and remove a module that modifies the system state 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunstart_test "system state modification" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH 19*4882a593Smuzhiyundisable_lp $MOD_LIVEPATCH 20*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH 21*4882a593Smuzhiyun 22*4882a593Smuzhiyuncheck_result "% modprobe $MOD_LIVEPATCH 23*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH' 24*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': initializing patching transition 25*4882a593Smuzhiyun$MOD_LIVEPATCH: pre_patch_callback: vmlinux 26*4882a593Smuzhiyun$MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel 27*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': starting patching transition 28*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': completing patching transition 29*4882a593Smuzhiyun$MOD_LIVEPATCH: post_patch_callback: vmlinux 30*4882a593Smuzhiyun$MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel 31*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': patching complete 32*4882a593Smuzhiyun% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled 33*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 34*4882a593Smuzhiyun$MOD_LIVEPATCH: pre_unpatch_callback: vmlinux 35*4882a593Smuzhiyun$MOD_LIVEPATCH: restore_console_loglevel: restoring console_loglevel 36*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': starting unpatching transition 37*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 38*4882a593Smuzhiyun$MOD_LIVEPATCH: post_unpatch_callback: vmlinux 39*4882a593Smuzhiyun$MOD_LIVEPATCH: free_loglevel_state: freeing space for the stored console_loglevel 40*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': unpatching complete 41*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH" 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun# Take over system state change by a cumulative patch 45*4882a593Smuzhiyun 46*4882a593Smuzhiyunstart_test "taking over system state modification" 47*4882a593Smuzhiyun 48*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH 49*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH2 50*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH 51*4882a593Smuzhiyundisable_lp $MOD_LIVEPATCH2 52*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH2 53*4882a593Smuzhiyun 54*4882a593Smuzhiyuncheck_result "% modprobe $MOD_LIVEPATCH 55*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH' 56*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': initializing patching transition 57*4882a593Smuzhiyun$MOD_LIVEPATCH: pre_patch_callback: vmlinux 58*4882a593Smuzhiyun$MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel 59*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': starting patching transition 60*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': completing patching transition 61*4882a593Smuzhiyun$MOD_LIVEPATCH: post_patch_callback: vmlinux 62*4882a593Smuzhiyun$MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel 63*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH': patching complete 64*4882a593Smuzhiyun% modprobe $MOD_LIVEPATCH2 65*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH2' 66*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing patching transition 67*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 68*4882a593Smuzhiyun$MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated 69*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting patching transition 70*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing patching transition 71*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_patch_callback: vmlinux 72*4882a593Smuzhiyun$MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change 73*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': patching complete 74*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH 75*4882a593Smuzhiyun% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled 76*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition 77*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux 78*4882a593Smuzhiyun$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel 79*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting unpatching transition 80*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition 81*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux 82*4882a593Smuzhiyun$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel 83*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': unpatching complete 84*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH2" 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun# Take over system state change by a cumulative patch 88*4882a593Smuzhiyun 89*4882a593Smuzhiyunstart_test "compatible cumulative livepatches" 90*4882a593Smuzhiyun 91*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH2 92*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH3 93*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH2 94*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH2 95*4882a593Smuzhiyundisable_lp $MOD_LIVEPATCH2 96*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH2 97*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH3 98*4882a593Smuzhiyun 99*4882a593Smuzhiyuncheck_result "% modprobe $MOD_LIVEPATCH2 100*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH2' 101*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing patching transition 102*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 103*4882a593Smuzhiyun$MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel 104*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting patching transition 105*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing patching transition 106*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_patch_callback: vmlinux 107*4882a593Smuzhiyun$MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel 108*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': patching complete 109*4882a593Smuzhiyun% modprobe $MOD_LIVEPATCH3 110*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH3' 111*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH3': initializing patching transition 112*4882a593Smuzhiyun$MOD_LIVEPATCH3: pre_patch_callback: vmlinux 113*4882a593Smuzhiyun$MOD_LIVEPATCH3: allocate_loglevel_state: space to store console_loglevel already allocated 114*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH3': starting patching transition 115*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH3': completing patching transition 116*4882a593Smuzhiyun$MOD_LIVEPATCH3: post_patch_callback: vmlinux 117*4882a593Smuzhiyun$MOD_LIVEPATCH3: fix_console_loglevel: taking over the console_loglevel change 118*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH3': patching complete 119*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH2 120*4882a593Smuzhiyun% modprobe $MOD_LIVEPATCH2 121*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH2' 122*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing patching transition 123*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 124*4882a593Smuzhiyun$MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated 125*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting patching transition 126*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing patching transition 127*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_patch_callback: vmlinux 128*4882a593Smuzhiyun$MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change 129*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': patching complete 130*4882a593Smuzhiyun% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled 131*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition 132*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux 133*4882a593Smuzhiyun$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel 134*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting unpatching transition 135*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition 136*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux 137*4882a593Smuzhiyun$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel 138*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': unpatching complete 139*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH2 140*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH3" 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun# Failure caused by incompatible cumulative livepatches 144*4882a593Smuzhiyun 145*4882a593Smuzhiyunstart_test "incompatible cumulative livepatches" 146*4882a593Smuzhiyun 147*4882a593Smuzhiyunload_lp $MOD_LIVEPATCH2 148*4882a593Smuzhiyunload_failing_mod $MOD_LIVEPATCH 149*4882a593Smuzhiyundisable_lp $MOD_LIVEPATCH2 150*4882a593Smuzhiyununload_lp $MOD_LIVEPATCH2 151*4882a593Smuzhiyun 152*4882a593Smuzhiyuncheck_result "% modprobe $MOD_LIVEPATCH2 153*4882a593Smuzhiyunlivepatch: enabling patch '$MOD_LIVEPATCH2' 154*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing patching transition 155*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 156*4882a593Smuzhiyun$MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel 157*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting patching transition 158*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing patching transition 159*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_patch_callback: vmlinux 160*4882a593Smuzhiyun$MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel 161*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': patching complete 162*4882a593Smuzhiyun% modprobe $MOD_LIVEPATCH 163*4882a593Smuzhiyunlivepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches. 164*4882a593Smuzhiyunmodprobe: ERROR: could not insert '$MOD_LIVEPATCH': Invalid argument 165*4882a593Smuzhiyun% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled 166*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition 167*4882a593Smuzhiyun$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux 168*4882a593Smuzhiyun$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel 169*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': starting unpatching transition 170*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition 171*4882a593Smuzhiyun$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux 172*4882a593Smuzhiyun$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel 173*4882a593Smuzhiyunlivepatch: '$MOD_LIVEPATCH2': unpatching complete 174*4882a593Smuzhiyun% rmmod $MOD_LIVEPATCH2" 175*4882a593Smuzhiyun 176*4882a593Smuzhiyunexit 0 177