lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 11 Sep 2013 10:25:45 -0400 From: Konrad Rzeszutek Wilk <konrad.wilk@...cle.com> To: "H. Peter Anvin" <hpa@...ux.intel.com> Cc: Linus Torvalds <torvalds@...ux-foundation.org>, "H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...e.hu>, Jason Baron <jbaron@...hat.com>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, Steven Rostedt <rostedt@...dmis.org>, Thomas Gleixner <tglx@...utronix.de>, boris.ostrovsky@...cle.com, david.vrabel@...rix.com Subject: Re: Regression :-) Re: [GIT PULL RESEND] x86/jumpmplabel changes for v3.12-rc1 > It seems to imply line 53 is the originating bug, so that would be: > > 47 if (type == JUMP_LABEL_ENABLE) { > 48 /* > 49 * We are enabling this jump label. If it is not a nop > 50 * then something must have gone wrong. > 51 */ > 52 if (unlikely(memcmp((void *)entry->code, ideal_nop, 5) != 0)) > 53 bug_at((void *)entry->code, __LINE__); > > But it is a NOP isn't it? The code is > > Unexpected op at trace_clock_global+0x6b/0x120 [ffffffff8113a21b] (0f 1f 44 00 00) 53 > > Perhaps the ideal_nop has not been set yet? > And this looks to fix it for me. diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c index ee11b7d..d688348 100644 --- a/arch/x86/kernel/jump_label.c +++ b/arch/x86/kernel/jump_label.c @@ -44,13 +44,20 @@ static void __jump_label_transform(struct jump_entry *entry, union jump_code_union code; const unsigned char *ideal_nop = ideal_nops[NOP_ATOMIC5]; + if (init) { + const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP }; + if (unlikely(memcmp((void *)entry->code, default_nop, 5) != 0)) + bug_at((void *)entry->code, __LINE__); + } if (type == JUMP_LABEL_ENABLE) { /* * We are enabling this jump label. If it is not a nop * then something must have gone wrong. */ - if (unlikely(memcmp((void *)entry->code, ideal_nop, 5) != 0)) - bug_at((void *)entry->code, __LINE__); + if (!init) { + if (unlikely(memcmp((void *)entry->code, ideal_nop, 5) != 0)) + bug_at((void *)entry->code, __LINE__); + } code.jump = 0xe9; code.offset = entry->target - @@ -62,11 +69,7 @@ static void __jump_label_transform(struct jump_entry *entry, * If this is the first initialization call, then we * are converting the default nop to the ideal nop. */ - if (init) { - const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP }; - if (unlikely(memcmp((void *)entry->code, default_nop, 5) != 0)) - bug_at((void *)entry->code, __LINE__); - } else { + if (!init) { code.jump = 0xe9; code.offset = entry->target - (entry->code + JUMP_LABEL_NOP_SIZE); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists