From nobody Mon May 6 18:23:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1629197867; cv=none; d=zohomail.com; s=zohoarc; b=CqIR7ODL0XrSlGphDI2z1bYEllwHXYII4ew/QwSVk3XXv33+bnJTBYvzPS/KNXsEICSJqgyxpHSffss5mTSdbjnCB/Fc8k31ewGyNTlLXVT7OiZYOmVIaVo3BwPwDimTAuTc9L2sI/ha4PIcVzNANIKiWaN/LawvbDBTlZ/EbOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629197867; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=4KQ0/pAmW7pYRWn3fPQy38FAXX25yltNGqMg+13o4Q0=; b=c3yiqVwRvv7iGjXVFXgIjymsz72DNjiQluJHkL03DSLHIf332EY6YkSsUoDF+AkqvptyO8bOMRmF0j36rU9Wt7jhOTOkYInpp9FN5X4n2XT9VKxl23GsanKQdMhVMYI9w68uaMIajXuZxR3GmnfX4XYZJcz+fjCyc6an1dCUpX4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1629197867903609.558256664213; Tue, 17 Aug 2021 03:57:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.167739.306215 (Exim 4.92) (envelope-from ) id 1mFwmP-0001aV-V5; Tue, 17 Aug 2021 10:57:13 +0000 Received: by outflank-mailman (output) from mailman id 167739.306215; Tue, 17 Aug 2021 10:57:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mFwmP-0001aO-RJ; Tue, 17 Aug 2021 10:57:13 +0000 Received: by outflank-mailman (input) for mailman id 167739; Tue, 17 Aug 2021 10:57:12 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mFwmO-0001aF-Gk for xen-devel@lists.xenproject.org; Tue, 17 Aug 2021 10:57:12 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 8aaaa1cb-87a4-4300-a9a5-74ca4ce58918; Tue, 17 Aug 2021 10:57:11 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 8aaaa1cb-87a4-4300-a9a5-74ca4ce58918 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1629197831; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=BQ8nKRxYnOzuCTUS7vy1EeCr+2lKdChvZDrdJcoBwPw=; b=DaTZ3NZ/CJSmXzXMpdPP5yra7BLhrryPZzP4dSSqyk2OI7DBFMuCD9LK YwpFF9FSX09OExgXW3VotPSTC0hu6Lxe/wT9U9741P8Q+1lLYsgEh0Q0b g9oSNbfCRCwWbYfdP9Evdf9onGYvC68TSxIBbuPe3jyf6Z3x6bq2axaRM M=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: TINP3stfJaLZdlWN14ok0l2oywxkiexrxPmaQ1CAsf4w6cZ2pRHSqo2qJvBnxwv4Bl2SL24SB+ djaZC71p12JECvCUdTy4LOLXgk6iecpQtu+1Gcv/rE0F/cfEiMbGUVUN7rJrDzsaXxVB+JB0i7 4huD9JF2ACkc0yvE/Q8mwezr+Dg1Doirjsne16VStYKZDhgK+o+Eb+YZ8UR1Si0yKYna6iBM3d nfQazJxV6lCpnI1OTvwia9AtoUnoLlyQkcGZEwEHgFl5XcWxlMufaaxo0OCKSK+dqy0fiUiS/G FkJaR87R3IbvjQb/VZhlrbp0 X-SBRS: 5.1 X-MesageID: 50623342 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:5U8xnKqHwvRCqJiHtNiDOhgaV5oneYIsimQD101hICG8cqSj+f xG+85rsiMc6QxhPE3I9urhBEDtex/hHP1OkOws1NWZLWrbUQKTRekIh+bfKlXbakvDH4VmtJ uIHZIQNDSJNykZsfrH X-IronPort-AV: E=Sophos;i="5.84,328,1620705600"; d="scan'208";a="50623342" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Subject: [PATCH] x86/cet: Fix build on newer versions of GCC Date: Tue, 17 Aug 2021 11:56:56 +0100 Message-ID: <20210817105656.19683-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1629197869457100001 Some versions of GCC complain with: traps.c:405:22: error: 'get_shstk_bottom' defined but not used [-Werror= =3Dunused-function] static unsigned long get_shstk_bottom(unsigned long sp) ^~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Change #ifdef to if ( IS_ENABLED(...) ) to make the sole user of get_shstk_bottom() visible to the compiler. Fixes: 35727551c070 ("x86/cet: Fix shskt manipulation error with BUGFRAME_{= warn,run_fn}") Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu CC: Marek Marczykowski-G=C3=B3recki Not actually tested. I don't seem to have a new enough GCC to hand. Most of the delta here is indentation. This diff is more easily reviewed w= ith `git show --ignore-all-space` --- xen/arch/x86/traps.c | 83 ++++++++++++++++++++++++++----------------------= ---- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 30eefbad4863..4a0e498b4c21 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -780,55 +780,56 @@ static void do_reserved_trap(struct cpu_user_regs *re= gs) static void fixup_exception_return(struct cpu_user_regs *regs, unsigned long fixup) { -#ifdef CONFIG_XEN_SHSTK - unsigned long ssp, *ptr, *base; + if ( IS_ENABLED(CONFIG_XEN_SHSTK) ) + { + unsigned long ssp, *ptr, *base; =20 - asm ( "rdsspq %0" : "=3Dr" (ssp) : "0" (1) ); - if ( ssp =3D=3D 1 ) - goto shstk_done; + asm ( "rdsspq %0" : "=3Dr" (ssp) : "0" (1) ); + if ( ssp =3D=3D 1 ) + goto shstk_done; =20 - ptr =3D _p(ssp); - base =3D _p(get_shstk_bottom(ssp)); + ptr =3D _p(ssp); + base =3D _p(get_shstk_bottom(ssp)); =20 - for ( ; ptr < base; ++ptr ) - { - /* - * Search for %rip. The shstk currently looks like this: - * - * ... [Likely pointed to by SSP] - * %cs [=3D=3D regs->cs] - * %rip [=3D=3D regs->rip] - * SSP [Likely points to 3 slots higher, above %cs] - * ... [call tree to this function, likely 2/3 slots] - * - * and we want to overwrite %rip with fixup. There are two - * complications: - * 1) We cant depend on SSP values, because they won't differ by= 3 - * slots if the exception is taken on an IST stack. - * 2) There are synthetic (unrealistic but not impossible) scena= rios - * where %rip can end up in the call tree to this function, s= o we - * can't check against regs->rip alone. - * - * Check for both regs->rip and regs->cs matching. - */ - if ( ptr[0] =3D=3D regs->rip && ptr[1] =3D=3D regs->cs ) + for ( ; ptr < base; ++ptr ) { - asm ( "wrssq %[fix], %[stk]" - : [stk] "=3Dm" (ptr[0]) - : [fix] "r" (fixup) ); - goto shstk_done; + /* + * Search for %rip. The shstk currently looks like this: + * + * ... [Likely pointed to by SSP] + * %cs [=3D=3D regs->cs] + * %rip [=3D=3D regs->rip] + * SSP [Likely points to 3 slots higher, above %cs] + * ... [call tree to this function, likely 2/3 slots] + * + * and we want to overwrite %rip with fixup. There are two + * complications: + * 1) We cant depend on SSP values, because they won't diffe= r by + * 3 slots if the exception is taken on an IST stack. + * 2) There are synthetic (unrealistic but not impossible) + * scenarios where %rip can end up in the call tree to th= is + * function, so we can't check against regs->rip alone. + * + * Check for both regs->rip and regs->cs matching. + */ + if ( ptr[0] =3D=3D regs->rip && ptr[1] =3D=3D regs->cs ) + { + asm ( "wrssq %[fix], %[stk]" + : [stk] "=3Dm" (ptr[0]) + : [fix] "r" (fixup) ); + goto shstk_done; + } } - } =20 - /* - * We failed to locate and fix up the shadow IRET frame. This could be - * due to shadow stack corruption, or bad logic above. We cannot cont= inue - * executing the interrupted context. - */ - BUG(); + /* + * We failed to locate and fix up the shadow IRET frame. This cou= ld + * be due to shadow stack corruption, or bad logic above. We cann= ot + * continue executing the interrupted context. + */ + BUG(); =20 + } shstk_done: -#endif /* CONFIG_XEN_SHSTK */ =20 /* Fixup the regular stack. */ regs->rip =3D fixup; --=20 2.11.0