test-sysfs.sh 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Copyright (C) 2022 Song Liu <song@kernel.org>
  4. . $(dirname $0)/functions.sh
  5. MOD_LIVEPATCH=test_klp_livepatch
  6. MOD_LIVEPATCH2=test_klp_callbacks_demo
  7. MOD_LIVEPATCH3=test_klp_syscall
  8. setup_config
  9. # - load a livepatch and verifies the sysfs entries work as expected
  10. start_test "sysfs test"
  11. load_lp $MOD_LIVEPATCH
  12. check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
  13. check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
  14. check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1"
  15. check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
  16. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  17. check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
  18. check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
  19. check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
  20. check_sysfs_value "$MOD_LIVEPATCH" "transition" "0"
  21. check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
  22. check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1"
  23. disable_lp $MOD_LIVEPATCH
  24. unload_lp $MOD_LIVEPATCH
  25. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
  26. livepatch: enabling patch '$MOD_LIVEPATCH'
  27. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  28. livepatch: '$MOD_LIVEPATCH': starting patching transition
  29. livepatch: '$MOD_LIVEPATCH': completing patching transition
  30. livepatch: '$MOD_LIVEPATCH': patching complete
  31. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
  32. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  33. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  34. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  35. livepatch: '$MOD_LIVEPATCH': unpatching complete
  36. % rmmod $MOD_LIVEPATCH"
  37. start_test "sysfs test object/patched"
  38. MOD_LIVEPATCH=test_klp_callbacks_demo
  39. MOD_TARGET=test_klp_callbacks_mod
  40. load_lp $MOD_LIVEPATCH
  41. # check the "patch" file changes as target module loads/unloads
  42. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
  43. load_mod $MOD_TARGET
  44. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
  45. unload_mod $MOD_TARGET
  46. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
  47. disable_lp $MOD_LIVEPATCH
  48. unload_lp $MOD_LIVEPATCH
  49. check_result "% insmod test_modules/test_klp_callbacks_demo.ko
  50. livepatch: enabling patch 'test_klp_callbacks_demo'
  51. livepatch: 'test_klp_callbacks_demo': initializing patching transition
  52. test_klp_callbacks_demo: pre_patch_callback: vmlinux
  53. livepatch: 'test_klp_callbacks_demo': starting patching transition
  54. livepatch: 'test_klp_callbacks_demo': completing patching transition
  55. test_klp_callbacks_demo: post_patch_callback: vmlinux
  56. livepatch: 'test_klp_callbacks_demo': patching complete
  57. % insmod test_modules/test_klp_callbacks_mod.ko
  58. livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
  59. test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
  60. test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
  61. test_klp_callbacks_mod: test_klp_callbacks_mod_init
  62. % rmmod test_klp_callbacks_mod
  63. test_klp_callbacks_mod: test_klp_callbacks_mod_exit
  64. test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
  65. livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
  66. test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
  67. % echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled
  68. livepatch: 'test_klp_callbacks_demo': initializing unpatching transition
  69. test_klp_callbacks_demo: pre_unpatch_callback: vmlinux
  70. livepatch: 'test_klp_callbacks_demo': starting unpatching transition
  71. livepatch: 'test_klp_callbacks_demo': completing unpatching transition
  72. test_klp_callbacks_demo: post_unpatch_callback: vmlinux
  73. livepatch: 'test_klp_callbacks_demo': unpatching complete
  74. % rmmod test_klp_callbacks_demo"
  75. start_test "sysfs test replace enabled"
  76. MOD_LIVEPATCH=test_klp_atomic_replace
  77. load_lp $MOD_LIVEPATCH replace=1
  78. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  79. check_sysfs_value "$MOD_LIVEPATCH" "replace" "1"
  80. disable_lp $MOD_LIVEPATCH
  81. unload_lp $MOD_LIVEPATCH
  82. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1
  83. livepatch: enabling patch '$MOD_LIVEPATCH'
  84. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  85. livepatch: '$MOD_LIVEPATCH': starting patching transition
  86. livepatch: '$MOD_LIVEPATCH': completing patching transition
  87. livepatch: '$MOD_LIVEPATCH': patching complete
  88. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
  89. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  90. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  91. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  92. livepatch: '$MOD_LIVEPATCH': unpatching complete
  93. % rmmod $MOD_LIVEPATCH"
  94. start_test "sysfs test replace disabled"
  95. load_lp $MOD_LIVEPATCH replace=0
  96. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  97. check_sysfs_value "$MOD_LIVEPATCH" "replace" "0"
  98. disable_lp $MOD_LIVEPATCH
  99. unload_lp $MOD_LIVEPATCH
  100. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0
  101. livepatch: enabling patch '$MOD_LIVEPATCH'
  102. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  103. livepatch: '$MOD_LIVEPATCH': starting patching transition
  104. livepatch: '$MOD_LIVEPATCH': completing patching transition
  105. livepatch: '$MOD_LIVEPATCH': patching complete
  106. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
  107. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  108. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  109. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  110. livepatch: '$MOD_LIVEPATCH': unpatching complete
  111. % rmmod $MOD_LIVEPATCH"
  112. start_test "sysfs test stack_order value"
  113. load_lp $MOD_LIVEPATCH
  114. check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
  115. load_lp $MOD_LIVEPATCH2
  116. check_sysfs_value "$MOD_LIVEPATCH2" "stack_order" "2"
  117. load_lp $MOD_LIVEPATCH3
  118. check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "3"
  119. disable_lp $MOD_LIVEPATCH2
  120. unload_lp $MOD_LIVEPATCH2
  121. check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
  122. check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "2"
  123. disable_lp $MOD_LIVEPATCH3
  124. unload_lp $MOD_LIVEPATCH3
  125. disable_lp $MOD_LIVEPATCH
  126. unload_lp $MOD_LIVEPATCH
  127. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
  128. livepatch: enabling patch '$MOD_LIVEPATCH'
  129. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  130. livepatch: '$MOD_LIVEPATCH': starting patching transition
  131. livepatch: '$MOD_LIVEPATCH': completing patching transition
  132. livepatch: '$MOD_LIVEPATCH': patching complete
  133. % insmod test_modules/$MOD_LIVEPATCH2.ko
  134. livepatch: enabling patch '$MOD_LIVEPATCH2'
  135. livepatch: '$MOD_LIVEPATCH2': initializing patching transition
  136. $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
  137. livepatch: '$MOD_LIVEPATCH2': starting patching transition
  138. livepatch: '$MOD_LIVEPATCH2': completing patching transition
  139. $MOD_LIVEPATCH2: post_patch_callback: vmlinux
  140. livepatch: '$MOD_LIVEPATCH2': patching complete
  141. % insmod test_modules/$MOD_LIVEPATCH3.ko
  142. livepatch: enabling patch '$MOD_LIVEPATCH3'
  143. livepatch: '$MOD_LIVEPATCH3': initializing patching transition
  144. livepatch: '$MOD_LIVEPATCH3': starting patching transition
  145. livepatch: '$MOD_LIVEPATCH3': completing patching transition
  146. livepatch: '$MOD_LIVEPATCH3': patching complete
  147. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
  148. livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
  149. $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
  150. livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
  151. livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
  152. $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
  153. livepatch: '$MOD_LIVEPATCH2': unpatching complete
  154. % rmmod $MOD_LIVEPATCH2
  155. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled
  156. livepatch: '$MOD_LIVEPATCH3': initializing unpatching transition
  157. livepatch: '$MOD_LIVEPATCH3': starting unpatching transition
  158. livepatch: '$MOD_LIVEPATCH3': completing unpatching transition
  159. livepatch: '$MOD_LIVEPATCH3': unpatching complete
  160. % rmmod $MOD_LIVEPATCH3
  161. % echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
  162. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  163. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  164. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  165. livepatch: '$MOD_LIVEPATCH': unpatching complete
  166. % rmmod $MOD_LIVEPATCH"
  167. exit 0