From nobody Fri May 3 08:27:25 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=1636120608; cv=none; d=zohomail.com; s=zohoarc; b=V1deIu5A/uxo2Q8rvskXLmRdtG4FOgrBmkW7wcA2qkPXeEZhL4jRrMvL24hrms/L3K5sqwgs1aek0ywVE89w+P4QtcQ7lgts7Fvwxid6OnK7dTSkuKxfxlGBD2xvg0ot0eTrJXe1jj4XP8JU/D4Sq3iEobgdIW/AloyZrU2U8hI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636120608; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ElrcbN3HmEu7tBRwyc0rIoGoWtE+y4hIsg1knUmJBdY=; b=PBxIeZnC4Lnp9N6U8y0cr5cpNGaO8m1cCI1/DiTiybyOtoxK23x/lBb9gQZwYH1nzqdEbtSYDi69Q4MtRLFES33cgkTWxAd06ZPmUnregAQAbkqLHdH1edY0db9sHfI0oAA1O2jq1BN9/q7NlLY2eJMRzoB/R8qzWlkabA9UsfE= 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 1636120608283940.0770736701797; Fri, 5 Nov 2021 06:56:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.222349.384533 (Exim 4.92) (envelope-from ) id 1mizhg-0007OI-M8; Fri, 05 Nov 2021 13:56:24 +0000 Received: by outflank-mailman (output) from mailman id 222349.384533; Fri, 05 Nov 2021 13:56:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhg-0007MW-Eg; Fri, 05 Nov 2021 13:56:24 +0000 Received: by outflank-mailman (input) for mailman id 222349; Fri, 05 Nov 2021 13:56:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhe-00063k-OX for xen-devel@lists.xenproject.org; Fri, 05 Nov 2021 13:56:22 +0000 Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 26f7d69f-3e40-11ec-a9d2-d9f7a1cc8784; Fri, 05 Nov 2021 14:56:19 +0100 (CET) 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: 26f7d69f-3e40-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1636120579; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=mYlYUqOc/+bi2I+rPJTW2ld9A+2pgx6YlF9pI9t4rtU=; b=QEGPihKcGmO3QaYlfZa0bUrFCgGsCJD5xuwpLieDrwQSLYOfpFmtKwEX cCydJYxZ7UGCequOT0vTDX9+y3/G7rT+oONIiw70XR8MTWTER4sy9nr5K I++vhHK0MPaKGVkgttZQxVOorPYMacGKl/5oxCpIZWjSLh+GqPQe93GsI o=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: WpEORgIi5z5MvhqWEwCS9Zp0hU5g1XTcOBU9ITD7d83OB4GqbuwzOePR5ICKUrfrJ2crzMz13s Pnz3jKDPK+ZNYB6MM96Be41qentQqHx4jUFYMpSeFnqlbzJXKdF1uVRE9/AmpSTHbUSOjNZ1TI sUSeqryrFTSCk+eDeGBiyXP266V8mFtRGW2NCeGD+VHoDnQprCwgksveqXIX77/RiP1zQGrx4D QgtA16cR0nfVgfwmwVl+0/6f0wIXBWTrf/Y5+6o9PGCMIlKN3u0VOvOKDGgAOUgHQydQk6PT/I efaH98y8s11DGjPb61BU5NoN X-SBRS: 5.1 X-MesageID: 56699466 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:LZf3sqBTGQm4gxVW/9zkw5YqxClBgxIJ4kV8jS/XYbTApG4igzYOz GVNUDqFO/eDZGX9etgnb4y+8BxXvcTQyNJjQQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WLGs1hxZH1c+EX540U87wIbVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/ig/Kz/Fvl P90rZGUYw4IO5LIwuceXEwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTY+9gnMk8auLsO5sSoCpIxjDFF/c2B5vERs0m4PcFgmlh15wQQ54yY eI4dhNeNA6ZJCREHX05V5MCxL732XnWJmgwRFW9+vNsvjm7IBZK+LT1K9/UZtyiTN1YhFqFv XnB+3nlAxYcL5qUzj/t2nCmi/LLnCj7cJkPD7D+/flv6HWDy2pWBBAIWF+TpfiillX4S99ZM 1YT+Cclse417kPDZtXyUxC3unesog8XW90WFfYzrg6K1MLpDx2xXzZeCGQbMZp/6ZFwFWdCO kK1c83BBAYs4JyLFVik7rqwhzqTPBcRd2wBanpRJeca2OXLrIY2hxPJa99sFq+pk9H4cQ3NL yC2QDsW3OtK05NSv0mv1RWe2m/3+MCVJuIgzlyPBjrN0+9vWGKyi2VEA3D/5O0IEouWR0LpU JMsy5nHt7Bm4X1geUWwrAQx8FOBu6nt3N702wcH83wdG9KFoSPLkWd4umAWGauRGpxYEQIFm WeK0e+r2LddPWGxcYh8aJ+rBsIhwMDITIq+CKiJN4ETPMcpJWdrGR2Cg2bKgggBd2B2wMkC1 WqzK57wXR7294w+lFJauNvxIZd0n3tjlAs/tLjwzgi90Kr2WZJmYextDbd6VchgtPnsiFyMq 753bpLWoz0CALyWSnSGquY7cAFVRUXX8Lir8qS7gMbYeVE4cIzgYteMqY4cl3tNxP8JybuRp ynVt40x4AOXuEAr4D6iMhhLAI4Dl74lxZ7iFSBzb1uuxVY5ZoOjsPUWe5ctJOF1/+1/1/9kC fICfpzYUPhITz3G/RUbbIX889M+JEj621rWMnr3eiU7cr5hWxfNpo3ucDzw+XRcFSGwr8Y// eGtj1uJXZoZSg1+J8/Kc/bznUiptH0QlbsqDUvFK9VeYmv2941uJ3Cjh/M7OZhUex7C2iGbx 0CdBhJB/bvBpIo88d/og6GYrtj2T7siTxQCR2SCtOS4LyjX+Gan0LRsaufQcGCPTn7w9YWje f5Rk6P2PsoYkQsYqIF7Cbtqk/4zvoO9u79Aww14N3zXdFD3WKh4K3yL0MQT5K1AwrhV5Vm/V k6Vo4QIPLyIPIXuEUILJRpjZeOGjKlGlj7X5PUzAUP7+C4oo+bXDRQMZ0GB2H5HMb94EII52 uNw6scZ5ju2hgcuLtvb3Dtf8H6BLyBYXqgq3n3A7FQHVub/Jol+XKHh IronPort-HdrOrdr: A9a23:Wnimjqqhx0g8Mt296v/zWUoaV5opeYIsimQD101hICG8cqSj+f xG/c5rrCMc5wxwZJhNo7y90ey7MBbhHP1OkO8s1NWZLWrbUQKTRekIh+bfKn/baknDH4ZmpM BdmsNFaeEYY2IUsS+D2njbL+od X-IronPort-AV: E=Sophos;i="5.87,212,1631592000"; d="scan'208";a="56699466" From: Andrew Cooper To: Xen-devel CC: Jan Beulich , Andrew Cooper , Daniel De Graaf , "Daniel Smith" , Jan Beulich Subject: [PATCH 1/5] x86/altcall: allow compound types to be passed Date: Fri, 5 Nov 2021 13:55:51 +0000 Message-ID: <20211105135555.24261-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211105135555.24261-1-andrew.cooper3@citrix.com> References: <20211105135555.24261-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1636120610726100004 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jan Beulich Replace the conditional operator in ALT_CALL_ARG(), which was intended to limit usable types to scalar ones, by a size check. Some restriction here is necessary to make sure we don't violate the ABI's calling conventions, but limiting to scalar types was both too restrictive (disallowing e.g. guest handles) and too permissive (allowing e.g. __int128_t). Note that there was some anomaly with that conditional operator anyway: Something - I don't recall what - made it impossible to omit the middle operand. Code-generation-wise this has the effect of removing certain zero- or sign-extending in some altcall invocations. This ought to be fine as the ABI doesn't require sub-sizeof(int) values to be extended, except when passed through an ellipsis. No functions subject to altcall patching has a variable number of arguments, though. Requested-by: Andrew Cooper Signed-off-by: Jan Beulich Acked-by: Andrew Cooper Unfortunately this triggers [-Werror=3Dsizeof-array-argument] on some versi= ons of GCC, so alter xsm_{alloc,free}_security_evtchns() to use a pointer rather than array parameter. Signed-off-by: Andrew Cooper Reviewed-by: Daniel P. Smith --- CC: Daniel De Graaf CC: Daniel Smith CC: Jan Beulich --- xen/include/asm-x86/alternative.h | 4 ++-- xen/include/xsm/xsm.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/include/asm-x86/alternative.h b/xen/include/asm-x86/altern= ative.h index 8e78cc91c35b..8bc59b02afd7 100644 --- a/xen/include/asm-x86/alternative.h +++ b/xen/include/asm-x86/alternative.h @@ -168,8 +168,8 @@ extern void alternative_branches(void); #define ALT_CALL_arg6 "r9" =20 #define ALT_CALL_ARG(arg, n) \ - register typeof((arg) ? (arg) : 0) a ## n ## _ \ - asm ( ALT_CALL_arg ## n ) =3D (arg) + register typeof(arg) a ## n ## _ asm ( ALT_CALL_arg ## n ) =3D \ + ({ BUILD_BUG_ON(sizeof(arg) > sizeof(void *)); (arg); }) #define ALT_CALL_NO_ARG(n) \ register unsigned long a ## n ## _ asm ( ALT_CALL_arg ## n ) =20 diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index c101e653f6d7..0b360e1a3553 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -332,13 +332,13 @@ static inline void xsm_free_security_domain(struct do= main *d) } =20 static inline int xsm_alloc_security_evtchns( - struct evtchn chn[], unsigned int nr) + struct evtchn *chn, unsigned int nr) { return alternative_call(xsm_ops.alloc_security_evtchns, chn, nr); } =20 static inline void xsm_free_security_evtchns( - struct evtchn chn[], unsigned int nr) + struct evtchn *chn, unsigned int nr) { alternative_vcall(xsm_ops.free_security_evtchns, chn, nr); } --=20 2.11.0 From nobody Fri May 3 08:27:25 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=1636120608; cv=none; d=zohomail.com; s=zohoarc; b=blGG8P+GuAmLDEBqmrrUtxAO7Iv7X+YHVRXX0wCDnmFJiJRsPfgzFHDNPpKj6bAXAwynlXrjCsxzIfruiCAzqwqhp5xsH8lk5e4nrTRXNRS3HkOZE4tsC0VvOZOdOxuYA3BC5f/ueX30hEhfe3xSSzEVxCv/QquOjb9keMJekKM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636120608; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=A00YBKWcAmh2UFQFSS4dPuFWlhHXU1V4fTwT08qOgTM=; b=HbhRyV9L0LvPAEL6Rmpj7D8Xw4Wdsj0wNjSY5DxSrG9PX3jEoeEsIpEOxVL5Y+Nb9+JdOxuZSlmLxTD4/EJkpG7gbYtcBW3yzGlKiNdvbosOaEWkhLWTpx+75ByxlnWoLX3261weIWYbNdIxV28DT8hU72HlUC4pcQaap8eaOYw= 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 1636120608899841.398438999513; Fri, 5 Nov 2021 06:56:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.222344.384478 (Exim 4.92) (envelope-from ) id 1mizha-00063z-Tr; Fri, 05 Nov 2021 13:56:18 +0000 Received: by outflank-mailman (output) from mailman id 222344.384478; Fri, 05 Nov 2021 13:56:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizha-00063r-Ql; Fri, 05 Nov 2021 13:56:18 +0000 Received: by outflank-mailman (input) for mailman id 222344; Fri, 05 Nov 2021 13:56:18 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhZ-00063k-Vo for xen-devel@lists.xenproject.org; Fri, 05 Nov 2021 13:56:17 +0000 Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 23e943a8-3e40-11ec-a9d2-d9f7a1cc8784; Fri, 05 Nov 2021 14:56:16 +0100 (CET) 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: 23e943a8-3e40-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1636120575; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=Z0Fb+9kkOYecGzb6U/s5TW2X9lK58LRjbXJhRNnGzwg=; b=IIu/Z/aWUxq4+caaASqLOp2M3uIioZPZpiAG2LagRmDO35WnDZh//FrG 1fd6msg/SU7EyyMybtic3H3NHMFc8ruT0zQwY/RXcqHlNKlp7z1Z3vUGY 7UP0v1g2vR9Gc6xDz+gGIxyfbNji/OCm8hvi3CFUc384hV1THXvkJMdv3 E=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: MLiHBsRH6c7KuqnbWbxgoNIzmyHYLZOhG4NGjVXV2hz8jG3ktzg4koUXly4UCZSo+2WSOukyxo /ajic0xUicILEFZ1eV399eRn0Varr8pJyd8UGofV2cA+Ybo+DraGF3zkSVC8Rg2CKAn3wwZzuI ck2MgSnEUkawRP86RW23630j7MbWKAPIxNBD+JZiAnUASZY2sMF0/9USvA7YrHkxWWBxXand1E IFYGxp89vHjXpvSfnbSa+ULPcCJa+Dq15pUAgZsRwvtXYd7qvgJ0ldwCYcfv0phxEdeYfa2Ymz tTGV+9JbF8GAFCPig977luWC X-SBRS: 5.1 X-MesageID: 56699459 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:watG/qIZ4Q/hkhg8FE+RCZIlxSXFcZb7ZxGr2PjKsXjdYENS0GcGm 2MbWGuOPa2PYWL2LdgkYI+x9htS7cDUy4NgQQVlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUZUideSc+EH140Es7xrZi6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB2An9Fq8 etkraCCSDgxNb3WwuE4bjxXRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsFFgMg5IdatF4QYonx6lhnSDOo8QICFSKLPjTNd9Gpu2JEfQauPD yYfQTtRYj79UjQSAFsON7c4jqSwmEigIjIN/Tp5ooJoujOOnWSdyoPFPMLOf92WRe1chkuCu n/d5GP9Hw0bM9qEjzGC9xqEiuDDkCzhUaoOBba48bhsm1TVyWsNYDUGWF3+rfSnh0qWX9NEN 1dS6icotbI19kGgUp/6RRLQnZKflkdCAZwKSbR8sVzTjPqPi+qEOoQaZjdBaccfiuYueQ4r6 UeCj8mzABlSlbLAHBpx6YyohT+1PCEUK0oLaikFURYJ7rHfnW0jsv7cZo09SfDo17UZDRm1m mnX93Zm293/mOZSj/3jlW0rlQ5AsXQgouQdwgzMFlyo4QpiDGJOT9z5sAOLhRqswWvwc7Vgg JTms5TBhAztJcvU/MBofAnrNOv0jxpiGGeN6WOD57F7q1yQF4eLJOi8Gg1WKkZzKdojcjT0e kLVsg45zMYNZyXyMPYsPtzuU5VCIU3c+TLNDK28gj1mOMkZSeN61Hs2OR74M57FyRBEfV4D1 WezLp/3UCdy5VVPxzuqXeYNuYLHNQhlrV4/savTlkz9uZLHPSb9Ye5cbDOmM7BohIvZ8V692 4sOaKO3J+B3DbSWjt//qtVIczjn7BETWPjLliCgXrXYflU6QTh5YxITqJt4E7FYc21uvr+g1 hmAtoVwkjITXFXLdleHbG5NcrTqUcotpH43J3V0b12px2IiccCk66JGL8k7erwu9epCy/9oT qZaJ5XcU6oXEjmXqS4AaZTdrZB5cEj5jwy5ICf4MiM0eIRtRlKV94a8LBfv7iQHEgG+qdA6/ ++7zgreTJdaH1ZiAc/aZeiB1VS0uXRByut+U1GReotYeVn28ZgsICv016dlL8YJIBTF5z2by wfJXktI+biT+9c4qYCbi7qFooGlF/pFMnBbR2SLv6yrMST6/3a4xdMSWui/Yj2ABnj//7+vZ LsJwqikYuEHhltDr6F1D61vkfAl/9LqqrJXklZkEXHMYwj5A79sOCDbj8xGt6kLzb5FowqmH EmI/4ACa7mOPcrkFn8XJRYkMbvfha1FxGGK4KRnOlj+6Q924KGDABdbMBS7gSBAKKd4bdE+y uA7tc9KswGyh3LG6DpdYvy4I4hUEkE9bg== IronPort-HdrOrdr: A9a23:GtMINK6Ua+lE6zHBAwPXwMrXdLJyesId70hD6qhwISY6TiX4rb HWoB1173/JYVoqNE3I3OrwXZVoIkmsk6Kdg7NhXotKNTOO0ADDQb2Kr7GSpwEIcxeOkdK1vp 0AT0ERMrLN5CBB/KTH3DU= X-IronPort-AV: E=Sophos;i="5.87,212,1631592000"; d="scan'208";a="56699459" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Daniel De Graaf , Daniel Smith Subject: [PATCH 2/5] xen/xsm: Complete altcall conversion of xsm interface Date: Fri, 5 Nov 2021 13:55:52 +0000 Message-ID: <20211105135555.24261-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211105135555.24261-1-andrew.cooper3@citrix.com> References: <20211105135555.24261-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1636120610717100002 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With alternative_call() capable of handling compound types, the three remaining hooks can be optimised at boot time too. Signed-off-by: Andrew Cooper Reviewed-by: Daniel P. Smith Reviewed-by: Jan Beulich --- CC: Daniel De Graaf CC: Daniel Smith I'm on the fence as to whether to declare this as fixing "xsm: convert xsm_= ops hook calls to alternative call" --- xen/include/xsm/xsm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index 0b360e1a3553..82458066f625 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -579,13 +579,13 @@ static inline int xsm_hypfs_op(xsm_default_t def) =20 static inline long xsm_do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op) { - return xsm_ops.do_xsm_op(op); + return alternative_call(xsm_ops.do_xsm_op, op); } =20 #ifdef CONFIG_COMPAT static inline int xsm_do_compat_op(XEN_GUEST_HANDLE_PARAM(void) op) { - return xsm_ops.do_compat_op(op); + return alternative_call(xsm_ops.do_compat_op, op); } #endif =20 @@ -698,7 +698,7 @@ static inline int xsm_mmuext_op( static inline int xsm_update_va_mapping( xsm_default_t def, struct domain *d, struct domain *f, l1_pgentry_t pt= e) { - return xsm_ops.update_va_mapping(d, f, pte); + return alternative_call(xsm_ops.update_va_mapping, d, f, pte); } =20 static inline int xsm_priv_mapping( --=20 2.11.0 From nobody Fri May 3 08:27:25 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=1636120608; cv=none; d=zohomail.com; s=zohoarc; b=FIWOb10BrZCOd+Uvjo6x3XdwSRyV9DtTUKQKhU9dbGH6xCvI5uBTr1pXUK4mLTurpmhlCO3PXi/hJlt2pdGOjlTE7FLqmsufjR1KN7mS9L3oryLjF55ZofnHT13DmMCpOQHUSex+YSzx69/QMGPRacGP5UlaOMNZ4Dy5PjiPY8s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636120608; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JE/xbS1YSMddWKpUwe4G+pfRHmDLNW7dNX+2mPAJJxU=; b=YSaAj4jdEO1T/oxPMREJqT8fo1qUxJ3VW3qZRT/MJ3kwop9jQCCv/JyeR8u0F/XBuoPbiFUt0WOsWKA1bYWU39Ryc5D6a53GVtosqIxEdRTAtLr9Eac32ad7/+Dvv0IRGkwyBv3ih7/uUcbtea+LrNuGufw37Lc64FMGaCIZe1I= 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 163612060877361.561691118118574; Fri, 5 Nov 2021 06:56:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.222346.384500 (Exim 4.92) (envelope-from ) id 1mizhd-0006aG-DH; Fri, 05 Nov 2021 13:56:21 +0000 Received: by outflank-mailman (output) from mailman id 222346.384500; Fri, 05 Nov 2021 13:56:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhd-0006a3-9y; Fri, 05 Nov 2021 13:56:21 +0000 Received: by outflank-mailman (input) for mailman id 222346; Fri, 05 Nov 2021 13:56:19 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhb-00063k-Nl for xen-devel@lists.xenproject.org; Fri, 05 Nov 2021 13:56:19 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 25162320-3e40-11ec-a9d2-d9f7a1cc8784; Fri, 05 Nov 2021 14:56:17 +0100 (CET) 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: 25162320-3e40-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1636120577; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=73dQ75yd67p2Kv9Z6qIaurf9n5YwDjcozGH/T+POHx8=; b=edcdlVkGD58YbTJxZvYikkfmYw+N2wqYtgMm3qLD2cAVQ6RZPr383AYO qT9oT4jnHp5cCYtpghCSpoSYo6zHfUPfO+PeuKNu2PmS/BOthE8zdl5SY ATcfzvxUYyJwXBzYzNgt19ZwYwHql2Fycg0HKtISR7VLJhAK1yW6J9yTh o=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: zPkwD9+bTi71w9vwU7TMWjRFRkPZQkquaaBfjLYiOd1zeD6ibayESVTxgxbr1IL4knvEU+6WN+ YokxvY3P6PcRmPjC/ejcQNBfjff0H+a4oG2CpmGtA/O+BIL64buZTvfFj5qwUTf67plgGT/B2a OzN2KqYFD75O6MflfVpTiFWExIK6hHwshRE2NxjcU4e6iJdLtxZv/LylHS7oelo0pZwDSro6qq X7Zr0GfgEkquBJzvZKbeKzpKgPK0YOanNPR9IaNQvVEIZ6Lrzo5eOZ8+Ffx2fTRtwaJgnKv1EH AF7IY33V3xCEEKOus+CAsJWI X-SBRS: 5.1 X-MesageID: 57137739 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:pwFVBKLUqLteUOw0FE+RCZIlxSXFcZb7ZxGr2PjKsXjdYENSgj1Vn GEcXWHSPPeLYDP0Ktl2Pom19EJV68PXn9Q1TwtlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUZUideSc+EH140Es7xrZj6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB24pfct4 tcWuqbodl55O4/LqaM5eSBHRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsFFgMg5IdatF4QYonx6lhnSDOo8QICFSKLPjTNd9Gpv35sRQq2PD yYfQRpmaTuZRSdeA3ZJUosDtcCKxUnvahQN/Tp5ooJoujOOnWSdyoPFPMLOf92WRe1chkuCu n/d5GP9Hw0bM9qEjzGC9xqEiuDDkCzhUaoOBba48bhsm1TVyWsNYDUGWF3+rfSnh0qWX9NEN 1dS6icotbI19kGgUp/6RRLQnZKflkdCAZwKSbR8sVzTjPqPi+qEOoQaZg97T4AMtpQ5f2QVj w+MvdTYQhhFiaLAHBpx6YyohT+1PCEUK0oLaikFURYJ7rHfnW0jsv7cZo09SfDo17UZDRm1m mnX93Zm293/mOZSj/3jlW0rlQ5AsXQgouQdwgzMFlyo4QpiDGJOT9z5sAOLhRqswWvwc7Vgg JTms5TBhAztJcvU/MBofAnrNOv0jxpiGGeN6WOD57F7q1yQF4eLJOi8Gg1WKkZzKdojcjT0e kLVsg45zMYNZyXyMPYsPtzuU5VCIU3c+TLNDK28gj1mOMkZSeN61Hs2OR74M57FyRBEfV4D1 WezLp/3UCdy5VVPxzuqXeYNuYLHNQhlrV4/savTlkz9uZLHPSb9Ye5cbDOmM7BohIvZ8V692 4sOaKO3J+B3DbSWjt//qtVIczjn7BETWPjLliCgXrXYflU6QTh5YxITqJt4E7FYc21uvr+g1 hmAtoVwkjITXFXLdleHbG5NcrTqUcotpH43J3V0b12px2IiccCk66JGL8k7erwu9epCy/9oT qZaJ5XcU6oXEjmXqS4AaZTdrZB5cEj5jwy5ICf4MiM0eIRtRlKV94a8LBfv7iQHEgG+qdA6/ ++7zgreTJdaH1ZiAc/aZeiB1VS0uXRByut+U1GReotYeVn28ZgsICv016dlL8YJIBTF5z2by wfJXktI+biT+9c4qYCbi7qFooGlF/pFMnBbR2SLv6yrMST6/3a4xdMSWui/Yj2ABnj//7+vZ LsJwqikYuEHhltDr6F1D61vkfAl/9LqqrJXklZkEXHMYwj5A79sOCDbj8xGt6kLzb5FowqmH EmI/4ACa7mOPcrkFn8XJRYkMbvfha1FxGGK4KRnOlj+6Q924KGDABdbMBS7gSBAKKd4bdE+y uA7tc9KswGyh3LG6DpdYvy4I4hUEkE9bg== IronPort-HdrOrdr: A9a23:WOACbK5NPPlqa/p3fgPXwf2CI+orL9Y04lQ7vn2ZFiY6TiXIra +TdaoguSMc0AxhI03Jmbi7Scy9qADnhORICOgqTPmftWzd0ldAQ7sSlLcKrweQeBEWldQtlJ uIEZIOcOEYZGIS5a2WgWmF+r0bsb26GdWT9IHjJgBWPGZXgs9bnmVEIzfeNnczaBhNBJI/Gp bZzNFAvSCcdXMeadn+LmUZXsDYzue7167OUFojPVoK+QOOhTSn5PrRCB6DxCoTVDtJ3PML7X XFqQrk/a+u2svLiCM0llWjqqi+quGRjeerN/b8zPT97Q+c0zpAUb4RH4FqegpF+N1Hpmxay+ Uk6C1QQvibo0mhAl1d5yGdmzXI4XIW8HnlxkafgXz/5eLEZB9SMbsduatpNiLD7Uwupdd917 8O+Vm4md54MTPs9R6NveQhcXlR5xWJSL4Z4LIuZjVkIPUjQa4UoooF8ExPFpAcWCr89YA8Ce FrSNrR/fBMbDqhHj3kl3gqwselUWkzEheAUQwFptGf1SRQkRlCvjwlLWMk7wI9Hb8GOtJ5Dt 7/Q+5VfXB1P7srRLM4AP1ETdq8C2TLTx6JOGWOIU7/HKVCP37WsZb47Lg8+envIfUzvdQPsY WEVEkduX85ekroB8HL1JpX8grVSGH4WTj20MlR65Vwp7W5Trv2Ni+ITkwojqKb0rkiK9yeX+ z2NINdAvflI2erEYFV3xfmU50XMnUaWN19gKdyZ3ue5sbQboH6vO3Sd/jeYLDkFDoiV2vlRm EORzj+PoFB6Vq3UnjzjFzQVhrWCzzCFbkZKtmqwwHS8vlFCmRhiHlntb2J3LD8FdQZiN1IQK JXGsKUrp+G X-IronPort-AV: E=Sophos;i="5.87,211,1631592000"; d="scan'208";a="57137739" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Daniel De Graaf , Daniel Smith Subject: [PATCH 3/5] xen/xsm: Drop xsm_hvm_control() hook Date: Fri, 5 Nov 2021 13:55:53 +0000 Message-ID: <20211105135555.24261-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211105135555.24261-1-andrew.cooper3@citrix.com> References: <20211105135555.24261-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1636120610722100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The final caller was dropped by c/s 58cbc034dc62 "dm_op: convert HVMOP_inject_trap and HVMOP_inject_msi" Signed-off-by: Andrew Cooper Reviewed-by: Daniel P. Smith --- CC: Daniel De Graaf CC: Daniel Smith --- xen/include/xsm/dummy.h | 7 ------- xen/include/xsm/xsm.h | 7 ------- xen/xsm/dummy.c | 1 - xen/xsm/flask/hooks.c | 1 - 4 files changed, 16 deletions(-) diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h index 3b1b378b5899..b024119896e6 100644 --- a/xen/include/xsm/dummy.h +++ b/xen/include/xsm/dummy.h @@ -580,13 +580,6 @@ static XSM_INLINE int xsm_hvm_param( return xsm_default_action(action, current->domain, d); } =20 -static XSM_INLINE int xsm_hvm_control( - XSM_DEFAULT_ARG struct domain *d, unsigned long op) -{ - XSM_ASSERT_ACTION(XSM_DM_PRIV); - return xsm_default_action(action, current->domain, d); -} - static XSM_INLINE int xsm_hvm_param_altp2mhvm(XSM_DEFAULT_ARG struct domai= n *d) { XSM_ASSERT_ACTION(XSM_PRIV); diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index 82458066f625..c5bd4213490a 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -138,7 +138,6 @@ struct xsm_ops { #endif =20 int (*hvm_param)(struct domain *d, unsigned long op); - int (*hvm_control)(struct domain *d, unsigned long op); int (*hvm_param_altp2mhvm)(struct domain *d); int (*hvm_altp2mhvm_op)(struct domain *d, uint64_t mode, uint32_t op); int (*get_vnumainfo)(struct domain *d); @@ -595,12 +594,6 @@ static inline int xsm_hvm_param( return alternative_call(xsm_ops.hvm_param, d, op); } =20 -static inline int xsm_hvm_control( - xsm_default_t def, struct domain *d, unsigned long op) -{ - return alternative_call(xsm_ops.hvm_control, d, op); -} - static inline int xsm_hvm_param_altp2mhvm(xsm_default_t def, struct domain= *d) { return alternative_call(xsm_ops.hvm_param_altp2mhvm, d); diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c index d8c935328e67..041f59fdf4ad 100644 --- a/xen/xsm/dummy.c +++ b/xen/xsm/dummy.c @@ -103,7 +103,6 @@ void __init xsm_fixup_ops (struct xsm_ops *ops) set_to_dummy_if_null(ops, page_offline); set_to_dummy_if_null(ops, hypfs_op); set_to_dummy_if_null(ops, hvm_param); - set_to_dummy_if_null(ops, hvm_control); set_to_dummy_if_null(ops, hvm_param_altp2mhvm); set_to_dummy_if_null(ops, hvm_altp2mhvm_op); =20 diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index ea9a12bd7121..3b29f7fde372 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1816,7 +1816,6 @@ static const struct xsm_ops __initconstrel flask_ops = =3D { .page_offline =3D flask_page_offline, .hypfs_op =3D flask_hypfs_op, .hvm_param =3D flask_hvm_param, - .hvm_control =3D flask_hvm_param, .hvm_param_altp2mhvm =3D flask_hvm_param_altp2mhvm, .hvm_altp2mhvm_op =3D flask_hvm_altp2mhvm_op, =20 --=20 2.11.0 From nobody Fri May 3 08:27:25 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=1636120608; cv=none; d=zohomail.com; s=zohoarc; b=Oxx9TRFSWIr7PYCGlgf0Uj4uLUW6edqo26IRPHUk9GpGSQ/8OQhmKosz7dfLfxbamvxlKvv1ElaVKtg9kIWtwX8sY59FWao5FzxA6VHlR/gsOaAINC85cLmJ9bPUnfCgmQvUFyay84jR9ok5WGNcmfGtBlQB3+KGfH9MUIb1xXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636120608; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mAcPEyPjL7/iiXZsfaMXt7eQyJh02Zxn8moMnn0Fhac=; b=ST0JnfWbZ1wUegdjT2AOhmVPw2pHSRN4GWGB9q8T7ZO45TxNMT2IUTIf6W+uFaNWoG+6Tc6fUArnYXtkrZFj6dEWuO5dChYjMCwItNzo0PBj3lcoyxMluQfIGbrXRSKnPCsQ/lOedYddQDPiNp6I7LOS15jZS/YB7UB0/Soe/x4= 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 1636120608255201.95841802658958; Fri, 5 Nov 2021 06:56:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.222347.384511 (Exim 4.92) (envelope-from ) id 1mizhe-0006rD-LW; Fri, 05 Nov 2021 13:56:22 +0000 Received: by outflank-mailman (output) from mailman id 222347.384511; Fri, 05 Nov 2021 13:56:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhe-0006qr-HM; Fri, 05 Nov 2021 13:56:22 +0000 Received: by outflank-mailman (input) for mailman id 222347; Fri, 05 Nov 2021 13:56:21 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhc-00063k-O5 for xen-devel@lists.xenproject.org; Fri, 05 Nov 2021 13:56:20 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 26a6ab5f-3e40-11ec-a9d2-d9f7a1cc8784; Fri, 05 Nov 2021 14:56:19 +0100 (CET) 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: 26a6ab5f-3e40-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1636120579; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=fOKvCwOi4OlG1f6O+oqdtMDNMG9VOfKqmOXJmlq8GK4=; b=RdNGBYg/Uxn/xUI1kKHMAqLuyCJfc7Kt0aEurCzKn5A13LQLVFwGcJE+ lcBnpzmTRZRrgIerDipr+ijYhfLHapUPNgYGvwoqG766lM5lTwIIH01SY +D/y81nY7m7/+v9FmlMfAWqmJKebtkIuaMqRdjsaCBEmBbv6H8tbGtn6V c=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: YSPAK9CXf0pQ/VfHSun52glhaduhRU3vBrd+kO3mgogNToRmkvqd36E6XoanmbaT5Du9cTzWdg 5fbwYh+mBbBY3cvxs7UBxLNBA5jV/GjTmfyzcRXTTTlnGaYugRxy9bS1TI6cEnAXRUeaqpBoSp AKQnW1djsGgDLpL0Fi3LmR0NNGPME4DqXd+regm+0sSaVS5GMsYFFgJ8Z2E+O32RZu/L8bxr4X B8/zSLPjQVlcF1GHc5jUzvtsCm3nugZmy9J5SCnutrz2wx8+tYcC704GGjLxJLYO7bH8tl3CJt UMmaxbWLKoCNdoBpsmOpMm4o X-SBRS: 5.1 X-MesageID: 57137740 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:J/hufaK7Sa9f+dImFE+RCZIlxSXFcZb7ZxGr2PjKsXjdYENSgmZWy WdLWTqHOaneNDamKosgat+w9E8FsJDdzIdlQAZlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUZUideSc+EH140Es7xrZj6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB24pfct4 tcWuqbodl55O4/LqaM5eSBHRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsFFgMg5IdatF4QYonx6lhnSDOo8QICFSKLPjTNd9Gpv35sRQqqGD yYfQQtyLx/RRDxXA1hUUs4Yo9WDnWH+VAQN/Tp5ooJoujOOnWSdyoPFPMLOf92WRe1chkuCu n/d5GP9Hw0bM9qEjzGC9xqEiuDDkCzhUaoOBba48bhsm1TVyWsNYDUGWF3+rfSnh0qWX9NEN 1dS6icotbI19kGgUp/6RRLQnZKflkdCAZwKSbR8sVzTjPqPi+qEOoQaZg97T4AMtpQ5f2QVj w+MvdTYQhhFiaLAHBpx6YyohT+1PCEUK0oLaikFURYJ7rHfnW0jsv7cZo09SfDo17UZDRm1m mnX93Zm293/mOZSj/3jlW0rlQ5AsXQgouQdwgzMFlyo4QpiDGJOT9z5sAOLhRqswWvwc7Vgg JTms5TBhAztJcvU/MBofAnrNOv0jxpiGGeN6WOD57F7q1yQF4eLJOi8Gg1WKkZzKdojcjT0e kLVsg45zMYNZyXyMPYsPtzuU5VCIU3c+TLNDK28gj1mOMkZSeN61Hs2OR74M57FyRBEfV4D1 WezLp/3UCdy5VVPxzuqXeYNuYLHNQhlrV4/savTlkz9uZLHPSb9Ye5cbDOmM7BohIvZ8V692 4sOaKO3J+B3DbSWjt//qtVIczjn7BETWPjLliCgXrXYflU6QTh5YxITqJt4E7FYc21uvr+g1 hmAtoVwkzITXFXLdleHbG5NcrTqUcotpH43J3V0b12px2IiccCk66JGL8k7erwu9epCy/9oT qZaJ5XcU6oXEjmXqS4AaZTdrZB5cEj5jwy5ICf4MiM0eIRtRlKV94a8LBfv7iQHEgG+qdA6/ ++7zgreTJdaH1ZiAc/aZeiB1VS0uXRByut+U1GReotYeVn28ZgsICv016dlL8YJIBTF5z2by wfJXktI+biT+9c4qYCbi7qFooGlF/pFMnBbR2SLv6yrMST6/3a4xdMSWui/Yj2ABnj//7+vZ LsJwqikYuEHhltDr6F1D61vkfAl/9LqqrJXklZkEXHMYwj5A79sOCDbj8xGt6kLzb5FowqmH EmI/4ACa7mOPcrkFn8XJRYkMbvfha1FxGGK4KRnOlj+6Q924KGDABdbMBS7gSBAKKd4bdE+y uA7tc9KswGyh3LG6DpdYvy4I4hUEkE9bg== IronPort-HdrOrdr: A9a23:h0mtf64XDzfxV4cfFAPXwMzXdLJyesId70hD6qhwISY1TiX4rb HXoB11726WtN98Yh4dcJW7Sc29qBDnhOdICOsqTNWftWDd0QPCRuwP0WKh+UyGJ8SXzJ866U 4KSchD4bPLY2SS9fyKhTWFLw== X-IronPort-AV: E=Sophos;i="5.87,211,1631592000"; d="scan'208";a="57137740" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Daniel De Graaf , Daniel Smith Subject: [PATCH 4/5] xen/xsm: Improve fallback handling in xsm_fixup_ops() Date: Fri, 5 Nov 2021 13:55:54 +0000 Message-ID: <20211105135555.24261-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211105135555.24261-1-andrew.cooper3@citrix.com> References: <20211105135555.24261-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1636121512344100002 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current xsm_fixup_ops() is just shy of a full page when compiled, and v= ery fragile to NULL function pointer errors. Address both of these issues with a minor piece of structure (ab)use. Introduce dummy_ops, and fixup the provided xsm_ops pointer by treating both as an array of unsigned longs. The compiled size improvement speaks for itself: $ ../scripts/bloat-o-meter xen-syms-before xen-syms-after add/remove: 1/0 grow/shrink: 0/1 up/down: 712/-3897 (-3185) Function old new delta dummy_ops - 712 +712 xsm_fixup_ops 3987 90 -3897 and there is an additional safety check that will make it obvious during development if there is an issue with the fallback handling. Signed-off-by: Andrew Cooper Reviewed-by: Daniel P. Smith --- CC: Daniel De Graaf CC: Daniel Smith --- xen/include/xsm/xsm.h | 9 ++ xen/xsm/dummy.c | 254 +++++++++++++++++++++++++++-------------------= ---- 2 files changed, 147 insertions(+), 116 deletions(-) diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index c5bd4213490a..5aa4dd588d17 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -42,6 +42,15 @@ enum xsm_default { }; typedef enum xsm_default xsm_default_t; =20 +/* + * !!! WARNING !!! + * + * For simplicity, xsm_fixup_ops() expects that this structure is made + * exclusively of function pointers to non-init functions. Think carefully + * before deviating from the pattern. + * + * !!! WARNING !!! + */ struct xsm_ops { void (*security_domaininfo)(struct domain *d, struct xen_domctl_getdomaininfo *info); diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c index 041f59fdf4ad..c111fa05968d 100644 --- a/xen/xsm/dummy.c +++ b/xen/xsm/dummy.c @@ -13,145 +13,167 @@ #define XSM_NO_WRAPPERS #include =20 -#define set_to_dummy_if_null(ops, function) \ - do { \ - if ( !ops->function ) \ - ops->function =3D xsm_##function; \ - } while (0) - -void __init xsm_fixup_ops (struct xsm_ops *ops) -{ - set_to_dummy_if_null(ops, security_domaininfo); - set_to_dummy_if_null(ops, domain_create); - set_to_dummy_if_null(ops, getdomaininfo); - set_to_dummy_if_null(ops, domctl_scheduler_op); - set_to_dummy_if_null(ops, sysctl_scheduler_op); - set_to_dummy_if_null(ops, set_target); - set_to_dummy_if_null(ops, domctl); - set_to_dummy_if_null(ops, sysctl); - set_to_dummy_if_null(ops, readconsole); - - set_to_dummy_if_null(ops, evtchn_unbound); - set_to_dummy_if_null(ops, evtchn_interdomain); - set_to_dummy_if_null(ops, evtchn_close_post); - set_to_dummy_if_null(ops, evtchn_send); - set_to_dummy_if_null(ops, evtchn_status); - set_to_dummy_if_null(ops, evtchn_reset); - - set_to_dummy_if_null(ops, grant_mapref); - set_to_dummy_if_null(ops, grant_unmapref); - set_to_dummy_if_null(ops, grant_setup); - set_to_dummy_if_null(ops, grant_transfer); - set_to_dummy_if_null(ops, grant_copy); - set_to_dummy_if_null(ops, grant_query_size); - - set_to_dummy_if_null(ops, alloc_security_domain); - set_to_dummy_if_null(ops, free_security_domain); - set_to_dummy_if_null(ops, alloc_security_evtchns); - set_to_dummy_if_null(ops, free_security_evtchns); - set_to_dummy_if_null(ops, show_security_evtchn); - set_to_dummy_if_null(ops, init_hardware_domain); - - set_to_dummy_if_null(ops, get_pod_target); - set_to_dummy_if_null(ops, set_pod_target); - - set_to_dummy_if_null(ops, memory_exchange); - set_to_dummy_if_null(ops, memory_adjust_reservation); - set_to_dummy_if_null(ops, memory_stat_reservation); - set_to_dummy_if_null(ops, memory_pin_page); - set_to_dummy_if_null(ops, claim_pages); - - set_to_dummy_if_null(ops, console_io); - - set_to_dummy_if_null(ops, profile); - - set_to_dummy_if_null(ops, kexec); - set_to_dummy_if_null(ops, schedop_shutdown); - - set_to_dummy_if_null(ops, show_irq_sid); - set_to_dummy_if_null(ops, map_domain_pirq); - set_to_dummy_if_null(ops, map_domain_irq); - set_to_dummy_if_null(ops, unmap_domain_pirq); - set_to_dummy_if_null(ops, unmap_domain_irq); - set_to_dummy_if_null(ops, bind_pt_irq); - set_to_dummy_if_null(ops, unbind_pt_irq); - set_to_dummy_if_null(ops, irq_permission); - set_to_dummy_if_null(ops, iomem_permission); - set_to_dummy_if_null(ops, iomem_mapping); - set_to_dummy_if_null(ops, pci_config_permission); - set_to_dummy_if_null(ops, get_vnumainfo); +static const struct xsm_ops __initconstrel dummy_ops =3D { + .security_domaininfo =3D xsm_security_domaininfo, + .domain_create =3D xsm_domain_create, + .getdomaininfo =3D xsm_getdomaininfo, + .domctl_scheduler_op =3D xsm_domctl_scheduler_op, + .sysctl_scheduler_op =3D xsm_sysctl_scheduler_op, + .set_target =3D xsm_set_target, + .domctl =3D xsm_domctl, + .sysctl =3D xsm_sysctl, + .readconsole =3D xsm_readconsole, + + .evtchn_unbound =3D xsm_evtchn_unbound, + .evtchn_interdomain =3D xsm_evtchn_interdomain, + .evtchn_close_post =3D xsm_evtchn_close_post, + .evtchn_send =3D xsm_evtchn_send, + .evtchn_status =3D xsm_evtchn_status, + .evtchn_reset =3D xsm_evtchn_reset, + + .grant_mapref =3D xsm_grant_mapref, + .grant_unmapref =3D xsm_grant_unmapref, + .grant_setup =3D xsm_grant_setup, + .grant_transfer =3D xsm_grant_transfer, + .grant_copy =3D xsm_grant_copy, + .grant_query_size =3D xsm_grant_query_size, + + .alloc_security_domain =3D xsm_alloc_security_domain, + .free_security_domain =3D xsm_free_security_domain, + .alloc_security_evtchns =3D xsm_alloc_security_evtchns, + .free_security_evtchns =3D xsm_free_security_evtchns, + .show_security_evtchn =3D xsm_show_security_evtchn, + .init_hardware_domain =3D xsm_init_hardware_domain, + + .get_pod_target =3D xsm_get_pod_target, + .set_pod_target =3D xsm_set_pod_target, + + .memory_exchange =3D xsm_memory_exchange, + .memory_adjust_reservation =3D xsm_memory_adjust_reservation, + .memory_stat_reservation =3D xsm_memory_stat_reservation, + .memory_pin_page =3D xsm_memory_pin_page, + .claim_pages =3D xsm_claim_pages, + + .console_io =3D xsm_console_io, + + .profile =3D xsm_profile, + + .kexec =3D xsm_kexec, + .schedop_shutdown =3D xsm_schedop_shutdown, + + .show_irq_sid =3D xsm_show_irq_sid, + .map_domain_pirq =3D xsm_map_domain_pirq, + .map_domain_irq =3D xsm_map_domain_irq, + .unmap_domain_pirq =3D xsm_unmap_domain_pirq, + .unmap_domain_irq =3D xsm_unmap_domain_irq, + .bind_pt_irq =3D xsm_bind_pt_irq, + .unbind_pt_irq =3D xsm_unbind_pt_irq, + .irq_permission =3D xsm_irq_permission, + .iomem_permission =3D xsm_iomem_permission, + .iomem_mapping =3D xsm_iomem_mapping, + .pci_config_permission =3D xsm_pci_config_permission, + .get_vnumainfo =3D xsm_get_vnumainfo, =20 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI) - set_to_dummy_if_null(ops, get_device_group); - set_to_dummy_if_null(ops, assign_device); - set_to_dummy_if_null(ops, deassign_device); + .get_device_group =3D xsm_get_device_group, + .assign_device =3D xsm_assign_device, + .deassign_device =3D xsm_deassign_device, #endif =20 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE) - set_to_dummy_if_null(ops, assign_dtdevice); - set_to_dummy_if_null(ops, deassign_dtdevice); + .assign_dtdevice =3D xsm_assign_dtdevice, + .deassign_dtdevice =3D xsm_deassign_dtdevice, #endif =20 - set_to_dummy_if_null(ops, resource_plug_core); - set_to_dummy_if_null(ops, resource_unplug_core); - set_to_dummy_if_null(ops, resource_plug_pci); - set_to_dummy_if_null(ops, resource_unplug_pci); - set_to_dummy_if_null(ops, resource_setup_pci); - set_to_dummy_if_null(ops, resource_setup_gsi); - set_to_dummy_if_null(ops, resource_setup_misc); - - set_to_dummy_if_null(ops, page_offline); - set_to_dummy_if_null(ops, hypfs_op); - set_to_dummy_if_null(ops, hvm_param); - set_to_dummy_if_null(ops, hvm_param_altp2mhvm); - set_to_dummy_if_null(ops, hvm_altp2mhvm_op); - - set_to_dummy_if_null(ops, do_xsm_op); + .resource_plug_core =3D xsm_resource_plug_core, + .resource_unplug_core =3D xsm_resource_unplug_core, + .resource_plug_pci =3D xsm_resource_plug_pci, + .resource_unplug_pci =3D xsm_resource_unplug_pci, + .resource_setup_pci =3D xsm_resource_setup_pci, + .resource_setup_gsi =3D xsm_resource_setup_gsi, + .resource_setup_misc =3D xsm_resource_setup_misc, + + .page_offline =3D xsm_page_offline, + .hypfs_op =3D xsm_hypfs_op, + .hvm_param =3D xsm_hvm_param, + .hvm_param_altp2mhvm =3D xsm_hvm_param_altp2mhvm, + .hvm_altp2mhvm_op =3D xsm_hvm_altp2mhvm_op, + + .do_xsm_op =3D xsm_do_xsm_op, #ifdef CONFIG_COMPAT - set_to_dummy_if_null(ops, do_compat_op); + .do_compat_op =3D xsm_do_compat_op, #endif =20 - set_to_dummy_if_null(ops, add_to_physmap); - set_to_dummy_if_null(ops, remove_from_physmap); - set_to_dummy_if_null(ops, map_gmfn_foreign); + .add_to_physmap =3D xsm_add_to_physmap, + .remove_from_physmap =3D xsm_remove_from_physmap, + .map_gmfn_foreign =3D xsm_map_gmfn_foreign, =20 - set_to_dummy_if_null(ops, vm_event_control); + .vm_event_control =3D xsm_vm_event_control, =20 #ifdef CONFIG_MEM_ACCESS - set_to_dummy_if_null(ops, mem_access); + .mem_access =3D xsm_mem_access, #endif =20 #ifdef CONFIG_MEM_PAGING - set_to_dummy_if_null(ops, mem_paging); + .mem_paging =3D xsm_mem_paging, #endif =20 #ifdef CONFIG_MEM_SHARING - set_to_dummy_if_null(ops, mem_sharing); + .mem_sharing =3D xsm_mem_sharing, #endif =20 - set_to_dummy_if_null(ops, platform_op); + .platform_op =3D xsm_platform_op, #ifdef CONFIG_X86 - set_to_dummy_if_null(ops, do_mca); - set_to_dummy_if_null(ops, shadow_control); - set_to_dummy_if_null(ops, mem_sharing_op); - set_to_dummy_if_null(ops, apic); - set_to_dummy_if_null(ops, machine_memory_map); - set_to_dummy_if_null(ops, domain_memory_map); - set_to_dummy_if_null(ops, mmu_update); - set_to_dummy_if_null(ops, mmuext_op); - set_to_dummy_if_null(ops, update_va_mapping); - set_to_dummy_if_null(ops, priv_mapping); - set_to_dummy_if_null(ops, ioport_permission); - set_to_dummy_if_null(ops, ioport_mapping); - set_to_dummy_if_null(ops, pmu_op); + .do_mca =3D xsm_do_mca, + .shadow_control =3D xsm_shadow_control, + .mem_sharing_op =3D xsm_mem_sharing_op, + .apic =3D xsm_apic, + .machine_memory_map =3D xsm_machine_memory_map, + .domain_memory_map =3D xsm_domain_memory_map, + .mmu_update =3D xsm_mmu_update, + .mmuext_op =3D xsm_mmuext_op, + .update_va_mapping =3D xsm_update_va_mapping, + .priv_mapping =3D xsm_priv_mapping, + .ioport_permission =3D xsm_ioport_permission, + .ioport_mapping =3D xsm_ioport_mapping, + .pmu_op =3D xsm_pmu_op, #endif - set_to_dummy_if_null(ops, dm_op); - set_to_dummy_if_null(ops, xen_version); - set_to_dummy_if_null(ops, domain_resource_map); + .dm_op =3D xsm_dm_op, + .xen_version =3D xsm_xen_version, + .domain_resource_map =3D xsm_domain_resource_map, #ifdef CONFIG_ARGO - set_to_dummy_if_null(ops, argo_enable); - set_to_dummy_if_null(ops, argo_register_single_source); - set_to_dummy_if_null(ops, argo_register_any_source); - set_to_dummy_if_null(ops, argo_send); + .argo_enable =3D xsm_argo_enable, + .argo_register_single_source =3D xsm_argo_register_single_source, + .argo_register_any_source =3D xsm_argo_register_any_source, + .argo_send =3D xsm_argo_send, #endif +}; + +void __init xsm_fixup_ops(struct xsm_ops *ops) +{ + /* + * We make some simplifying assumptions about struct xsm_ops; that it = is + * made exclusively of function pointers to non-init text. + * + * This allows us to walk over struct xsm_ops as if it were an array of + * unsigned longs. + */ + unsigned long *dst =3D _p(ops); + unsigned long *src =3D _p(&dummy_ops); + + for ( ; dst < (unsigned long *)(ops + 1); src++, dst++ ) + { + /* + * If you encounter this BUG(), then you've most likely added a new + * XSM hook but failed to provide the default implementation in + * dummy_ops. + * + * If not, then perhaps a function pointer to an init function, or + * something which isn't a function pointer at all. + */ + BUG_ON(!is_kernel_text(*src)); + + if ( !*dst ) + *dst =3D *src; + } } --=20 2.11.0 From nobody Fri May 3 08:27:25 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=1636120609; cv=none; d=zohomail.com; s=zohoarc; b=UcuY+hKJYddd1Wwyj0g1T0L42c2gUnyZYDiLv1Dq5I+crxGiSzqwkE2aKCqRPqt2t+UG2d3kbpJJ3HxIdVqjiqs4me8B8kLwxaTdq3I0NPgoCH4Rrvzf8P/eFmRYxrdJtqO91sBfwm4x4zHDFmV7PxAbU4XNJCKXldfiz+gckbU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636120609; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HDalti3D+zCYeD39ADyyXkL4QjCZzhevrQx8WsJok2I=; b=W7AKwLnDQqPUQdjoxHs0Xjzce5GYClQxGj73pXAttG+tjgURFegvi3oI+33iFojAO4odBdbMcctwEEBIbim6Q+BgGbgperraTPRfUiQ4CFE4d+z9rGr+NAcLaYWWju4sQQc4yhXkhG7XqJCptL3uPXF8X8dxwz0Zbs0J+FpCsGU= 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 1636120609259265.37238625027476; Fri, 5 Nov 2021 06:56:49 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.222348.384517 (Exim 4.92) (envelope-from ) id 1mizhf-0006vV-5p; Fri, 05 Nov 2021 13:56:23 +0000 Received: by outflank-mailman (output) from mailman id 222348.384517; Fri, 05 Nov 2021 13:56:23 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhe-0006ue-V0; Fri, 05 Nov 2021 13:56:22 +0000 Received: by outflank-mailman (input) for mailman id 222348; Fri, 05 Nov 2021 13:56:22 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mizhd-00063k-OQ for xen-devel@lists.xenproject.org; Fri, 05 Nov 2021 13:56:21 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 25c0639a-3e40-11ec-a9d2-d9f7a1cc8784; Fri, 05 Nov 2021 14:56:19 +0100 (CET) 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: 25c0639a-3e40-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1636120579; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=jE3t3ojHgtOHN6Ilg6l9UgKhubTh2BJEn5CMoqQCWrM=; b=Ytn6jnIHF6+8WIMVvWiIJ1WgHuSXMV0NMtnkxQwHLY5KcONcA5rzjaYO 68EFHoH7lG6XOV8b5vXBpvuHzc2REykS4Hrxr4STftdZzfj1/hIjwGvjM rK5kL3TWlbNBVYKTjmAPTzVx0yEmpmvAi1Jb/g2XsLWsLbZIz+FT94kr6 I=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: jPPOO8eak+TuVctPl7Fi/nDgDR1SgKPTta6cvNGMdPBNSP1+8z7oWfuk7xDRFYTT8XRg8DY/hF ewAnFUBwirH3pOC0WgfZzAv+lauvq7wlFmZrJxdI6k/mMwtwQkPzrY8kJfTbRsnf183nOUFmom f3ueUrP29KLyV2eiLH87N2TFP4MYrH6eVoZLeAkItrq3TTthc3zOGSnjsXhsMS/vt0m2hlXX4e k2RuppHNB+XbWgkpgqQCdZh9Q1PyZ+w6u/UwY1gpNPVybwkf+tNocYxrKMslbMs1MXH8V2twKV hRd8EqITFmBdmCIzzmP4kHca X-SBRS: 5.1 X-MesageID: 57163417 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:Gh0Ye6l0ak6bc4LdoalbVijo5gxZIURdPkR7XQ2eYbSJt1+Wr1Gzt xIaXzuPO6rcZmumKdt1btyw8k0HuMXVzIdlQFRt+ylgFyMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA187IMsdoUg7wbdg29Y12YLR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 PtGlreUbyVwB6iStO8iTQUICw9dApQTrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBODtMJkSpTdLyjbBAOx9aZvCX7/L9ZlT2zJYasVmQKmHO ZFFMGUHgBLoOCNweQdQObIExbmspl39Iwxkq1+qnP9ii4TU5FMoi+W8WDbPQfSGXd5Qn1qYj mve8n7lHwoBM9iC1TuC9GnqjejK9Qv3V44fG6ex3uJ7i12UgGoIAVsZUkXTiem0jAuyVsxSL 2QQ+zEytu4i+UqzVN7/Uhak5nmesXYht8F4SrNgrlvXk+yNvljfVjNsoiN9hMIOmsQVbhgM9 Aawmo3FDgNxrO2NZ1Giz+LBxd+tAhQ9IWgHbC4CaAIK5dj/vY0+5i7yosZf/L2d1YOsR2ypq 9yehG1n3uhI05ZXv0mu1Qmf22rEm3TfcuIiCuw7tEqB5xgxWoOqbpfABbPzvacZd9bxorVsU RE5dymiAAImUc7leM+lGrxl8FSVCxCtamC0bblHRchJythV0yT/Fb28GRknTKuTDu4KeCXyf GjYsh5L6ZlYMROCNPEsPdrsUp93k/e4RLwJs8w4iPIUP/CdkyfdrUlTibO4hTixwCDAb4lmY f93jvpA/V5FUP86nVJats8W0KMxxzBW+I8gbcuT8vhT6pLHPCT9Ye5caDOmN7llhIvZ8FS92 4sObKOilkQAONASlwGKqOb/23hRdiNlbX03wuQKHtO+zv1OQzp9VKOImOtJlk4Mt/09q9okN 0qVAidwoGcTT1WeQelTQnw8Or7pQ7hlqnc3YX4lMVqygiBxaoez9qYPMZAweOB/puBkyPd1S dgDetmBXasTGmiWpWxFYMmvtpFmeTSqmRmKY3ivbg8gcsMyXAfO4NLlIFfirXFcEiqtuMIii LS8zQeHE4EbTgFvAZ+OOvKixl+8p1YHn+d2UxeaK9VfYhy0ooNrNzbwnrk8JMRVcUfPwT6T1 gC3BxYEpLaS/99poYeR3a3d9tWnCepzGEZeDlL317fuOHmI5HenzK9BTP2MIWLXWlTr9fjwf u5S1fz9bqEKxQ4Yr4pmHr935qsi/N+z9aRCxwFpEXiXPVSmDrRsfiuP0cVV7/Afw7ZYvU29W 16V+8kcMrKMYZu3HFkULQsjT+KCyfBLxWWCsaVreB33tH1t4b6KcUROJB3d2iVSIYx8PJ4h3 ep86tUd7Bayi0ZyP9uL5syOG79g8pDUv30bi6wn IronPort-HdrOrdr: A9a23:2rJlBq7J+Juc7Vs5RQPXwMrXdLJyesId70hD6qhwISY6TiX4rb HWoB1173/JYVoqNE3I3OrwXZVoIkmsk6Kdg7NhXotKNTOO0ADDQb2Kr7GSpwEIcxeOkdK1vp 0AT0ERMrLN5CBB/KTH3DU= X-IronPort-AV: E=Sophos;i="5.87,211,1631592000"; d="scan'208";a="57163417" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Daniel De Graaf , Daniel Smith Subject: [PATCH 5/5] xen/xsm: Address hypercall ABI problems Date: Fri, 5 Nov 2021 13:55:55 +0000 Message-ID: <20211105135555.24261-6-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211105135555.24261-1-andrew.cooper3@citrix.com> References: <20211105135555.24261-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1636120610858100006 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, __HYPERVISOR_xsm_op enters xsm_ops.do_{xsm,compat}_op() which me= ans that if any other XSM module registers a handler, we'll break the hypercall ABI totally by having the behaviour depend on the selected XSM module. There are 2 options: 1) Rename __HYPERVISOR_xsm_op to __HYPERVISOR_flask_op. If another XSM module wants hypercalls, they'll have to introduce a new top-level hypercall. 2) Make the current flask_op() be common, and require new hypercalls to fit compatibly with xen_flask_op_t. This can be done fairly easily by subdividing the .cmd space. In this patch, we implement option 2. Move the stub {do,compat}_xsm_op() implementation into a new xsm_op.c so we can more easily do multi-inclusion compat magic. Also add a new private.h, because flask/hook.c's local declaration of {do,compat}_flask_op() wasn't remotely safe. The top level now dispatches into {do,compat}_flask_op() based on op.cmd, a= nd handles the primary copy in/out. Signed-off-by: Andrew Cooper --- CC: Daniel De Graaf CC: Daniel Smith Only lightly tested. Slightly RFC. There are several things which aren't great, but probably want addressing in due course. 1) The public headers probably want to lose the flask name (in a compatible way), now that the hypercall is common. This probably wants to be combined with no longer taking a void handle. 2) {do,compat}_xsm_op() are currently identical other than the dispatched-= to functions because the size of xsm_flask_op_t is invariant with COMPAT-ness. We could simplfy things by only having one, and dispatchi= ng to {do,compat}_*_op() directly, but I'm not sure whether the complexity= is worth it. 3) Bloat-o-meter says these changes add 16 extra bytes to dm_op() and I ca= n't figure out what could possibly be causing this. --- xen/include/Makefile | 2 +- xen/include/xsm/dummy.h | 12 ---------- xen/include/xsm/xsm.h | 17 -------------- xen/xsm/Makefile | 1 + xen/xsm/dummy.c | 5 ---- xen/xsm/flask/flask_op.c | 60 ++++++++++++++++++++++----------------------= ---- xen/xsm/flask/hooks.c | 8 ------- xen/xsm/private.h | 16 +++++++++++++ xen/xsm/xsm_core.c | 12 ---------- xen/xsm/xsm_op.c | 51 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 96 insertions(+), 88 deletions(-) create mode 100644 xen/xsm/private.h create mode 100644 xen/xsm/xsm_op.c diff --git a/xen/include/Makefile b/xen/include/Makefile index 95daa8a28975..9547f848635c 100644 --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -32,7 +32,7 @@ headers-$(CONFIG_HYPFS) +=3D compat/hypfs.h headers-$(CONFIG_KEXEC) +=3D compat/kexec.h headers-$(CONFIG_TRACEBUFFER) +=3D compat/trace.h headers-$(CONFIG_XENOPROF) +=3D compat/xenoprof.h -headers-$(CONFIG_XSM_FLASK) +=3D compat/xsm/flask_op.h +headers-$(CONFIG_XSM) +=3D compat/xsm/flask_op.h =20 cppflags-y :=3D -include public/xen-compat.h -DXEN_GENERATI= NG_COMPAT_HEADERS cppflags-$(CONFIG_X86) +=3D -m32 diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h index b024119896e6..5448e9970bc1 100644 --- a/xen/include/xsm/dummy.h +++ b/xen/include/xsm/dummy.h @@ -466,18 +466,6 @@ static XSM_INLINE int xsm_hypfs_op(XSM_DEFAULT_VOID) return xsm_default_action(action, current->domain, NULL); } =20 -static XSM_INLINE long xsm_do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return -ENOSYS; -} - -#ifdef CONFIG_COMPAT -static XSM_INLINE int xsm_do_compat_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return -ENOSYS; -} -#endif - static XSM_INLINE char *xsm_show_irq_sid(int irq) { return NULL; diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index 5aa4dd588d17..4856b589dd86 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -141,11 +141,6 @@ struct xsm_ops { int (*page_offline)(uint32_t cmd); int (*hypfs_op)(void); =20 - long (*do_xsm_op)(XEN_GUEST_HANDLE_PARAM(void) op); -#ifdef CONFIG_COMPAT - int (*do_compat_op)(XEN_GUEST_HANDLE_PARAM(void) op); -#endif - int (*hvm_param)(struct domain *d, unsigned long op); int (*hvm_param_altp2mhvm)(struct domain *d); int (*hvm_altp2mhvm_op)(struct domain *d, uint64_t mode, uint32_t op); @@ -585,18 +580,6 @@ static inline int xsm_hypfs_op(xsm_default_t def) return alternative_call(xsm_ops.hypfs_op); } =20 -static inline long xsm_do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return alternative_call(xsm_ops.do_xsm_op, op); -} - -#ifdef CONFIG_COMPAT -static inline int xsm_do_compat_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return alternative_call(xsm_ops.do_compat_op, op); -} -#endif - static inline int xsm_hvm_param( xsm_default_t def, struct domain *d, unsigned long op) { diff --git a/xen/xsm/Makefile b/xen/xsm/Makefile index cf0a728f1c96..93ba20256f6e 100644 --- a/xen/xsm/Makefile +++ b/xen/xsm/Makefile @@ -1,4 +1,5 @@ obj-y +=3D xsm_core.o +obj-y +=3D xsm_op.o obj-$(CONFIG_XSM) +=3D xsm_policy.o obj-$(CONFIG_XSM) +=3D dummy.o obj-$(CONFIG_XSM_SILO) +=3D silo.o diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c index c111fa05968d..4fb7b0d04f7b 100644 --- a/xen/xsm/dummy.c +++ b/xen/xsm/dummy.c @@ -99,11 +99,6 @@ static const struct xsm_ops __initconstrel dummy_ops =3D= { .hvm_param_altp2mhvm =3D xsm_hvm_param_altp2mhvm, .hvm_altp2mhvm_op =3D xsm_hvm_altp2mhvm_op, =20 - .do_xsm_op =3D xsm_do_xsm_op, -#ifdef CONFIG_COMPAT - .do_compat_op =3D xsm_do_compat_op, -#endif - .add_to_physmap =3D xsm_add_to_physmap, .remove_from_physmap =3D xsm_remove_from_physmap, .map_gmfn_foreign =3D xsm_map_gmfn_foreign, diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c index 221ff00fd3cc..e25664711019 100644 --- a/xen/xsm/flask/flask_op.c +++ b/xen/xsm/flask/flask_op.c @@ -22,6 +22,8 @@ #include #include =20 +#include "../private.h" + #define ret_t long #define _copy_to_guest copy_to_guest #define _copy_from_guest copy_from_guest @@ -607,21 +609,17 @@ static int flask_relabel_domain(struct xen_flask_rela= bel *arg) =20 #endif /* !COMPAT */ =20 -ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flask_op) +ret_t do_flask_op(xen_flask_op_t *op, bool *copyback) { - xen_flask_op_t op; int rv; =20 - if ( copy_from_guest(&op, u_flask_op, 1) ) - return -EFAULT; - - if ( op.interface_version !=3D XEN_FLASK_INTERFACE_VERSION ) + if ( op->interface_version !=3D XEN_FLASK_INTERFACE_VERSION ) return -ENOSYS; =20 - switch ( op.cmd ) + switch ( op->cmd ) { case FLASK_LOAD: - rv =3D flask_security_load(&op.u.load); + rv =3D flask_security_load(&op->u.load); break; =20 case FLASK_GETENFORCE: @@ -629,27 +627,27 @@ ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flas= k_op) break; =20 case FLASK_SETENFORCE: - rv =3D flask_security_setenforce(&op.u.enforce); + rv =3D flask_security_setenforce(&op->u.enforce); break; =20 case FLASK_CONTEXT_TO_SID: - rv =3D flask_security_context(&op.u.sid_context); + rv =3D flask_security_context(&op->u.sid_context); break; =20 case FLASK_SID_TO_CONTEXT: - rv =3D flask_security_sid(&op.u.sid_context); + rv =3D flask_security_sid(&op->u.sid_context); break; =20 case FLASK_ACCESS: - rv =3D flask_security_access(&op.u.access); + rv =3D flask_security_access(&op->u.access); break; =20 case FLASK_CREATE: - rv =3D flask_security_create(&op.u.transition); + rv =3D flask_security_create(&op->u.transition); break; =20 case FLASK_RELABEL: - rv =3D flask_security_relabel(&op.u.transition); + rv =3D flask_security_relabel(&op->u.transition); break; =20 case FLASK_POLICYVERS: @@ -657,11 +655,11 @@ ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flas= k_op) break; =20 case FLASK_GETBOOL: - rv =3D flask_security_get_bool(&op.u.boolean); + rv =3D flask_security_get_bool(&op->u.boolean); break; =20 case FLASK_SETBOOL: - rv =3D flask_security_set_bool(&op.u.boolean); + rv =3D flask_security_set_bool(&op->u.boolean); break; =20 case FLASK_COMMITBOOLS: @@ -677,41 +675,41 @@ ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flas= k_op) break; =20 case FLASK_SETAVC_THRESHOLD: - rv =3D flask_security_setavc_threshold(&op.u.setavc_threshold); + rv =3D flask_security_setavc_threshold(&op->u.setavc_threshold); break; =20 case FLASK_AVC_HASHSTATS: - rv =3D avc_get_hash_stats(&op.u.hash_stats); + rv =3D avc_get_hash_stats(&op->u.hash_stats); break; =20 #ifdef CONFIG_XSM_FLASK_AVC_STATS case FLASK_AVC_CACHESTATS: - rv =3D flask_security_avc_cachestats(&op.u.cache_stats); + rv =3D flask_security_avc_cachestats(&op->u.cache_stats); break; #endif =20 case FLASK_MEMBER: - rv =3D flask_security_member(&op.u.transition); + rv =3D flask_security_member(&op->u.transition); break; =20 case FLASK_ADD_OCONTEXT: - rv =3D flask_ocontext_add(&op.u.ocontext); + rv =3D flask_ocontext_add(&op->u.ocontext); break; =20 case FLASK_DEL_OCONTEXT: - rv =3D flask_ocontext_del(&op.u.ocontext); + rv =3D flask_ocontext_del(&op->u.ocontext); break; =20 case FLASK_GET_PEER_SID: - rv =3D flask_get_peer_sid(&op.u.peersid); + rv =3D flask_get_peer_sid(&op->u.peersid); break; =20 case FLASK_RELABEL_DOMAIN: - rv =3D flask_relabel_domain(&op.u.relabel); + rv =3D flask_relabel_domain(&op->u.relabel); break; =20 case FLASK_DEVICETREE_LABEL: - rv =3D flask_devicetree_label(&op.u.devicetree_label); + rv =3D flask_devicetree_label(&op->u.devicetree_label); break; =20 default: @@ -719,16 +717,12 @@ ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flas= k_op) } =20 if ( rv < 0 ) - goto out; + return rv; =20 - if ( (FLASK_COPY_OUT&(1UL<cmd) & FLASK_COPY_OUT ) + *copyback =3D true; =20 - out: - return rv; + return 0; } =20 #if defined(CONFIG_COMPAT) && !defined(COMPAT) diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index 3b29f7fde372..8f4fc7458b8f 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1742,9 +1742,6 @@ static int flask_argo_send(const struct domain *d, co= nst struct domain *t) =20 #endif =20 -long do_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flask_op); -int compat_flask_op(XEN_GUEST_HANDLE_PARAM(void) u_flask_op); - static const struct xsm_ops __initconstrel flask_ops =3D { .security_domaininfo =3D flask_security_domaininfo, .domain_create =3D flask_domain_create, @@ -1819,7 +1816,6 @@ static const struct xsm_ops __initconstrel flask_ops = =3D { .hvm_param_altp2mhvm =3D flask_hvm_param_altp2mhvm, .hvm_altp2mhvm_op =3D flask_hvm_altp2mhvm_op, =20 - .do_xsm_op =3D do_flask_op, .get_vnumainfo =3D flask_get_vnumainfo, =20 .vm_event_control =3D flask_vm_event_control, @@ -1836,10 +1832,6 @@ static const struct xsm_ops __initconstrel flask_ops= =3D { .mem_sharing =3D flask_mem_sharing, #endif =20 -#ifdef CONFIG_COMPAT - .do_compat_op =3D compat_flask_op, -#endif - .add_to_physmap =3D flask_add_to_physmap, .remove_from_physmap =3D flask_remove_from_physmap, .map_gmfn_foreign =3D flask_map_gmfn_foreign, diff --git a/xen/xsm/private.h b/xen/xsm/private.h new file mode 100644 index 000000000000..19ade2eed6b7 --- /dev/null +++ b/xen/xsm/private.h @@ -0,0 +1,16 @@ +#ifndef XSM_PRIVATE_H +#define XSM_PRIVATE_H + +#include + +long do_flask_op(xen_flask_op_t *op, bool *copyback); + +#ifdef CONFIG_COMPAT + +#include + +int compat_flask_op(compat_flask_op_t *op, bool *copyback); + +#endif /* CONFIG_COMPAT */ + +#endif /* XSM_PRIVATE_H */ diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c index 21fffbcb41d3..819a6ccd54cc 100644 --- a/xen/xsm/xsm_core.c +++ b/xen/xsm/xsm_core.c @@ -218,15 +218,3 @@ bool __init has_xsm_magic(paddr_t start) #endif =20 #endif - -long do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return xsm_do_xsm_op(op); -} - -#ifdef CONFIG_COMPAT -int compat_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op) -{ - return xsm_do_compat_op(op); -} -#endif diff --git a/xen/xsm/xsm_op.c b/xen/xsm/xsm_op.c new file mode 100644 index 000000000000..5922299fc4dc --- /dev/null +++ b/xen/xsm/xsm_op.c @@ -0,0 +1,51 @@ +#ifndef COMPAT + +#include + +#include "private.h" + +#define ret_t long +#define _copy_to_guest copy_to_guest +#define _copy_from_guest copy_from_guest + +#endif /* COMPAT */ + +ret_t do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) u_flask_op) +{ + xen_flask_op_t op; + bool copyback =3D false; + ret_t rc =3D -ENOSYS; + + if ( copy_from_guest(&op, u_flask_op, 1) ) + return -EFAULT; + + switch ( op.cmd ) + { + case FLASK_LOAD ... FLASK_DEVICETREE_LABEL: + if ( IS_ENABLED(CONFIG_XSM_FLASK) ) + rc =3D do_flask_op(&op, ©back); + break; + } + + if ( copyback && copy_to_guest(u_flask_op, &op, 1) ) + rc =3D -EFAULT; + + return rc; +} + +#if defined(CONFIG_COMPAT) && !defined(COMPAT) +#define COMPAT + +#undef _copy_to_guest +#define _copy_to_guest copy_to_compat +#undef _copy_from_guest +#define _copy_from_guest copy_from_compat + +#define xen_flask_op_t compat_flask_op_t +#undef ret_t +#define ret_t int +#define do_flask_op compat_flask_op +#define do_xsm_op compat_xsm_op + +#include "xsm_op.c" +#endif --=20 2.11.0