Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4499648ybz; Tue, 28 Apr 2020 12:23:35 -0700 (PDT) X-Google-Smtp-Source: APiQypJwqkkI7ESdEzAB5DJCmtsZGUMHucVy7Lqh6w0J2Od6nRcZVNTc4GTVcRgWiASjmtdgulyn X-Received: by 2002:aa7:dd95:: with SMTP id g21mr23726322edv.148.1588101814758; Tue, 28 Apr 2020 12:23:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588101814; cv=none; d=google.com; s=arc-20160816; b=WkG6gD6sGFxbyQH+/VNnuLtuZ4hwpXKoALv06/kzwvKjgO7wynYCXH6mV89JTXVaog 0MTlCtpTulfVN71rU7AY6OJF1aDfK0t6ODKmkqNnMjQWRRsXF/B4wk1xQqE8Mwl1uU20 kK+HKjTzJ26w1/Ubr3M20DsmxsMhPJr7nwRl2GrjhT/V772WCbo1Xl9UsJFRZhbZhEPi U5KSUmwEjYSCtzXQUZ6w/zmpYb0hSkYwRo4AE+r9Gg4krADcfKP7xJ2zrQ+jOueY9/nt RESr2wVHNsWwkNIXn06TLXxOdhgdVIx/WBckcLyrL1IncjpC8RtnVImIHZB5zKl3FT+A koLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id:dkim-signature; bh=4dZpNR34PFhbh6nBdVf5e1aj4WAYd+1dUtHOHJQVdkM=; b=z4mN35cwU5mwrWGTwo6L5a7yVvHu/yBikQ6YfJZBKvfv9BA89Q6VP/74/S7Sl5ahXD twXEwLeOHw2YOjDey2PN7UN1ibx/pV+6wjgu4j9REXiqw/eqZ0EqyLFOU3zys9lMlJH2 ucWGsXmod4pNuvx+zRo4oIpK//bEDZFOdOmvkSXtRIzTZrEN1+auDdso+YbJodfsdV61 kiLlagvX7YO3q7/iZSsFFR/wcpeeymvm0I0OCQfb1iKYuy1jqk6DGzSuU6erbmQivSeF qOFdkoUSjKDaIcGjG26ZlJp1+VEJi81dqNs3nJVurMgZq3RsrPyg4xd3frvUN8TZS769 LuBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=CWvNRfev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s28si2338551eds.186.2020.04.28.12.23.11; Tue, 28 Apr 2020 12:23:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=CWvNRfev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728897AbgD1TTs (ORCPT + 99 others); Tue, 28 Apr 2020 15:19:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728492AbgD1TTi (ORCPT ); Tue, 28 Apr 2020 15:19:38 -0400 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 877BAC08E859 for ; Tue, 28 Apr 2020 12:19:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-Id:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=4dZpNR34PFhbh6nBdVf5e1aj4WAYd+1dUtHOHJQVdkM=; b=CWvNRfevkR2cml3tFOoPGac4u7 G8RjU7eEn0wjQIsFkyUMYhWKvcWWFdFa/hOrcYsikxOAGJUKSzoAVS2k4nN4s2KQ77HFucALClML2 sDpj/jrUZltYVd7TZpGLrAb/LUv+jVfT+5lNRyHDlwKbn32EiFrJYvicagygjcPeU8WO+XFogoOsJ 1kO36b26BmNGoGeIHrL2w1Cnu3rl9bFXjEwT4jrP66rH3vP/6bft/aQuzN7FE9I/dRWdKDRpE31SX V+ZxKqj/+s8kRXmuDY4od9mbZ1oSs8gYFBRV8FuXhZtoFEZFye3jQqC9u9DYr08V+VFkf4fxXJVBY Emgjq4dQ==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=noisy.programming.kicks-ass.net) by bombadil.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jTVlS-0006WE-1u; Tue, 28 Apr 2020 19:19:30 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id BFAFC307961; Tue, 28 Apr 2020 21:19:26 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id 9E6EA23CFDE40; Tue, 28 Apr 2020 21:19:26 +0200 (CEST) Message-Id: <20200428191700.032079304@infradead.org> User-Agent: quilt/0.65 Date: Tue, 28 Apr 2020 21:11:12 +0200 From: Peter Zijlstra To: jpoimboe@redhat.com, alexandre.chartre@oracle.com Cc: linux-kernel@vger.kernel.org, jthierry@redhat.com, tglx@linutronix.de, x86@kernel.org, mbenes@suse.cz, peterz@infradead.org Subject: [PATCH v2 11/14] x86/speculation: Change FILL_RETURN_BUFFER to work with objtool References: <20200428191101.886208539@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Change FILL_RETURN_BUFFER so that objtool groks it and can generate correct ORC unwind information. - Since ORC is alternative invariant; that is, all alternatives should have the same ORC entries, the __FILL_RETURN_BUFFER body can not be part of an alternative. Therefore, move it out of the alternative and keep the alternative as a sort of jump_label around it. - Use the ANNOTATE_INTRA_FUNCTION_CALL annotation to white-list these 'funny' call instructions to nowhere. - Use UNWIND_HINT_EMPTY to 'fill' the speculation traps, otherwise objtool will consider them unreachable. - Move the RSP adjustment into the loop, such that the loop has a deterministic stack layout. Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Alexandre Chartre --- arch/x86/include/asm/nospec-branch.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -4,11 +4,13 @@ #define _ASM_X86_NOSPEC_BRANCH_H_ #include +#include #include #include #include #include +#include /* * This should be used immediately before a retpoline alternative. It tells @@ -46,21 +48,25 @@ #define __FILL_RETURN_BUFFER(reg, nr, sp) \ mov $(nr/2), reg; \ 771: \ + ANNOTATE_INTRA_FUNCTION_CALL; \ call 772f; \ 773: /* speculation trap */ \ + UNWIND_HINT_EMPTY; \ pause; \ lfence; \ jmp 773b; \ 772: \ + ANNOTATE_INTRA_FUNCTION_CALL; \ call 774f; \ 775: /* speculation trap */ \ + UNWIND_HINT_EMPTY; \ pause; \ lfence; \ jmp 775b; \ 774: \ + add $(BITS_PER_LONG/8) * 2, sp; \ dec reg; \ - jnz 771b; \ - add $(BITS_PER_LONG/8) * nr, sp; + jnz 771b; #ifdef __ASSEMBLY__ @@ -137,10 +143,8 @@ */ .macro FILL_RETURN_BUFFER reg:req nr:req ftr:req #ifdef CONFIG_RETPOLINE - ANNOTATE_NOSPEC_ALTERNATIVE - ALTERNATIVE "jmp .Lskip_rsb_\@", \ - __stringify(__FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP)) \ - \ftr + ALTERNATIVE "jmp .Lskip_rsb_\@", "", \ftr + __FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP) .Lskip_rsb_\@: #endif .endm