| 1 | |
| 2 | |
| 3 | |
| 4 |
|
| 5 | . $(dirname $0)/functions.sh
|
| 6 |
|
| 7 | MOD_LIVEPATCH=test_klp_livepatch
|
| 8 | MOD_LIVEPATCH2=test_klp_callbacks_demo
|
| 9 | MOD_LIVEPATCH3=test_klp_syscall
|
| 10 |
|
| 11 | HAS_PATCH_ATTR=0
|
| 12 | HAS_REPLACE_ATTR=0
|
| 13 | HAS_STACK_ORDER_ATTR=0
|
| 14 |
|
| 15 | setup_config
|
| 16 |
|
| 17 | |
| 18 |
|
| 19 | start_test "sysfs test"
|
| 20 |
|
| 21 | load_lp $MOD_LIVEPATCH
|
| 22 |
|
| 23 | check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
|
| 24 | check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
|
| 25 | check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1"
|
| 26 | check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
|
| 27 | check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
|
| 28 | check_sysfs_value "$MOD_LIVEPATCH" "transition" "0"
|
| 29 |
|
| 30 | if does_sysfs_exist "$MOD_LIVEPATCH/vmlinux" "patched"; then
|
| 31 | check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
|
| 32 | check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1"
|
| 33 | HAS_PATCH_ATTR=1
|
| 34 | fi
|
| 35 |
|
| 36 | if does_sysfs_exist "$MOD_LIVEPATCH" "replace"; then
|
| 37 | check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
|
| 38 | HAS_REPLACE_ATTR=1
|
| 39 | fi
|
| 40 |
|
| 41 | if does_sysfs_exist "$MOD_LIVEPATCH" "stack_order"; then
|
| 42 | check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
|
| 43 | check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
| 44 | HAS_STACK_ORDER_ATTR=1
|
| 45 | fi
|
| 46 |
|
| 47 | disable_lp $MOD_LIVEPATCH
|
| 48 |
|
| 49 | unload_lp $MOD_LIVEPATCH
|
| 50 |
|
| 51 | check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
| 52 | livepatch: enabling patch '$MOD_LIVEPATCH'
|
| 53 | livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
| 54 | livepatch: '$MOD_LIVEPATCH': starting patching transition
|
| 55 | livepatch: '$MOD_LIVEPATCH': completing patching transition
|
| 56 | livepatch: '$MOD_LIVEPATCH': patching complete
|
| 57 | % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
|
| 58 | livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
| 59 | livepatch: '$MOD_LIVEPATCH': starting unpatching transition
|
| 60 | livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
| 61 | livepatch: '$MOD_LIVEPATCH': unpatching complete
|
| 62 | % rmmod $MOD_LIVEPATCH"
|
| 63 |
|
| 64 | if [[ "$HAS_PATCH_ATTR" == "1" ]]; then
|
| 65 | start_test "sysfs test object/patched"
|
| 66 |
|
| 67 | MOD_TARGET=test_klp_callbacks_mod
|
| 68 | load_lp $MOD_LIVEPATCH2
|
| 69 |
|
| 70 | |
| 71 | check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "0"
|
| 72 | load_mod $MOD_TARGET
|
| 73 | check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "1"
|
| 74 | unload_mod $MOD_TARGET
|
| 75 | check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "0"
|
| 76 |
|
| 77 | disable_lp $MOD_LIVEPATCH2
|
| 78 | unload_lp $MOD_LIVEPATCH2
|
| 79 |
|
| 80 | check_result "% insmod test_modules/$MOD_LIVEPATCH2.ko
|
| 81 | livepatch: enabling patch '$MOD_LIVEPATCH2'
|
| 82 | livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
| 83 | $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
| 84 | livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
| 85 | livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
| 86 | $MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
| 87 | livepatch: '$MOD_LIVEPATCH2': patching complete
|
| 88 | % insmod test_modules/$MOD_TARGET.ko
|
| 89 | livepatch: applying patch '$MOD_LIVEPATCH2' to loading module '$MOD_TARGET'
|
| 90 | $MOD_LIVEPATCH2: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
| 91 | $MOD_LIVEPATCH2: post_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
| 92 | $MOD_TARGET: test_klp_callbacks_mod_init
|
| 93 | % rmmod $MOD_TARGET
|
| 94 | $MOD_TARGET: test_klp_callbacks_mod_exit
|
| 95 | $MOD_LIVEPATCH2: pre_unpatch_callback: $MOD_TARGET -> [MODULE_STATE_GOING] Going away
|
| 96 | livepatch: reverting patch '$MOD_LIVEPATCH2' on unloading module '$MOD_TARGET'
|
| 97 | $MOD_LIVEPATCH2: post_unpatch_callback: $MOD_TARGET -> [MODULE_STATE_GOING] Going away
|
| 98 | % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
|
| 99 | livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
| 100 | $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
| 101 | livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
| 102 | livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
| 103 | $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
| 104 | livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
| 105 | % rmmod $MOD_LIVEPATCH2"
|
| 106 | fi
|
| 107 |
|
| 108 | if [[ "$HAS_REPLACE_ATTR" == "1" ]]; then
|
| 109 | start_test "sysfs test replace enabled"
|
| 110 |
|
| 111 | MOD_ATOMIC_REPLACE=test_klp_atomic_replace
|
| 112 | load_lp $MOD_ATOMIC_REPLACE replace=1
|
| 113 |
|
| 114 | check_sysfs_rights "$MOD_ATOMIC_REPLACE" "replace" "-r--r--r--"
|
| 115 | check_sysfs_value "$MOD_ATOMIC_REPLACE" "replace" "1"
|
| 116 |
|
| 117 | disable_lp $MOD_ATOMIC_REPLACE
|
| 118 | unload_lp $MOD_ATOMIC_REPLACE
|
| 119 |
|
| 120 | check_result "% insmod test_modules/$MOD_ATOMIC_REPLACE.ko replace=1
|
| 121 | livepatch: enabling patch '$MOD_ATOMIC_REPLACE'
|
| 122 | livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transition
|
| 123 | livepatch: '$MOD_ATOMIC_REPLACE': starting patching transition
|
| 124 | livepatch: '$MOD_ATOMIC_REPLACE': completing patching transition
|
| 125 | livepatch: '$MOD_ATOMIC_REPLACE': patching complete
|
| 126 | % echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabled
|
| 127 | livepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transition
|
| 128 | livepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transition
|
| 129 | livepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transition
|
| 130 | livepatch: '$MOD_ATOMIC_REPLACE': unpatching complete
|
| 131 | % rmmod $MOD_ATOMIC_REPLACE"
|
| 132 |
|
| 133 | start_test "sysfs test replace disabled"
|
| 134 |
|
| 135 | load_lp $MOD_ATOMIC_REPLACE replace=0
|
| 136 |
|
| 137 | check_sysfs_rights "$MOD_ATOMIC_REPLACE" "replace" "-r--r--r--"
|
| 138 | check_sysfs_value "$MOD_ATOMIC_REPLACE" "replace" "0"
|
| 139 |
|
| 140 | disable_lp $MOD_ATOMIC_REPLACE
|
| 141 | unload_lp $MOD_ATOMIC_REPLACE
|
| 142 |
|
| 143 | check_result "% insmod test_modules/$MOD_ATOMIC_REPLACE.ko replace=0
|
| 144 | livepatch: enabling patch '$MOD_ATOMIC_REPLACE'
|
| 145 | livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transition
|
| 146 | livepatch: '$MOD_ATOMIC_REPLACE': starting patching transition
|
| 147 | livepatch: '$MOD_ATOMIC_REPLACE': completing patching transition
|
| 148 | livepatch: '$MOD_ATOMIC_REPLACE': patching complete
|
| 149 | % echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabled
|
| 150 | livepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transition
|
| 151 | livepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transition
|
| 152 | livepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transition
|
| 153 | livepatch: '$MOD_ATOMIC_REPLACE': unpatching complete
|
| 154 | % rmmod $MOD_ATOMIC_REPLACE"
|
| 155 | fi
|
| 156 |
|
| 157 | if [[ "$HAS_STACK_ORDER_ATTR" == "1" ]]; then
|
| 158 | start_test "sysfs test stack_order value"
|
| 159 |
|
| 160 | load_lp $MOD_LIVEPATCH
|
| 161 |
|
| 162 | check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
| 163 |
|
| 164 | load_lp $MOD_LIVEPATCH2
|
| 165 |
|
| 166 | check_sysfs_value "$MOD_LIVEPATCH2" "stack_order" "2"
|
| 167 |
|
| 168 | load_lp $MOD_LIVEPATCH3
|
| 169 |
|
| 170 | check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "3"
|
| 171 |
|
| 172 | disable_lp $MOD_LIVEPATCH2
|
| 173 | unload_lp $MOD_LIVEPATCH2
|
| 174 |
|
| 175 | check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
| 176 | check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "2"
|
| 177 |
|
| 178 | disable_lp $MOD_LIVEPATCH3
|
| 179 | unload_lp $MOD_LIVEPATCH3
|
| 180 |
|
| 181 | disable_lp $MOD_LIVEPATCH
|
| 182 | unload_lp $MOD_LIVEPATCH
|
| 183 |
|
| 184 | check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
| 185 | livepatch: enabling patch '$MOD_LIVEPATCH'
|
| 186 | livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
| 187 | livepatch: '$MOD_LIVEPATCH': starting patching transition
|
| 188 | livepatch: '$MOD_LIVEPATCH': completing patching transition
|
| 189 | livepatch: '$MOD_LIVEPATCH': patching complete
|
| 190 | % insmod test_modules/$MOD_LIVEPATCH2.ko
|
| 191 | livepatch: enabling patch '$MOD_LIVEPATCH2'
|
| 192 | livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
| 193 | $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
| 194 | livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
| 195 | livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
| 196 | $MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
| 197 | livepatch: '$MOD_LIVEPATCH2': patching complete
|
| 198 | % insmod test_modules/$MOD_LIVEPATCH3.ko
|
| 199 | livepatch: enabling patch '$MOD_LIVEPATCH3'
|
| 200 | livepatch: '$MOD_LIVEPATCH3': initializing patching transition
|
| 201 | livepatch: '$MOD_LIVEPATCH3': starting patching transition
|
| 202 | livepatch: '$MOD_LIVEPATCH3': completing patching transition
|
| 203 | livepatch: '$MOD_LIVEPATCH3': patching complete
|
| 204 | % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
|
| 205 | livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
| 206 | $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
| 207 | livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
| 208 | livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
| 209 | $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
| 210 | livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
| 211 | % rmmod $MOD_LIVEPATCH2
|
| 212 | % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled
|
| 213 | livepatch: '$MOD_LIVEPATCH3': initializing unpatching transition
|
| 214 | livepatch: '$MOD_LIVEPATCH3': starting unpatching transition
|
| 215 | livepatch: '$MOD_LIVEPATCH3': completing unpatching transition
|
| 216 | livepatch: '$MOD_LIVEPATCH3': unpatching complete
|
| 217 | % rmmod $MOD_LIVEPATCH3
|
| 218 | % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
|
| 219 | livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
| 220 | livepatch: '$MOD_LIVEPATCH': starting unpatching transition
|
| 221 | livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
| 222 | livepatch: '$MOD_LIVEPATCH': unpatching complete
|
| 223 | % rmmod $MOD_LIVEPATCH"
|
| 224 | fi
|
| 225 |
|
| 226 | exit 0
|