test-state.sh 7.4 KB

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