aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/jump_label.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
index ee11b7dfbfbb..26d5a55a2736 100644
--- a/arch/x86/kernel/jump_label.c
+++ b/arch/x86/kernel/jump_label.c
@@ -42,15 +42,27 @@ static void __jump_label_transform(struct jump_entry *entry,
42 int init) 42 int init)
43{ 43{
44 union jump_code_union code; 44 union jump_code_union code;
45 const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
45 const unsigned char *ideal_nop = ideal_nops[NOP_ATOMIC5]; 46 const unsigned char *ideal_nop = ideal_nops[NOP_ATOMIC5];
46 47
47 if (type == JUMP_LABEL_ENABLE) { 48 if (type == JUMP_LABEL_ENABLE) {
48 /* 49 if (init) {
49 * We are enabling this jump label. If it is not a nop 50 /*
50 * then something must have gone wrong. 51 * Jump label is enabled for the first time.
51 */ 52 * So we expect a default_nop...
52 if (unlikely(memcmp((void *)entry->code, ideal_nop, 5) != 0)) 53 */
53 bug_at((void *)entry->code, __LINE__); 54 if (unlikely(memcmp((void *)entry->code, default_nop, 5)
55 != 0))
56 bug_at((void *)entry->code, __LINE__);
57 } else {
58 /*
59 * ...otherwise expect an ideal_nop. Otherwise
60 * something went horribly wrong.
61 */
62 if (unlikely(memcmp((void *)entry->code, ideal_nop, 5)
63 != 0))
64 bug_at((void *)entry->code, __LINE__);
65 }
54 66
55 code.jump = 0xe9; 67 code.jump = 0xe9;
56 code.offset = entry->target - 68 code.offset = entry->target -
@@ -63,7 +75,6 @@ static void __jump_label_transform(struct jump_entry *entry,
63 * are converting the default nop to the ideal nop. 75 * are converting the default nop to the ideal nop.
64 */ 76 */
65 if (init) { 77 if (init) {
66 const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
67 if (unlikely(memcmp((void *)entry->code, default_nop, 5) != 0)) 78 if (unlikely(memcmp((void *)entry->code, default_nop, 5) != 0))
68 bug_at((void *)entry->code, __LINE__); 79 bug_at((void *)entry->code, __LINE__);
69 } else { 80 } else {