From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752204AbeAJUFh (ORCPT + 1 other); Wed, 10 Jan 2018 15:05:37 -0500 Received: from mail.skyhub.de ([5.9.137.197]:51806 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752054AbeAJUFd (ORCPT ); Wed, 10 Jan 2018 15:05:33 -0500 Date: Wed, 10 Jan 2018 21:05:19 +0100 From: Borislav Petkov To: Linus Torvalds Cc: David Woodhouse , Andi Kleen , Thomas Gleixner , the arch/x86 maintainers , Linux Kernel Mailing List , Paul Turner , Andrew Lutomirski , Peter Zijlstra , Tom Lendacky , Tim Chen , Greg Kroah-Hartman , Dave Hansen , Jiri Kosina , Andi Kleen Subject: Re: [PATCH] x86/alternatives: Fix optimize_nops() checking Message-ID: <20180110200519.w7r367aqnjptgjbn@pd.tnic> References: <20180110003139.10531-1-andi@firstfloor.org> <1515568506.22302.72.camel@infradead.org> <1515578735.22302.91.camel@infradead.org> <20180110112815.mgciyf5acwacphkq@pd.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Wed, Jan 10, 2018 at 11:38:36AM -0800, Linus Torvalds wrote: > Can we also add compile-time checking (presumably in objtool, but who > knows) that there are no relocations in the alternative section? Well, so we do fail the build if the jmp's offset doesn't fit in s32: Makefile:996: recipe for target 'vmlinux' failed arch/x86/kernel/cpu/amd.o:(.altinstr_replacement+0x4): relocation truncated to fit: R_X86_64_32 against `.altinstr_replacement' make: *** [vmlinux] Error 1 I did this: alternative("", "xor %%rdi, %%rdi; .byte 0xe9; .long 2f; 2: jmp startup_64", X86_FEATURE_K8); And I was thinking whether it would make sense to beef up recompute_jump() to be smart enough to massage the JMPs into jumping to the right place. Because in the example above, I'm basically jumping to the label 2: but since the .altinstr_replacement is so far away, it fails the build due to the reloc. Even though it shouldn't have because when we patch, that label is immediately following the JMP. And probably it wouldn't need a reloc either. Whether that sequence makes sense is another story... Anyway, I asked a gcc person and we'll see what we could do. Thx. -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply.