test-livepatch.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Copyright (C) 2018 Joe Lawrence <[email protected]>
  4. . $(dirname $0)/functions.sh
  5. MOD_LIVEPATCH=test_klp_livepatch
  6. MOD_REPLACE=test_klp_atomic_replace
  7. setup_config
  8. # - load a livepatch that modifies the output from /proc/cmdline and
  9. # verify correct behavior
  10. # - unload the livepatch and make sure the patch was removed
  11. start_test "basic function patching"
  12. load_lp $MOD_LIVEPATCH
  13. if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
  14. echo -e "FAIL\n\n"
  15. die "livepatch kselftest(s) failed"
  16. fi
  17. disable_lp $MOD_LIVEPATCH
  18. unload_lp $MOD_LIVEPATCH
  19. if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then
  20. echo -e "FAIL\n\n"
  21. die "livepatch kselftest(s) failed"
  22. fi
  23. check_result "% modprobe $MOD_LIVEPATCH
  24. livepatch: enabling patch '$MOD_LIVEPATCH'
  25. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  26. livepatch: '$MOD_LIVEPATCH': starting patching transition
  27. livepatch: '$MOD_LIVEPATCH': completing patching transition
  28. livepatch: '$MOD_LIVEPATCH': patching complete
  29. % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
  30. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  31. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  32. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  33. livepatch: '$MOD_LIVEPATCH': unpatching complete
  34. % rmmod $MOD_LIVEPATCH"
  35. # - load a livepatch that modifies the output from /proc/cmdline and
  36. # verify correct behavior
  37. # - load another livepatch and verify that both livepatches are active
  38. # - unload the second livepatch and verify that the first is still active
  39. # - unload the first livepatch and verify none are active
  40. start_test "multiple livepatches"
  41. load_lp $MOD_LIVEPATCH
  42. grep 'live patched' /proc/cmdline > /dev/kmsg
  43. grep 'live patched' /proc/meminfo > /dev/kmsg
  44. load_lp $MOD_REPLACE replace=0
  45. grep 'live patched' /proc/cmdline > /dev/kmsg
  46. grep 'live patched' /proc/meminfo > /dev/kmsg
  47. disable_lp $MOD_REPLACE
  48. unload_lp $MOD_REPLACE
  49. grep 'live patched' /proc/cmdline > /dev/kmsg
  50. grep 'live patched' /proc/meminfo > /dev/kmsg
  51. disable_lp $MOD_LIVEPATCH
  52. unload_lp $MOD_LIVEPATCH
  53. grep 'live patched' /proc/cmdline > /dev/kmsg
  54. grep 'live patched' /proc/meminfo > /dev/kmsg
  55. check_result "% modprobe $MOD_LIVEPATCH
  56. livepatch: enabling patch '$MOD_LIVEPATCH'
  57. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  58. livepatch: '$MOD_LIVEPATCH': starting patching transition
  59. livepatch: '$MOD_LIVEPATCH': completing patching transition
  60. livepatch: '$MOD_LIVEPATCH': patching complete
  61. $MOD_LIVEPATCH: this has been live patched
  62. % modprobe $MOD_REPLACE replace=0
  63. livepatch: enabling patch '$MOD_REPLACE'
  64. livepatch: '$MOD_REPLACE': initializing patching transition
  65. livepatch: '$MOD_REPLACE': starting patching transition
  66. livepatch: '$MOD_REPLACE': completing patching transition
  67. livepatch: '$MOD_REPLACE': patching complete
  68. $MOD_LIVEPATCH: this has been live patched
  69. $MOD_REPLACE: this has been live patched
  70. % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
  71. livepatch: '$MOD_REPLACE': initializing unpatching transition
  72. livepatch: '$MOD_REPLACE': starting unpatching transition
  73. livepatch: '$MOD_REPLACE': completing unpatching transition
  74. livepatch: '$MOD_REPLACE': unpatching complete
  75. % rmmod $MOD_REPLACE
  76. $MOD_LIVEPATCH: this has been live patched
  77. % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
  78. livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
  79. livepatch: '$MOD_LIVEPATCH': starting unpatching transition
  80. livepatch: '$MOD_LIVEPATCH': completing unpatching transition
  81. livepatch: '$MOD_LIVEPATCH': unpatching complete
  82. % rmmod $MOD_LIVEPATCH"
  83. # - load a livepatch that modifies the output from /proc/cmdline and
  84. # verify correct behavior
  85. # - load an atomic replace livepatch and verify that only the second is active
  86. # - remove the first livepatch and verify that the atomic replace livepatch
  87. # is still active
  88. # - remove the atomic replace livepatch and verify that none are active
  89. start_test "atomic replace livepatch"
  90. load_lp $MOD_LIVEPATCH
  91. grep 'live patched' /proc/cmdline > /dev/kmsg
  92. grep 'live patched' /proc/meminfo > /dev/kmsg
  93. load_lp $MOD_REPLACE replace=1
  94. grep 'live patched' /proc/cmdline > /dev/kmsg
  95. grep 'live patched' /proc/meminfo > /dev/kmsg
  96. unload_lp $MOD_LIVEPATCH
  97. grep 'live patched' /proc/cmdline > /dev/kmsg
  98. grep 'live patched' /proc/meminfo > /dev/kmsg
  99. disable_lp $MOD_REPLACE
  100. unload_lp $MOD_REPLACE
  101. grep 'live patched' /proc/cmdline > /dev/kmsg
  102. grep 'live patched' /proc/meminfo > /dev/kmsg
  103. check_result "% modprobe $MOD_LIVEPATCH
  104. livepatch: enabling patch '$MOD_LIVEPATCH'
  105. livepatch: '$MOD_LIVEPATCH': initializing patching transition
  106. livepatch: '$MOD_LIVEPATCH': starting patching transition
  107. livepatch: '$MOD_LIVEPATCH': completing patching transition
  108. livepatch: '$MOD_LIVEPATCH': patching complete
  109. $MOD_LIVEPATCH: this has been live patched
  110. % modprobe $MOD_REPLACE replace=1
  111. livepatch: enabling patch '$MOD_REPLACE'
  112. livepatch: '$MOD_REPLACE': initializing patching transition
  113. livepatch: '$MOD_REPLACE': starting patching transition
  114. livepatch: '$MOD_REPLACE': completing patching transition
  115. livepatch: '$MOD_REPLACE': patching complete
  116. $MOD_REPLACE: this has been live patched
  117. % rmmod $MOD_LIVEPATCH
  118. $MOD_REPLACE: this has been live patched
  119. % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
  120. livepatch: '$MOD_REPLACE': initializing unpatching transition
  121. livepatch: '$MOD_REPLACE': starting unpatching transition
  122. livepatch: '$MOD_REPLACE': completing unpatching transition
  123. livepatch: '$MOD_REPLACE': unpatching complete
  124. % rmmod $MOD_REPLACE"
  125. exit 0