From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98620EB64DC for ; Fri, 21 Jul 2023 16:10:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231499AbjGUQKz (ORCPT ); Fri, 21 Jul 2023 12:10:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231386AbjGUQKq (ORCPT ); Fri, 21 Jul 2023 12:10:46 -0400 Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5484730C4 for ; Fri, 21 Jul 2023 09:10:42 -0700 (PDT) Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-4039a2b71c1so15688771cf.0 for ; Fri, 21 Jul 2023 09:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955841; x=1690560641; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hq7HxHbLSZkIZz8Cp9SQzofzfhw66+x3AcdqZHyV/wI=; b=d3BFI96ATRff7zKqJu5Ad+SdNzIiWDGxdcnfFZdlHWnJ0mTqZerdvffw7hUF5sDKd0 rny6ZKRCd1JQvOOlk0pU+NSmhhtfSd0eDHvYqRQXLbWffnN5HkriP4oFFa46G8ECpGRu CvpbyuIrCQkTTGUVdcF6frQD0ma3dhVI6e9HICS7cPGEHmvvUTw/mziEpSItIxCFL66x uB8yJzayDVfObZxHtm3N8uofP1rOLaWFwEluq1zihE1M5Q5dBGDvnBncTxOvKloUg/N6 WmGSKe33uOlKFfDStARFGCoRQlfl2weR7Tz4xzJAwaGoMFO8AT78Rdxyv/pFkRgJQUkX liDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955841; x=1690560641; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hq7HxHbLSZkIZz8Cp9SQzofzfhw66+x3AcdqZHyV/wI=; b=JTDoID2jq7rtRS+rcmz3hPIdIsew556/F34tf9ZcTiOFnFx5sZuX2Vpqu+MWyymGui igW9lKRMCaiHuEIOO8v/jf+l61ZvcFzYxCWTnfDhi9rR+O7dWmHEac4qlUZsbSaoOQeg 3dYVVe6D52ZyQ4d84LLudRAIvlSrIhoJp6VN+6yqQnXceuJ//Cr/sC3viIrWDz6dD9EI /dgMdn2OfF7t7sd7G1kq6l1M6YbU1c/FUJeJYvi1y5TjnlUgrRSpe31PCMAWuKwVWIcV 5hPGKRtz8soup5m3Md0QuzBOnMonX9FsRv8iBbwzhiQPETxEBr+PYZbHVNNAeG6boxHi V/dw== X-Gm-Message-State: ABy/qLYk3I4/70rckQdOzoe0o71R6X29m/l1+59554go33J96OBR6o05 pcdRq+2MWZJPijUr+F+K9fvwOUGAEg== X-Google-Smtp-Source: APBJJlES5zHm2fv/T8RsAfRQTeRO1LvK9fmhp8rc5mECHyFO9fntz/tQe8d4qLhSb/Pe1ziY6vSW0w== X-Received: by 2002:ac8:57d2:0:b0:3f6:aff0:6dec with SMTP id w18-20020ac857d2000000b003f6aff06decmr422831qta.32.1689955840820; Fri, 21 Jul 2023 09:10:40 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:39 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 1/6] x86/entry/64: Remove obsolete comment on tracing vs. SYSRET Date: Fri, 21 Jul 2023 12:10:12 -0400 Message-ID: <20230721161018.50214-2-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This comment comes from a time when the kernel attempted to use SYSRET on all returns to userspace, including interrupts and exceptions. Ever since commit fffbb5dc ("Move opportunistic sysret code to syscall code path"), SYSRET is only used for returning from system calls. The specific tracing issue listed in this comment is not possible anymore. Signed-off-by: Brian Gerst --- arch/x86/entry/entry_64.S | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 91f6818884fa..c01776a51545 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -166,22 +166,9 @@ SYM_INNER_LABEL(entry_SYSCALL_64_after_hwframe, SYM_L_= GLOBAL) jne swapgs_restore_regs_and_return_to_usermode =20 /* - * SYSCALL clears RF when it saves RFLAGS in R11 and SYSRET cannot - * restore RF properly. If the slowpath sets it for whatever reason, we - * need to restore it correctly. - * - * SYSRET can restore TF, but unlike IRET, restoring TF results in a - * trap from userspace immediately after SYSRET. This would cause an - * infinite loop whenever #DB happens with register state that satisfies - * the opportunistic SYSRET conditions. For example, single-stepping - * this user code: - * - * movq $stuck_here, %rcx - * pushfq - * popq %r11 - * stuck_here: - * - * would never get past 'stuck_here'. + * SYSRET cannot restore RF. It can restore TF, but unlike IRET, + * restoring TF results in a trap from userspace immediately after + * SYSRET. */ testq $(X86_EFLAGS_RF|X86_EFLAGS_TF), %r11 jnz swapgs_restore_regs_and_return_to_usermode --=20 2.41.0 From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97023C001DC for ; Fri, 21 Jul 2023 16:10:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231969AbjGUQK5 (ORCPT ); Fri, 21 Jul 2023 12:10:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231422AbjGUQKr (ORCPT ); Fri, 21 Jul 2023 12:10:47 -0400 Received: from mail-qt1-x835.google.com (mail-qt1-x835.google.com [IPv6:2607:f8b0:4864:20::835]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F92430D1 for ; Fri, 21 Jul 2023 09:10:44 -0700 (PDT) Received: by mail-qt1-x835.google.com with SMTP id d75a77b69052e-4039a2b71c1so15688961cf.0 for ; Fri, 21 Jul 2023 09:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955842; x=1690560642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OTO5jd/nKObBWWPyprEXCBFVCoZH0swGcg3ifta3qUY=; b=klznSxfG7LYALMJrU/cCJd6ae9flDFrCupw/4zMfPDfMc/6pxRyNDDrYO4dpOSm+bf WXpj9XmbpP968pnZn6MZp4JcBVAeYzSuhsBEl/A2v1+1Nuy3kDXvn7CPSHAEbHveLfWb 9axPhnlMUgKebJK/D46Huzk1/2hNHsJTsEov/wyh7p2CNFSZCV2jOvEh9W4ZYk1+TkXs N44GXPanNogkhrgwMJ7lnMvSwEgxMmKjosn5ghfyb543tkcvbkgsRLNvQ6xRkMMJaMMJ uT+4OMFsU8B7S44IP+QEHn8uqtMg9/h7RHO9UK2DXscZT2ipZCj0i8139FStjrdivFWN 0foA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955842; x=1690560642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OTO5jd/nKObBWWPyprEXCBFVCoZH0swGcg3ifta3qUY=; b=NrqbcEjX/tbwlScmPOnoK4trxL0632WtqKDn3ILnzQXLsfzzOl+O28GHCbTB32kXOb dPIQqESmpLM2vHUJ8wCw1/qxMnOd3R3BAoPZ6o2uD+QcUasfMm4gBi8yMKSjDvNFpCI1 GP7sHOrsewovDnrDLBvYtYpjLMgYbrYtAumlACwLaz7Ke5KKioa+DxUljR9ALGYwc7Uy /hEzz6YxzeMeiXdGZ/aOjzSEYW7u56oLbf1BdnIfWmmRmS2uq6/TawguOvAt4VpI4Rfw tamZYUzjA+Ie3cK4mT2b9qItGSysfZu0jWz3GXBitPWPBkieUu4q4o9XOwLgELnncKyT 7w/g== X-Gm-Message-State: ABy/qLaKMxHwV8QhgDKm0jDuORDBKBSHpi/uAPvqITHq9mhce7uIcs6c y4Ye/jWaVAqABYXHq15M+cocxXjb1Q== X-Google-Smtp-Source: APBJJlH9rAE/jv5DsRe1RD4SCNmmw1j7ePI0a+ooD7kwPoMKpYq9mnQjXJdx4emBAOcxX2FlhhRAPg== X-Received: by 2002:a05:622a:4c:b0:403:999d:afe5 with SMTP id y12-20020a05622a004c00b00403999dafe5mr531794qtw.41.1689955842419; Fri, 21 Jul 2023 09:10:42 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:41 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 2/6] x86/entry/64: Convert SYSRET validation tests to C Date: Fri, 21 Jul 2023 12:10:13 -0400 Message-ID: <20230721161018.50214-3-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Signed-off-by: Brian Gerst --- arch/x86/entry/common.c | 40 ++++++++++++++++++++++++- arch/x86/entry/entry_64.S | 55 ++-------------------------------- arch/x86/include/asm/syscall.h | 2 +- 3 files changed, 42 insertions(+), 55 deletions(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 6c2826417b33..cccdd18c8304 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -70,7 +70,8 @@ static __always_inline bool do_syscall_x32(struct pt_regs= *regs, int nr) return false; } =20 -__visible noinstr void do_syscall_64(struct pt_regs *regs, int nr) +/* Returns true to return using SYSRET, or false to use IRET */ +__visible noinstr bool do_syscall_64(struct pt_regs *regs, int nr) { add_random_kstack_offset(); nr =3D syscall_enter_from_user_mode(regs, nr); @@ -84,6 +85,43 @@ __visible noinstr void do_syscall_64(struct pt_regs *reg= s, int nr) =20 instrumentation_end(); syscall_exit_to_user_mode(regs); + + /* + * Check that the register state is valid for using SYSRET to exit + * to userspace. Otherwise use the slower but fully capable IRET + * exit path. + */ + + /* XEN PV guests always use IRET path */ + if (cpu_feature_enabled(X86_FEATURE_XENPV)) + return false; + + /* SYSRET requires RCX =3D=3D RIP and R11 =3D=3D EFLAGS */ + if (unlikely(regs->cx !=3D regs->ip || regs->r11 !=3D regs->flags)) + return false; + + /* CS and SS must match the values set in MSR_STAR */ + if (unlikely(regs->cs !=3D __USER_CS || regs->ss !=3D __USER_DS)) + return false; + + /* + * On Intel CPUs, SYSRET with non-canonical RCX/RIP will #GP + * in kernel space. This essentially lets the user take over + * the kernel, since userspace controls RSP. + */ + if (unlikely(!__is_canonical_address(regs->ip, __VIRTUAL_MASK_SHIFT + 1))) + return false; + + /* + * SYSRET cannot restore RF. It can restore TF, but unlike IRET, + * restoring TF results in a trap from userspace immediately after + * SYSRET. + */ + if (unlikely(regs->flags & (X86_EFLAGS_RF | X86_EFLAGS_TF))) + return false; + + /* Use SYSRET to exit to userspace */ + return true; } #endif =20 diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index c01776a51545..b1288e22cae8 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -123,60 +123,9 @@ SYM_INNER_LABEL(entry_SYSCALL_64_after_hwframe, SYM_L_= GLOBAL) * Try to use SYSRET instead of IRET if we're returning to * a completely clean 64-bit userspace context. If we're not, * go to the slow exit path. - * In the Xen PV case we must use iret anyway. */ - - ALTERNATIVE "", "jmp swapgs_restore_regs_and_return_to_usermode", \ - X86_FEATURE_XENPV - - movq RCX(%rsp), %rcx - movq RIP(%rsp), %r11 - - cmpq %rcx, %r11 /* SYSRET requires RCX =3D=3D RIP */ - jne swapgs_restore_regs_and_return_to_usermode - - /* - * On Intel CPUs, SYSRET with non-canonical RCX/RIP will #GP - * in kernel space. This essentially lets the user take over - * the kernel, since userspace controls RSP. - * - * If width of "canonical tail" ever becomes variable, this will need - * to be updated to remain correct on both old and new CPUs. - * - * Change top bits to match most significant bit (47th or 56th bit - * depending on paging mode) in the address. - */ -#ifdef CONFIG_X86_5LEVEL - ALTERNATIVE "shl $(64 - 48), %rcx; sar $(64 - 48), %rcx", \ - "shl $(64 - 57), %rcx; sar $(64 - 57), %rcx", X86_FEATURE_LA57 -#else - shl $(64 - (__VIRTUAL_MASK_SHIFT+1)), %rcx - sar $(64 - (__VIRTUAL_MASK_SHIFT+1)), %rcx -#endif - - /* If this changed %rcx, it was not canonical */ - cmpq %rcx, %r11 - jne swapgs_restore_regs_and_return_to_usermode - - cmpq $__USER_CS, CS(%rsp) /* CS must match SYSRET */ - jne swapgs_restore_regs_and_return_to_usermode - - movq R11(%rsp), %r11 - cmpq %r11, EFLAGS(%rsp) /* R11 =3D=3D RFLAGS */ - jne swapgs_restore_regs_and_return_to_usermode - - /* - * SYSRET cannot restore RF. It can restore TF, but unlike IRET, - * restoring TF results in a trap from userspace immediately after - * SYSRET. - */ - testq $(X86_EFLAGS_RF|X86_EFLAGS_TF), %r11 - jnz swapgs_restore_regs_and_return_to_usermode - - /* nothing to check for RSP */ - - cmpq $__USER_DS, SS(%rsp) /* SS must match SYSRET */ - jne swapgs_restore_regs_and_return_to_usermode + testb %al, %al + jz swapgs_restore_regs_and_return_to_usermode =20 /* * We win! This label is here just for ease of understanding diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h index 4fb36fba4b5a..be6c5515e0b9 100644 --- a/arch/x86/include/asm/syscall.h +++ b/arch/x86/include/asm/syscall.h @@ -126,7 +126,7 @@ static inline int syscall_get_arch(struct task_struct *= task) ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64; } =20 -void do_syscall_64(struct pt_regs *regs, int nr); +bool do_syscall_64(struct pt_regs *regs, int nr); =20 #endif /* CONFIG_X86_32 */ =20 --=20 2.41.0 From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30CA5EB64DC for ; Fri, 21 Jul 2023 16:11:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232454AbjGUQLA (ORCPT ); Fri, 21 Jul 2023 12:11:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231500AbjGUQKr (ORCPT ); Fri, 21 Jul 2023 12:10:47 -0400 Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 748912726 for ; Fri, 21 Jul 2023 09:10:45 -0700 (PDT) Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-4039f7e1d3aso17432721cf.0 for ; Fri, 21 Jul 2023 09:10:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955844; x=1690560644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tjiy+RZzhIETh3eDrX+VMpaBXAb3ySzD13mUYqdBjXY=; b=pBsh1Da+bk04OLuUyhhlN/h5LJWYOgP9+z1lNk/rsHS7ZZOT+N/PriVaizlB0sHCAI ec7NWcYEeAKLg9cKgMyUwEZiE6Aq2+LFWRUfGngrJS0A0Atal032dkqCOakPbSHoNKIW H8YMcUlTK2b8sqg8tCJOCZzW4QQ+3A2rxqvVa8YoNvyxkODDClEUo/06mV1v+Pu10NGm 7cqVhpCPWuj39FFW20hchaBnHx/Yvd8UnVrhqBu+sX2ddNAy0gBFjTkOxF1ysxfC6FAi SYmPDUgdk62d2pVR3k2YLDH1WfX2FrXZVsjCjHlrdMhoB4f6RTvBICAv8RDR7LNn9zAt t2yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955844; x=1690560644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tjiy+RZzhIETh3eDrX+VMpaBXAb3ySzD13mUYqdBjXY=; b=gWhnOEvSO7Q1WnMQ5UQV7aIGNO1M1dPDVu1pUD6D6Uy+GK2kqn+JqM5IlyYfrsr5t8 4KMKERmWWBg1a9dg2YGL41P0GW/+le4hRzJ8aAG44zT7hGXevN4tydIt2I3AGjXK+Umh 1qirKJrC4oLyrxTFT3EMNaMYh9UdNhXif42WIHIXK+0yIa/mrvnEh6jAGGGXDxStbvUl y9ot7vgHuGdccSeAzDCBA7pe+Q80KQ0jOUA7OtbOzsUujb9IU1KBAiw0N27vIrKorEFv MrV6DZGfE9gZTBdfUM+9lMEEb9qp0F4iw2bDPOnl1I90oTeUM4C9nol8EnhIXNGwmwth kHpw== X-Gm-Message-State: ABy/qLZN1sTo64armZD7SpzpAY+K6JfOis/RCL58NpbXqbzp0XspLIyp VBc11nEebATqobAGGAQ4KQXz+8Nrww== X-Google-Smtp-Source: APBJJlEPqIU09qw9n9rZaYvWnsygWXNlRJUpH0d07XeqiASOwHj5W665dA614dIGZf4VfQj4JOxH0Q== X-Received: by 2002:a05:622a:184:b0:403:cb17:c108 with SMTP id s4-20020a05622a018400b00403cb17c108mr680402qtw.24.1689955843960; Fri, 21 Jul 2023 09:10:43 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:43 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 3/6] x86/entry/compat: Combine return value test from syscall handler Date: Fri, 21 Jul 2023 12:10:14 -0400 Message-ID: <20230721161018.50214-4-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Move the sysret32_from_system_call label to remove a duplicate test of the return value from the syscall handler. Signed-off-by: Brian Gerst --- arch/x86/entry/entry_64_compat.S | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_com= pat.S index 70150298f8bd..b16272395f1a 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -118,9 +118,6 @@ SYM_INNER_LABEL(entry_SYSENTER_compat_after_hwframe, SY= M_L_GLOBAL) =20 movq %rsp, %rdi call do_SYSENTER_32 - /* XEN PV guests always use IRET path */ - ALTERNATIVE "testl %eax, %eax; jz swapgs_restore_regs_and_return_to_userm= ode", \ - "jmp swapgs_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV jmp sysret32_from_system_call =20 .Lsysenter_fix_flags: @@ -212,13 +209,15 @@ SYM_INNER_LABEL(entry_SYSCALL_compat_after_hwframe, S= YM_L_GLOBAL) =20 movq %rsp, %rdi call do_fast_syscall_32 + +sysret32_from_system_call: /* XEN PV guests always use IRET path */ ALTERNATIVE "testl %eax, %eax; jz swapgs_restore_regs_and_return_to_userm= ode", \ "jmp swapgs_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV =20 - /* Opportunistic SYSRET */ -sysret32_from_system_call: /* + * Opportunistic SYSRET + * * We are not going to return to userspace from the trampoline * stack. So let's erase the thread stack right now. */ --=20 2.41.0 From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E94CEEB64DD for ; Fri, 21 Jul 2023 16:11:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230445AbjGUQLG (ORCPT ); Fri, 21 Jul 2023 12:11:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231463AbjGUQKw (ORCPT ); Fri, 21 Jul 2023 12:10:52 -0400 Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3BA4830E3 for ; Fri, 21 Jul 2023 09:10:47 -0700 (PDT) Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-57712d00cc1so23278667b3.3 for ; Fri, 21 Jul 2023 09:10:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955845; x=1690560645; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zxkycSrtZLZVeXZKUZ3rCjnmJ8chLKLmrvSzsZapgiI=; b=GvLsqNkhErKyb8uFLMrn4qKmg1ICEZ9/esxS4P/Py0iIeSW7WkpRr9VqGIFl1e/jub cCNuzBKaVinBIfXZSILW32IohpfiEFdpWj3N28TdvwLcngvqZE4jKAVy5XqNqqhiXztG IY2ODWi93TUF9+a+StZ8k+Xkz+m+aoqMkqe3tn1kIDXvVkDANKEmfhdo+1hdd95lBA7j 7xyIEZEaN2OnoFsbC77KPwu+dWRv+Qi1Qvj9dEVBBlyklIxaSCGmRtS/AX5HBfyu0ueN bkLLOEKuCIk4hrB+xKsu2cmBPFAiGFtNI9TrEiWpLRC2dr67X/3g8jxswsyYh93sti4g NiLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955845; x=1690560645; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zxkycSrtZLZVeXZKUZ3rCjnmJ8chLKLmrvSzsZapgiI=; b=YNXI/guidzRkV2dvwgkiz4g7OE0FMH2niXz4DuKBZbjmbpsFxa7YbRQ3D4Dg9E6ls/ njWVdfqBNeFphFk958ODQ1XtlSiN0AoU5ZjKU7lEZQ4+QUTKVfAoW1O235v/cxPA7O2B tTQhyUvM3XyhRqDD4QR1sdTYFbVbVxCOh2OVdY2V8EzynMfi6lGK05rn/4dDFKkm2dJf NBZQ1KsP+ctTYSz07mjT9qKDZTbkhlFjmUzu3Wt1OX1w4sjl+C9nH+4vNgaAgy4v96Tt uSHRrVAFHzeSe/+GBOIDOVb6d8zHZ0yWsG81AiAYx3kHhImEDCsAsHxBvzyTAzpu90IS G3VQ== X-Gm-Message-State: ABy/qLbCJQRD834cDcheu5F2j9rwMmRh222XQW4QJ1uA0pE0I0sD3xEn Yg1anyKLgjq1YLlHdpd/8WUG55TwnQ== X-Google-Smtp-Source: APBJJlHEt7lS54ZpbMhVafN7d6SHseBebzRLgVo4bmzbHBmUa/9KBujZgXW1iRUZ+F5swNWxzb+pIQ== X-Received: by 2002:a25:2f8e:0:b0:ce8:cd8d:f0db with SMTP id v136-20020a252f8e000000b00ce8cd8df0dbmr1940050ybv.28.1689955845563; Fri, 21 Jul 2023 09:10:45 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:44 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 4/6] x86/entry/32: Convert do_fast_syscall_32() to bool return type Date: Fri, 21 Jul 2023 12:10:15 -0400 Message-ID: <20230721161018.50214-5-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Signed-off-by: Brian Gerst --- arch/x86/entry/common.c | 10 +++++----- arch/x86/entry/entry_32.S | 2 +- arch/x86/entry/entry_64_compat.S | 2 +- arch/x86/include/asm/syscall.h | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index cccdd18c8304..5b3594457af3 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -220,8 +220,8 @@ static noinstr bool __do_fast_syscall_32(struct pt_regs= *regs) return true; } =20 -/* Returns 0 to return using IRET or 1 to return using SYSEXIT/SYSRETL. */ -__visible noinstr long do_fast_syscall_32(struct pt_regs *regs) +/* Returns true to return using SYSEXIT/SYSRETL, or false to use IRET */ +__visible noinstr bool do_fast_syscall_32(struct pt_regs *regs) { /* * Called using the internal vDSO SYSENTER/SYSCALL32 calling @@ -239,7 +239,7 @@ __visible noinstr long do_fast_syscall_32(struct pt_reg= s *regs) =20 /* Invoke the syscall. If it failed, keep it simple: use IRET. */ if (!__do_fast_syscall_32(regs)) - return 0; + return false; =20 #ifdef CONFIG_X86_64 /* @@ -272,8 +272,8 @@ __visible noinstr long do_fast_syscall_32(struct pt_reg= s *regs) #endif } =20 -/* Returns 0 to return using IRET or 1 to return using SYSEXIT/SYSRETL. */ -__visible noinstr long do_SYSENTER_32(struct pt_regs *regs) +/* Returns true to return using SYSEXIT/SYSRETL, or false to use IRET */ +__visible noinstr bool do_SYSENTER_32(struct pt_regs *regs) { /* SYSENTER loses RSP, but the vDSO saved it in RBP. */ regs->sp =3D regs->bp; diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S index 6e6af42e044a..c73047bf9f4b 100644 --- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -837,7 +837,7 @@ SYM_FUNC_START(entry_SYSENTER_32) =20 movl %esp, %eax call do_SYSENTER_32 - testl %eax, %eax + testb %al, %al jz .Lsyscall_32_done =20 STACKLEAK_ERASE diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_com= pat.S index b16272395f1a..27c05d08558a 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -212,7 +212,7 @@ SYM_INNER_LABEL(entry_SYSCALL_compat_after_hwframe, SYM= _L_GLOBAL) =20 sysret32_from_system_call: /* XEN PV guests always use IRET path */ - ALTERNATIVE "testl %eax, %eax; jz swapgs_restore_regs_and_return_to_userm= ode", \ + ALTERNATIVE "testb %al, %al; jz swapgs_restore_regs_and_return_to_usermod= e", \ "jmp swapgs_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV =20 /* diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h index be6c5515e0b9..f44e2f9ab65d 100644 --- a/arch/x86/include/asm/syscall.h +++ b/arch/x86/include/asm/syscall.h @@ -131,7 +131,7 @@ bool do_syscall_64(struct pt_regs *regs, int nr); #endif /* CONFIG_X86_32 */ =20 void do_int80_syscall_32(struct pt_regs *regs); -long do_fast_syscall_32(struct pt_regs *regs); -long do_SYSENTER_32(struct pt_regs *regs); +bool do_fast_syscall_32(struct pt_regs *regs); +bool do_SYSENTER_32(struct pt_regs *regs); =20 #endif /* _ASM_X86_SYSCALL_H */ --=20 2.41.0 From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F3C4EB64DC for ; Fri, 21 Jul 2023 16:11:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230093AbjGUQLN (ORCPT ); Fri, 21 Jul 2023 12:11:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232045AbjGUQKx (ORCPT ); Fri, 21 Jul 2023 12:10:53 -0400 Received: from mail-qt1-x832.google.com (mail-qt1-x832.google.com [IPv6:2607:f8b0:4864:20::832]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B721A3586 for ; Fri, 21 Jul 2023 09:10:48 -0700 (PDT) Received: by mail-qt1-x832.google.com with SMTP id d75a77b69052e-403b6b7c0f7so17586451cf.0 for ; Fri, 21 Jul 2023 09:10:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955847; x=1690560647; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tfQVUJeG82Bn7jUnxAG1fPc5fzriqyrGkxLsws2Rhtc=; b=FlKm/uhne4Q4zTBXZJj8mnli3+gsAwYvEmHxdunziS1nhM8Jnq8CdAZ0Au0Nzz/yyn /YHyemgMxFP6flT3BtZFWRTTY8Eex1vmcgHxQKDK0GaR/rj2ZApZqXL8Nb47PnGjwwQ+ bFT/4aGMrzFY/owB+fbsGAGNv0U7XutlcKB5l/4xCfIi76irlQ06ep07BSr19VJmVUwo 94RMHoBS95r3F/osFB8YsBoxMuI2SVil/EWQ+EkSmBGY8CkfXU0Ihv3cXwv826o8QNce omi4F2eopr0YfPZe/jH5a9WyKTxkUw3rfsLFdKE+YuYuT74j8bmohPGeqnO9tDnAdNGZ T0ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955847; x=1690560647; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tfQVUJeG82Bn7jUnxAG1fPc5fzriqyrGkxLsws2Rhtc=; b=TCBYZFS6routxJUm39EWxWqoU34tmOnVBPEqnVgHA2WksL4a436L7AwvBmtjUOdS3c zUqenU94DRw22oFWcBmXJ8s0R0RtNqwTr0PyWYR3FKOHcN0Z/NP2iO9PsQ+3Tz4RDZoo jQcvth9HyakupBWScnj0IJ/yBn7PXuRV9MIKONBfaUgB7/ICyrkfJGzksmM36npRhkkY lEjJNDCWNdnQPdso1NWOIuBvuLk+OqlqGtAOQn5AEsQR1QNn+qfzIW2BdfbxcmvLrJzP F4MXh0UGfDnWyYRyMDbpHxqCk1ztFpZYn5kprlCmt/IHIcWX8KKvrx8JqYZ31emn8aAv TpkQ== X-Gm-Message-State: ABy/qLZaNrUhy2Co+CDkVn0lH/VKLbCLGumq3k+lq/dqCEcEqZgXd4bE mO9m+s0WLX8QQYdnDjoqUjM8f5uDgA== X-Google-Smtp-Source: APBJJlG7RCBET81XQQpwgB5hMP0SCzt9vuHR+TpDGjyb9suYeQprBmbYBMbEAg+WDVqVb3dhPW3Cug== X-Received: by 2002:a05:622a:190a:b0:403:6fe6:3160 with SMTP id w10-20020a05622a190a00b004036fe63160mr619325qtc.61.1689955847108; Fri, 21 Jul 2023 09:10:47 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:46 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 5/6] x86/entry/32: Remove SEP test for SYSEXIT Date: Fri, 21 Jul 2023 12:10:16 -0400 Message-ID: <20230721161018.50214-6-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" SEP must be already be present in order for do_fast_syscall_32() to be called on native 32-bit, so checking it again is unnecessary. Signed-off-by: Brian Gerst --- arch/x86/entry/common.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 5b3594457af3..4d7d6d25dda9 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -265,8 +265,7 @@ __visible noinstr bool do_fast_syscall_32(struct pt_reg= s *regs) * We don't allow syscalls at all from VM86 mode, but we still * need to check VM, because we might be returning from sys_vm86. */ - return static_cpu_has(X86_FEATURE_SEP) && - regs->cs =3D=3D __USER_CS && regs->ss =3D=3D __USER_DS && + return regs->cs =3D=3D __USER_CS && regs->ss =3D=3D __USER_DS && regs->ip =3D=3D landing_pad && (regs->flags & (X86_EFLAGS_RF | X86_EFLAGS_TF | X86_EFLAGS_VM)) =3D=3D 0; #endif --=20 2.41.0 From nobody Sun Feb 8 06:54:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82EB2EB64DC for ; Fri, 21 Jul 2023 16:11:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231597AbjGUQLP (ORCPT ); Fri, 21 Jul 2023 12:11:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231712AbjGUQKz (ORCPT ); Fri, 21 Jul 2023 12:10:55 -0400 Received: from mail-qt1-x836.google.com (mail-qt1-x836.google.com [IPv6:2607:f8b0:4864:20::836]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BD343592 for ; Fri, 21 Jul 2023 09:10:50 -0700 (PDT) Received: by mail-qt1-x836.google.com with SMTP id d75a77b69052e-403b6b7c0f7so17586611cf.0 for ; Fri, 21 Jul 2023 09:10:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689955848; x=1690560648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MxxptOg3y4GSsc8OcZSRSIbMXIx5aZyvmAJXUScqpHM=; b=eDyvm+inWIILOlTsD+5fWsEfRgIfEX3/tUx4fy3nXvMAIsDo6tEUlD4KOZGfWETexq xUD+YzsZItSbIbwnSXVtXVybpI8cGXG917sr3HCo72PrOrk5YUzO/miWZe1kuktGq0DC Jrqm/Z942Q+EPnGGzEpg/AcApr7KDtzXR0/XNdLU9p71z6wa0i086ROrNfJ1tVgaFa4H wAdRZ2Zxa8VD1UiR60SoaJ8x+aEpPc62MIgSDbSnmyocg0k3lYyGIO7dpcvEyk990RSE jXgTgnwibPcx1ZdFThtgRs8B6u57zoIdOVZKaB+TniEPEzKS+8AL9f72im8HWS8xiPkI x9xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689955848; x=1690560648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MxxptOg3y4GSsc8OcZSRSIbMXIx5aZyvmAJXUScqpHM=; b=U1w1YeCB0alOR6rQLlCqdqsJzZAxn4Iu+jHlX4Iwxy9n2e+gpzN2maQ9DKzaqGYcuP 7YOx5uBRJ84nQ2XJ2ad4l8oW/uXu9HNXvXvlRhap3hp2Lh//U0Rs5He4aqjfrz7gK7uo IeP9ME4Q6cOvvDDdyr6QHAesMYyEcSvBUm3B27P8FC91uguUWL/gf0AbrtvjkUW8gmo9 Iy5UTSMZpgSMhU9GHqswbJ1FRep/774Hi3Y5Oq2bvDwgPG2PA6aEqhFzbEpEJmAvJH0c 2xd84Xg028z0wa8zvlG23Tnxf2YO1DC/O+Na5x+nUL5QUjEgyiDHFZZX8i1xlR95muz9 dHeg== X-Gm-Message-State: ABy/qLYv8TDD98Pd5hR2KPpyYWPat1MajB34jcoM+EfyQkdi2DtAtTog BBTgtmUaQL2DBQ9d2YlOciDpj7R1Sg== X-Google-Smtp-Source: APBJJlG/2jNEsOVOdjP5angk2jnAv8hvfGNGyxidtGh68Fc8gIMZs+oyLXhOJ9R4d05YsmJfTgriJQ== X-Received: by 2002:a05:622a:1c8:b0:403:acd3:e90e with SMTP id t8-20020a05622a01c800b00403acd3e90emr732799qtw.48.1689955848593; Fri, 21 Jul 2023 09:10:48 -0700 (PDT) Received: from citadel.. (047-026-243-217.res.spectrum.com. [47.26.243.217]) by smtp.gmail.com with ESMTPSA id c16-20020ac87d90000000b004054fbf9273sm311286qtd.80.2023.07.21.09.10.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 09:10:47 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Thomas Gleixner , Borislav Petkov , "H . Peter Anvin" , Andy Lutomirski , =?UTF-8?q?Mika=20Penttil=C3=A4?= , Brian Gerst Subject: [PATCH v2 6/6] x86/entry/32: Clean up syscall fast exit tests Date: Fri, 21 Jul 2023 12:10:17 -0400 Message-ID: <20230721161018.50214-7-brgerst@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721161018.50214-1-brgerst@gmail.com> References: <20230721161018.50214-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Merge compat and native code and clarify comments. Signed-off-by: Brian Gerst --- arch/x86/entry/common.c | 48 +++++++++++++++----------------- arch/x86/entry/entry_64_compat.S | 5 ++-- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 4d7d6d25dda9..800664325542 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -241,34 +241,30 @@ __visible noinstr bool do_fast_syscall_32(struct pt_r= egs *regs) if (!__do_fast_syscall_32(regs)) return false; =20 -#ifdef CONFIG_X86_64 /* - * Opportunistic SYSRETL: if possible, try to return using SYSRETL. - * SYSRETL is available on all 64-bit CPUs, so we don't need to - * bother with SYSEXIT. - * - * Unlike 64-bit opportunistic SYSRET, we can't check that CX =3D=3D IP, - * because the ECX fixup above will ensure that this is essentially - * never the case. + * Check that the register state is valid for using SYSRETL/SYSEXIT + * to exit to userspace. Otherwise use the slower but fully capable + * IRET exit path. */ - return regs->cs =3D=3D __USER32_CS && regs->ss =3D=3D __USER_DS && - regs->ip =3D=3D landing_pad && - (regs->flags & (X86_EFLAGS_RF | X86_EFLAGS_TF)) =3D=3D 0; -#else - /* - * Opportunistic SYSEXIT: if possible, try to return using SYSEXIT. - * - * Unlike 64-bit opportunistic SYSRET, we can't check that CX =3D=3D IP, - * because the ECX fixup above will ensure that this is essentially - * never the case. - * - * We don't allow syscalls at all from VM86 mode, but we still - * need to check VM, because we might be returning from sys_vm86. - */ - return regs->cs =3D=3D __USER_CS && regs->ss =3D=3D __USER_DS && - regs->ip =3D=3D landing_pad && - (regs->flags & (X86_EFLAGS_RF | X86_EFLAGS_TF | X86_EFLAGS_VM)) =3D=3D 0; -#endif + + /* XEN PV guests always use IRET path */ + if (cpu_feature_enabled(X86_FEATURE_XENPV)) + return false; + + /* EIP must point to the VDSO landing pad */ + if (unlikely(regs->ip !=3D landing_pad)) + return false; + + /* CS and SS must match the values set in MSR_STAR */ + if (unlikely(regs->cs !=3D __USER32_CS || regs->ss !=3D __USER_DS)) + return false; + + /* If the TF, RF, or VM flags are set, use IRET */ + if (unlikely(regs->flags & (X86_EFLAGS_RF | X86_EFLAGS_TF | X86_EFLAGS_VM= ))) + return false; + + /* Use SYSRETL/SYSEXIT to exit to userspace */ + return true; } =20 /* Returns true to return using SYSEXIT/SYSRETL, or false to use IRET */ diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_com= pat.S index 27c05d08558a..84e21d1ebf10 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -211,9 +211,8 @@ SYM_INNER_LABEL(entry_SYSCALL_compat_after_hwframe, SYM= _L_GLOBAL) call do_fast_syscall_32 =20 sysret32_from_system_call: - /* XEN PV guests always use IRET path */ - ALTERNATIVE "testb %al, %al; jz swapgs_restore_regs_and_return_to_usermod= e", \ - "jmp swapgs_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV + testb %al, %al /* Is SYSRET allowed? */ + jz swapgs_restore_regs_and_return_to_usermode =20 /* * Opportunistic SYSRET --=20 2.41.0