0001
0002
0003
0004
0005 . $(dirname $0)/functions.sh
0006
0007 MOD_LIVEPATCH=test_klp_state
0008 MOD_LIVEPATCH2=test_klp_state2
0009 MOD_LIVEPATCH3=test_klp_state3
0010
0011 setup_config
0012
0013
0014
0015
0016 start_test "system state modification"
0017
0018 load_lp $MOD_LIVEPATCH
0019 disable_lp $MOD_LIVEPATCH
0020 unload_lp $MOD_LIVEPATCH
0021
0022 check_result "% modprobe $MOD_LIVEPATCH
0023 livepatch: enabling patch '$MOD_LIVEPATCH'
0024 livepatch: '$MOD_LIVEPATCH': initializing patching transition
0025 $MOD_LIVEPATCH: pre_patch_callback: vmlinux
0026 $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
0027 livepatch: '$MOD_LIVEPATCH': starting patching transition
0028 livepatch: '$MOD_LIVEPATCH': completing patching transition
0029 $MOD_LIVEPATCH: post_patch_callback: vmlinux
0030 $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
0031 livepatch: '$MOD_LIVEPATCH': patching complete
0032 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
0033 livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
0034 $MOD_LIVEPATCH: pre_unpatch_callback: vmlinux
0035 $MOD_LIVEPATCH: restore_console_loglevel: restoring console_loglevel
0036 livepatch: '$MOD_LIVEPATCH': starting unpatching transition
0037 livepatch: '$MOD_LIVEPATCH': completing unpatching transition
0038 $MOD_LIVEPATCH: post_unpatch_callback: vmlinux
0039 $MOD_LIVEPATCH: free_loglevel_state: freeing space for the stored console_loglevel
0040 livepatch: '$MOD_LIVEPATCH': unpatching complete
0041 % rmmod $MOD_LIVEPATCH"
0042
0043
0044
0045
0046 start_test "taking over system state modification"
0047
0048 load_lp $MOD_LIVEPATCH
0049 load_lp $MOD_LIVEPATCH2
0050 unload_lp $MOD_LIVEPATCH
0051 disable_lp $MOD_LIVEPATCH2
0052 unload_lp $MOD_LIVEPATCH2
0053
0054 check_result "% modprobe $MOD_LIVEPATCH
0055 livepatch: enabling patch '$MOD_LIVEPATCH'
0056 livepatch: '$MOD_LIVEPATCH': initializing patching transition
0057 $MOD_LIVEPATCH: pre_patch_callback: vmlinux
0058 $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
0059 livepatch: '$MOD_LIVEPATCH': starting patching transition
0060 livepatch: '$MOD_LIVEPATCH': completing patching transition
0061 $MOD_LIVEPATCH: post_patch_callback: vmlinux
0062 $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
0063 livepatch: '$MOD_LIVEPATCH': patching complete
0064 % modprobe $MOD_LIVEPATCH2
0065 livepatch: enabling patch '$MOD_LIVEPATCH2'
0066 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
0067 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
0068 $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
0069 livepatch: '$MOD_LIVEPATCH2': starting patching transition
0070 livepatch: '$MOD_LIVEPATCH2': completing patching transition
0071 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
0072 $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
0073 livepatch: '$MOD_LIVEPATCH2': patching complete
0074 % rmmod $MOD_LIVEPATCH
0075 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
0076 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
0077 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
0078 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
0079 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
0080 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
0081 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
0082 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
0083 livepatch: '$MOD_LIVEPATCH2': unpatching complete
0084 % rmmod $MOD_LIVEPATCH2"
0085
0086
0087
0088
0089 start_test "compatible cumulative livepatches"
0090
0091 load_lp $MOD_LIVEPATCH2
0092 load_lp $MOD_LIVEPATCH3
0093 unload_lp $MOD_LIVEPATCH2
0094 load_lp $MOD_LIVEPATCH2
0095 disable_lp $MOD_LIVEPATCH2
0096 unload_lp $MOD_LIVEPATCH2
0097 unload_lp $MOD_LIVEPATCH3
0098
0099 check_result "% modprobe $MOD_LIVEPATCH2
0100 livepatch: enabling patch '$MOD_LIVEPATCH2'
0101 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
0102 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
0103 $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
0104 livepatch: '$MOD_LIVEPATCH2': starting patching transition
0105 livepatch: '$MOD_LIVEPATCH2': completing patching transition
0106 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
0107 $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
0108 livepatch: '$MOD_LIVEPATCH2': patching complete
0109 % modprobe $MOD_LIVEPATCH3
0110 livepatch: enabling patch '$MOD_LIVEPATCH3'
0111 livepatch: '$MOD_LIVEPATCH3': initializing patching transition
0112 $MOD_LIVEPATCH3: pre_patch_callback: vmlinux
0113 $MOD_LIVEPATCH3: allocate_loglevel_state: space to store console_loglevel already allocated
0114 livepatch: '$MOD_LIVEPATCH3': starting patching transition
0115 livepatch: '$MOD_LIVEPATCH3': completing patching transition
0116 $MOD_LIVEPATCH3: post_patch_callback: vmlinux
0117 $MOD_LIVEPATCH3: fix_console_loglevel: taking over the console_loglevel change
0118 livepatch: '$MOD_LIVEPATCH3': patching complete
0119 % rmmod $MOD_LIVEPATCH2
0120 % modprobe $MOD_LIVEPATCH2
0121 livepatch: enabling patch '$MOD_LIVEPATCH2'
0122 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
0123 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
0124 $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
0125 livepatch: '$MOD_LIVEPATCH2': starting patching transition
0126 livepatch: '$MOD_LIVEPATCH2': completing patching transition
0127 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
0128 $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
0129 livepatch: '$MOD_LIVEPATCH2': patching complete
0130 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
0131 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
0132 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
0133 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
0134 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
0135 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
0136 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
0137 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
0138 livepatch: '$MOD_LIVEPATCH2': unpatching complete
0139 % rmmod $MOD_LIVEPATCH2
0140 % rmmod $MOD_LIVEPATCH3"
0141
0142
0143
0144
0145 start_test "incompatible cumulative livepatches"
0146
0147 load_lp $MOD_LIVEPATCH2
0148 load_failing_mod $MOD_LIVEPATCH
0149 disable_lp $MOD_LIVEPATCH2
0150 unload_lp $MOD_LIVEPATCH2
0151
0152 check_result "% modprobe $MOD_LIVEPATCH2
0153 livepatch: enabling patch '$MOD_LIVEPATCH2'
0154 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
0155 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
0156 $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
0157 livepatch: '$MOD_LIVEPATCH2': starting patching transition
0158 livepatch: '$MOD_LIVEPATCH2': completing patching transition
0159 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
0160 $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
0161 livepatch: '$MOD_LIVEPATCH2': patching complete
0162 % modprobe $MOD_LIVEPATCH
0163 livepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches.
0164 modprobe: ERROR: could not insert '$MOD_LIVEPATCH': Invalid argument
0165 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
0166 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
0167 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
0168 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
0169 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
0170 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
0171 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
0172 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
0173 livepatch: '$MOD_LIVEPATCH2': unpatching complete
0174 % rmmod $MOD_LIVEPATCH2"
0175
0176 exit 0