Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp4098340pxb; Wed, 13 Oct 2021 21:00:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx+cAvho/oRyy017cd/kXDalnAgIVk7TmtOW7nXvJV8NFE1AXMQmttX8BUfN4sNnbcHwgg2 X-Received: by 2002:a17:902:d4cd:b0:13f:50d:d89 with SMTP id o13-20020a170902d4cd00b0013f050d0d89mr3057899plg.18.1634184037102; Wed, 13 Oct 2021 21:00:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634184037; cv=none; d=google.com; s=arc-20160816; b=HoZuNYS258+lS1W8UUF6IiqVxXDyCJVKwsTKEcezkJotRYsroFMqveHruAybGq6Rp6 SI9lYAspFdtU9/04iPpcP29NNLW6FJp7vKgnSDSo52Cyf/UdMtqAYM+CHlJhdCEmeYjA /faci0Y0d4ft1zv5YuBSGLQkqRgRDP1iPz/5lGbU+QJaAD91YtqIcCKmJSv/YH4lMK7W Qw0MgH46S6pNKB/7Mz8HjfTxhmuVMcCHkWHyMkO17hTFmIt8aaZ9QlZDxaLk0DQ+eXgp VdY76R28Ss2n7v90OFl+F46dznwZucx5fkYcdAnH2JXu4l+w8wx/lPUqb0HitoDqq3pz BtAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fuAFN0gj41dZzrfnCwRwUBU9rYJbG+oo1VF6StphUOE=; b=TqDzlvZtHH72pBsEMdNSN/UVKHd4an3EOK63h4Z9dBCkk1H2dyTGARY1oBISb3zPXz Af+wxadbO+HNORTGQwh032JM75NpQhcSXF4fa2SG/jYWAqiGIyPN3RgONef1JxcNN338 bi3ecj74uoKchpx6YBGzhpDZS+DlV+d5IyqNSJg+zCfHVteo/GzmV+PiX6WfxKOflGZN RCTraZKzJKDZ1N/x3LlNDmFj5ZcpXKnBbDjJbGA3j+VgPb16nqKPu9fEvTZxk8uWcUHv s6ahY/3J0XND4CRiON+DNCfEvQDkD3/LP6VpF7i/4WyQI2nlkDY4f0oc1SO4LVzeNsVx /Kmg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=a73Ocp4R; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z4si2893697pfe.229.2021.10.13.21.00.24; Wed, 13 Oct 2021 21:00:37 -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=pass header.i=@gmail.com header.s=20210112 header.b=a73Ocp4R; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229669AbhJNEBE (ORCPT + 99 others); Thu, 14 Oct 2021 00:01:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229646AbhJNEBD (ORCPT ); Thu, 14 Oct 2021 00:01:03 -0400 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95B4BC061746 for ; Wed, 13 Oct 2021 20:58:59 -0700 (PDT) Received: by mail-pj1-x102f.google.com with SMTP id qe4-20020a17090b4f8400b0019f663cfcd1so5974262pjb.1 for ; Wed, 13 Oct 2021 20:58:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fuAFN0gj41dZzrfnCwRwUBU9rYJbG+oo1VF6StphUOE=; b=a73Ocp4RT+Ot41LowvS+BvB4Ydoy3C1TiKMPtwdB1L5sy3j/c6BDodSX5g7HjT2HUM EuW6JJdi7dCYsld6KuOGPQkN8ZTVZz8MoJoRKeMqKRCDsXt23d1dVg7X1CkR2KQ1Teqi WlHiBcZJJwK2KNwo/qtbozR7l8NtXPMJFRLQNpetrjIuW9PuTg/u11+t81xMG8IVWFx0 5S1JNiaMl69DDBbItUOx1ofdbSyDheGv6kOD5SUG4jynTZDe+p0qb1EtjyAmGbxcgwnn x31M+kufLl9WzEAYr1v5I/1cHAKDIE/AbnuRg6l0yPDJ0e4jn6Ot0R+U7sNzYWa98q5Q 43sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fuAFN0gj41dZzrfnCwRwUBU9rYJbG+oo1VF6StphUOE=; b=kRGmojmVbSM1LhBvkBtfPP06bifRekLyPr/G+r6b29j56bKHaAx4gLbogtp4F3MUIP ReSJKJ+tcYG/OeRJqTrmCYLyB2xwpHLXJL+MHPnQX3y6ZOOf1osLCUkZG6nv8hZ4VabO uDSa6k3DsMGd6+tK5c8sHn+n8VM/SF3HvFlLdXNXd+wGvasZ5P+j0v80HS5hjEIyBwi9 PLClWMUF2EQOoiigz+WGuuQcYwbnmoU+Ww/UyzhPjqlspSUyuZlrBH5ApbQ/tDiTr+WL crwqPTre3xl01TSxuZhMpFTybY0HmED2WpVOd9NeK40TWhVSaYwl7zIgfZm49bZfnaTR Va7A== X-Gm-Message-State: AOAM533NwuLeMcSujsWHVhkd3LUhKBVLSf0fB3VMBNfQ25Byp+tvgDCJ JCUGLmYMbrew8Fwxcgv9niM1DxfqkDQ= X-Received: by 2002:a17:90a:8404:: with SMTP id j4mr17917580pjn.204.1634183938838; Wed, 13 Oct 2021 20:58:58 -0700 (PDT) Received: from localhost ([198.11.176.14]) by smtp.gmail.com with ESMTPSA id a28sm904077pfg.33.2021.10.13.20.58.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Oct 2021 20:58:58 -0700 (PDT) From: Lai Jiangshan To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, Lai Jiangshan , Andy Lutomirski , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" Subject: [PATCH V3 46/49] x86/entry: Remove ASM function paranoid_entry() and paranoid_exit() Date: Thu, 14 Oct 2021 11:58:32 +0800 Message-Id: <20211014035836.18401-4-jiangshanlai@gmail.com> X-Mailer: git-send-email 2.19.1.6.gb485710b In-Reply-To: <20211014031413.14471-1-jiangshanlai@gmail.com> References: <20211014031413.14471-1-jiangshanlai@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lai Jiangshan IST exceptions are changed to use C entry code which uses the C function ist_paranoid_entry() and ist_paranoid_exit(). The ASM function paranoid_entry() and paranoid_exit() are useless. Signed-off-by: Lai Jiangshan --- arch/x86/entry/entry_64.S | 129 -------------------------------------- 1 file changed, 129 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 48b4c320f5e7..19f3e642707b 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -847,135 +847,6 @@ SYM_CODE_START(xen_failsafe_callback) SYM_CODE_END(xen_failsafe_callback) #endif /* CONFIG_XEN_PV */ -/* - * Save all registers in pt_regs. Return GSBASE related information - * in EBX depending on the availability of the FSGSBASE instructions: - * - * FSGSBASE R/EBX - * N 0 -> SWAPGS on exit - * 1 -> no SWAPGS on exit - * - * Y GSBASE value at entry, must be restored in paranoid_exit - */ -SYM_CODE_START_LOCAL(paranoid_entry) - UNWIND_HINT_FUNC - - /* - * Always stash CR3 in %r14. This value will be restored, - * verbatim, at exit. Needed if paranoid_entry interrupted - * another entry that already switched to the user CR3 value - * but has not yet returned to userspace. - * - * This is also why CS (stashed in the "iret frame" by the - * hardware at entry) can not be used: this may be a return - * to kernel code, but with a user CR3 value. - * - * Switching CR3 does not depend on kernel GSBASE so it can - * be done before switching to the kernel GSBASE. This is - * required for FSGSBASE because the kernel GSBASE has to - * be retrieved from a kernel internal table. - */ - SAVE_AND_SWITCH_TO_KERNEL_CR3 scratch_reg=%rax save_reg=%r14 - - /* - * Handling GSBASE depends on the availability of FSGSBASE. - * - * Without FSGSBASE the kernel enforces that negative GSBASE - * values indicate kernel GSBASE. With FSGSBASE no assumptions - * can be made about the GSBASE value when entering from user - * space. - */ - ALTERNATIVE "jmp .Lparanoid_entry_checkgs", "", X86_FEATURE_FSGSBASE - - /* - * Read the current GSBASE and store it in %rbx unconditionally, - * retrieve and set the current CPUs kernel GSBASE. The stored value - * has to be restored in paranoid_exit unconditionally. - * - * The unconditional write to GS base below ensures that no subsequent - * loads based on a mispredicted GS base can happen, therefore no LFENCE - * is needed here. - */ - SAVE_AND_SET_GSBASE scratch_reg=%rax save_reg=%rbx - ret - -.Lparanoid_entry_checkgs: - /* EBX = 1 -> kernel GSBASE active, no restore required */ - movl $1, %ebx - /* - * The kernel-enforced convention is a negative GSBASE indicates - * a kernel value. No SWAPGS needed on entry and exit. - */ - movl $MSR_GS_BASE, %ecx - rdmsr - testl %edx, %edx - jns .Lparanoid_entry_swapgs - FENCE_SWAPGS_KERNEL_ENTRY - ret - -.Lparanoid_entry_swapgs: - swapgs - - /* - * The above SAVE_AND_SWITCH_TO_KERNEL_CR3 macro doesn't do an - * unconditional CR3 write, even in the PTI case. So do an lfence - * to prevent GS speculation, regardless of whether PTI is enabled. - */ - FENCE_SWAPGS_KERNEL_ENTRY - - /* EBX = 0 -> SWAPGS required on exit */ - xorl %ebx, %ebx - ret -SYM_CODE_END(paranoid_entry) - -/* - * "Paranoid" exit path from exception stack. This is invoked - * only on return from IST interrupts that came from kernel space. - * - * We may be returning to very strange contexts (e.g. very early - * in syscall entry), so checking for preemption here would - * be complicated. Fortunately, there's no good reason to try - * to handle preemption here. - * - * R/EBX contains the GSBASE related information depending on the - * availability of the FSGSBASE instructions: - * - * FSGSBASE R/EBX - * N 0 -> SWAPGS on exit - * 1 -> no SWAPGS on exit - * - * Y User space GSBASE, must be restored unconditionally - */ -SYM_CODE_START_LOCAL(paranoid_exit) - UNWIND_HINT_REGS offset=8 - /* - * The order of operations is important. RESTORE_CR3 requires - * kernel GSBASE. - * - * NB to anyone to try to optimize this code: this code does - * not execute at all for exceptions from user mode. Those - * exceptions go through error_exit instead. - */ - RESTORE_CR3 scratch_reg=%rax save_reg=%r14 - - /* Handle the three GSBASE cases */ - ALTERNATIVE "jmp .Lparanoid_exit_checkgs", "", X86_FEATURE_FSGSBASE - - /* With FSGSBASE enabled, unconditionally restore GSBASE */ - wrgsbase %rbx - ret - -.Lparanoid_exit_checkgs: - /* On non-FSGSBASE systems, conditionally do SWAPGS */ - testl %ebx, %ebx - jnz .Lparanoid_exit_done - - /* We are returning to a context with user GSBASE */ - swapgs -.Lparanoid_exit_done: - ret -SYM_CODE_END(paranoid_exit) - SYM_CODE_START_LOCAL(error_return) UNWIND_HINT_REGS DEBUG_ENTRY_ASSERT_IRQS_OFF -- 2.19.1.6.gb485710b