test-sysfs.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. setup_config
  7. # - load a livepatch and verifies the sysfs entries work as expected
  8. start_test "sysfs test"
  9. load_lp $MOD_LIVEPATCH
  10. check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
  11. check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
  12. check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1"
  13. check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
  14. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  15. check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
  16. check_sysfs_value "$MOD_LIVEPATCH" "transition" "0"
  17. check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
  18. check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1"
  19. disable_lp $MOD_LIVEPATCH
  20. unload_lp $MOD_LIVEPATCH
  21. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
  22. livepatch: enabling patch '$MOD_LIVEPATCH'
  23. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  24. livepatch: '$MOD_LIVEPATCH': starting patching transition
  25. livepatch: '$MOD_LIVEPATCH': completing patching transition
  26. livepatch: '$MOD_LIVEPATCH': patching complete
  27. % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
  28. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  29. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  30. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  31. livepatch: '$MOD_LIVEPATCH': unpatching complete
  32. % rmmod $MOD_LIVEPATCH"
  33. start_test "sysfs test object/patched"
  34. MOD_LIVEPATCH=test_klp_callbacks_demo
  35. MOD_TARGET=test_klp_callbacks_mod
  36. load_lp $MOD_LIVEPATCH
  37. # check the "patch" file changes as target module loads/unloads
  38. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
  39. load_mod $MOD_TARGET
  40. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
  41. unload_mod $MOD_TARGET
  42. check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
  43. disable_lp $MOD_LIVEPATCH
  44. unload_lp $MOD_LIVEPATCH
  45. check_result "% insmod test_modules/test_klp_callbacks_demo.ko
  46. livepatch: enabling patch 'test_klp_callbacks_demo'
  47. livepatch: 'test_klp_callbacks_demo': initializing patching transition
  48. test_klp_callbacks_demo: pre_patch_callback: vmlinux
  49. livepatch: 'test_klp_callbacks_demo': starting patching transition
  50. livepatch: 'test_klp_callbacks_demo': completing patching transition
  51. test_klp_callbacks_demo: post_patch_callback: vmlinux
  52. livepatch: 'test_klp_callbacks_demo': patching complete
  53. % insmod test_modules/test_klp_callbacks_mod.ko
  54. livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
  55. test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
  56. test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
  57. test_klp_callbacks_mod: test_klp_callbacks_mod_init
  58. % rmmod test_klp_callbacks_mod
  59. test_klp_callbacks_mod: test_klp_callbacks_mod_exit
  60. test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
  61. livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
  62. test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
  63. % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled
  64. livepatch: 'test_klp_callbacks_demo': initializing unpatching transition
  65. test_klp_callbacks_demo: pre_unpatch_callback: vmlinux
  66. livepatch: 'test_klp_callbacks_demo': starting unpatching transition
  67. livepatch: 'test_klp_callbacks_demo': completing unpatching transition
  68. test_klp_callbacks_demo: post_unpatch_callback: vmlinux
  69. livepatch: 'test_klp_callbacks_demo': unpatching complete
  70. % rmmod test_klp_callbacks_demo"
  71. start_test "sysfs test replace enabled"
  72. MOD_LIVEPATCH=test_klp_atomic_replace
  73. load_lp $MOD_LIVEPATCH replace=1
  74. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  75. check_sysfs_value "$MOD_LIVEPATCH" "replace" "1"
  76. disable_lp $MOD_LIVEPATCH
  77. unload_lp $MOD_LIVEPATCH
  78. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1
  79. livepatch: enabling patch '$MOD_LIVEPATCH'
  80. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  81. livepatch: '$MOD_LIVEPATCH': starting patching transition
  82. livepatch: '$MOD_LIVEPATCH': completing patching transition
  83. livepatch: '$MOD_LIVEPATCH': patching complete
  84. % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
  85. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  86. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  87. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  88. livepatch: '$MOD_LIVEPATCH': unpatching complete
  89. % rmmod $MOD_LIVEPATCH"
  90. start_test "sysfs test replace disabled"
  91. load_lp $MOD_LIVEPATCH replace=0
  92. check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
  93. check_sysfs_value "$MOD_LIVEPATCH" "replace" "0"
  94. disable_lp $MOD_LIVEPATCH
  95. unload_lp $MOD_LIVEPATCH
  96. check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0
  97. livepatch: enabling patch '$MOD_LIVEPATCH'
  98. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  99. livepatch: '$MOD_LIVEPATCH': starting patching transition
  100. livepatch: '$MOD_LIVEPATCH': completing patching transition
  101. livepatch: '$MOD_LIVEPATCH': patching complete
  102. % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
  103. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  104. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  105. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  106. livepatch: '$MOD_LIVEPATCH': unpatching complete
  107. % rmmod $MOD_LIVEPATCH"
  108. exit 0