From nobody Mon Feb 9 13:59:43 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+74491+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+74491+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=amd.com Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1619540495814277.08818367833214; Tue, 27 Apr 2021 09:21:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id jn7GYY1788612xMEliEy7dfJ; Tue, 27 Apr 2021 09:21:35 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.72]) by mx.groups.io with SMTP id smtpd.web09.10583.1619540492174143872 for ; Tue, 27 Apr 2021 09:21:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aSPZTBzQmCydN5B5DfXM3C5XvCul4R5kSM3QCHdC+PXh3HUIEzfGP3Lm4Qf2zd7FAPhrWJhN0FsI+tE0cG5VZNsVYLF6+6BHaQAPGn7jG1QnB+vbQpkaepqFGYfBS167DbznNNBcFSf4upjWJLam2qraWVr/w16O1fPsuhOpRdM3eph2epMHQWfddAhn4BtQNIaQHlc6V3Ymhgv6QFCitEBAZqECcWgYcD2yrPgUOcByQGHq2nJX+Pq3cb4Af4X72q+ozEz5pRcUBXC65aJXH9yKejjBlLVyPn2CbCc1/KVdxj0X1EVFsj3nvu7HIPAEruUeB2zDARl/qQd5WujjBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ogEUKlfanqGgyKrLTSWpAv79jflWYpVi76olKsFuEoA=; b=Qhc6A9XcKFplktYM62CGsqygn0WMlSbRVNfgBQ7pxMCUVaHujTrPyQMFF+jJmC0b8pLVRiFKfHRlj6OKRpnyLkw8QlfcAPtrJtqtHsuGJzZk3TAt3qMx03GQ4V5gRJkWEX+6Xhz2bJtrvkXdBaLtt0u0gpmNLcCuBtDVzNLRJa+KEgFBrbOJtQ9JnJFjS3paU+sL4D5rSR6eD7zNZZmDUlkQMlk+i3xxur2Kzj307hEeiK/d+Nlr9j8SYI/2o5+aG4H0kadQQ3Brs6zrozihmxxwjP346U/QfmoOTEWLqqiSh61+Ck0aEKXef5UpA3YMIoTp64KPYSDyDWWPCgIRCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) by DM6PR12MB4960.namprd12.prod.outlook.com (2603:10b6:5:1bc::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.25; Tue, 27 Apr 2021 16:21:30 +0000 X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::b914:4704:ad6f:aba9]) by DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::b914:4704:ad6f:aba9%12]) with mapi id 15.20.4065.026; Tue, 27 Apr 2021 16:21:30 +0000 From: "Lendacky, Thomas" To: devel@edk2.groups.io CC: Joerg Roedel , Borislav Petkov , Laszlo Ersek , Ard Biesheuvel , Jordan Justen , Brijesh Singh , Erdem Aktas , James Bottomley , Jiewen Yao , Min Xu Subject: [edk2-devel] [PATCH v2 1/4] OvfmPkg/VmgExitLib: Properly decode MMIO MOVZX and MOVSX opcodes Date: Tue, 27 Apr 2021 11:21:07 -0500 Message-ID: <9678513eb498c7ecf147798211f37075437790ab.1619540470.git.thomas.lendacky@amd.com> In-Reply-To: References: X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN1PR12CA0048.namprd12.prod.outlook.com (2603:10b6:802:20::19) To DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Received: from tlendack-t1.amd.com (165.204.77.1) by SN1PR12CA0048.namprd12.prod.outlook.com (2603:10b6:802:20::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4065.21 via Frontend Transport; Tue, 27 Apr 2021 16:21:30 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 07f55b76-99c9-42ea-e643-08d909988422 X-MS-TrafficTypeDiagnostic: DM6PR12MB4960: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: posloDlKBgO0eOC3doXaOb5rWTliJ0bOUnUTpCY0ATHrpfwLf1BOhPTsV6OhRf/meD9ibchsSkeAk654/6Z1KM3jUEVvZrWHTfFY5XAUtXR3XahWgvlDuEi7bMfiQmCkmmiSYSTdV1Wl96EXA8JkAHUS2Evs+lmAJc/l7CA2heQIQCLhfmGGRKCQtOjIVeLCs1WSJzZaWcDnChvE5dEXpRyo/YofjJhKsYDL81VcHFhPzsY+hYJ586kRFKK6rxZ1Hlsu5BY8Qp3jjoTk8ICi4Y3UYhUB3QMrdiIxOR0w9HpD26fNG1fn851imIuT9nNEW6eudYo8hp+M0PwHcbQeXh8jmYC118XK+UC1l4nX5iaNve8PydkljoFOL+zKhpx34dQFM44gClZoIS9zOj2gR8D/puVBY8NCtQ7lTLqm3y9coS/2+kkpe1KKibcvwhSOU7a7yfWzSsQ5Kxbbbk/lzlWPlQa5P10A71V1ki5dZ2VkBLH+hVKa/m6F3VDrpd6MgUkReDUH0exc8lkFhQZGtx8z3Mw/4ZKrYW6/P1wUJRAAb6a7mV0gvUjgFO+bncOUFXGrEElTmoYon9ednclmgRuMaSEC8lF8e2LCgqE1bL/g6n7AG2x1B0mplG0fx9lHbwD1wtNnBcYJnOSVdzxb3S77TmLrtkK7VTZCzXKy//HvW9PPmRXH6pw+LTdL+u72rwcdqmWXsaV0KheCiKhDuOu9ZvoAuu56s+sFA1hMHtOvWEFmQSA7Z5yBJuf+okO+ X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?XjwJbpPcFCYQSGqwHZtu6DEEtuBSf1crO5R2IYkyZbZdJCZgjFwiINzxPd/K?= =?us-ascii?Q?9QkiYDsRnynOe7v7UuMg2TEfDe7gZdn9Z5TXCEbcjm037Mpv9auRegrUSd5r?= =?us-ascii?Q?f8Rjcz0N+VbpUwz8YK4U3cWU90Wd65xsv+z0B1tozechnYsZkeOPNm5vzhVx?= =?us-ascii?Q?y9/Umss67PE4KqXw2IdkkA+C+7RWO6o/s56Zp3jTYmWF86YHTL8GSSFShU6l?= =?us-ascii?Q?OyxRXQtBPnxGQnv9G0xnUaDgmMAanxVhPQunpOb6uW/XwEm3yVSioTWqsVnY?= =?us-ascii?Q?nj/Mu9ztk6s0qmdNbvAfXq5uehoLeIJY/WTCa1boOnfghii/ZApzAdw3Onok?= =?us-ascii?Q?MUZ0kAr+I7iPxmZJ2sW3Q3IwAZHJub4s5qiUpFq4v1kegBY2wKXp8MAxKWUG?= =?us-ascii?Q?iRSW8/+UDw5OQkiVnwdG/DVtsq99HfNomIw7kTGaEd2Rp5uqPR6cqLJh9jqC?= =?us-ascii?Q?oA0t86+S3b0sxU2xFtyIkO7j8VhY4uNbIEj7juAUGiFqf7miMPyrKfRjFa6D?= =?us-ascii?Q?4lQZo5DPgzbzAxvfvk/F5WptSFC8NT/5GJUJYe0Fcg2m6hzo9TuKXGcRG0SD?= =?us-ascii?Q?/y5jJKAEOJLEkSBUMMVZH4oCK4Du1CFhemC8RV0/jhnxoFLecaYe59Vrrb20?= =?us-ascii?Q?KpqUDdIKeRgJZwW0YwXkMf/9mUoFqZ7e7dqBHhCeJMvr/SqfCo1RdZIqNRJM?= =?us-ascii?Q?2eghPaKPSmrFwGHu15+PDC2j4CRkKRqOjzx2NVIBO2C3drpUs2uMAC4FP69L?= =?us-ascii?Q?PfL1qmNnUs4FQ3T7p/q50mHQrlVVC72dEMieM46mlJuTLwgO6t8XrLUdQ+Ji?= =?us-ascii?Q?QAKhx6tr9kbRdmHdzEn1rCjzqajDirFMblQdIUmZLvZYI2Rp7yQMpC+m4ob9?= =?us-ascii?Q?MSv5Yc1uruNZ32tmxQ92R0gFrlHKzeO4yYBuuZjHF0iOAS9//M2mj9kXJBS8?= =?us-ascii?Q?hjyu6xGpYxZn677UKZHMNkj4ZZINMt3Gue1m4QQDe7LdmR9b9u98bEjc1tmO?= =?us-ascii?Q?FyThQZedvkUOfxwhDixq49UztxS65GqOQcrqfVYn+d6tpQRGOwXOQjhoYJe/?= =?us-ascii?Q?75iItfW14VN20m10CSmaKq+DQuvoOJceF3cUAGkZioHyo4stcLiS2iw87tEO?= =?us-ascii?Q?PGAPfyNhzRSoqxbz+fEsyF1vY+ZrXMbCrMFiu0qttsXV8uk2y8SompcqPQd+?= =?us-ascii?Q?hOI79yRT9NtGSAzGpbPo5DlEdkEudt8vAJBVm2qwDpf1ByBflMBkkf3Fbq6q?= =?us-ascii?Q?LpsgnGJs169KQQfVhOfICUmVBWiyoEyNwOOJhx8WrfWADK6kpAj1wJ8RAkwb?= =?us-ascii?Q?r4nKKEMUMTRBJvYR9MDnv9ET?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07f55b76-99c9-42ea-e643-08d909988422 X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1355.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2021 16:21:30.7363 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9u53DG4mJ3t6w6gxKeodcAsRlthT7wz0w6ROFMQUy0ZAsAIJqAVMW0KrPcG+amS6sO472gHmMcKET2XaqlnNRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4960 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,thomas.lendacky@amd.com X-Gm-Message-State: szzbBk1XcGd76euGZ6wi0lnTx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1619540495; bh=nLx6HaRhO8F78YjtjCYkZaBClr9nzFMGRl5VcrOoEy4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=lWaHd0n/ETCdAmgxu7RDFze/RJmURQKUnrv4/VwR+H0zzi21Zjr3zDJZHR/xwUr9hQ3 SENtLzriSYU/BL1hAJMtV1TOZQIg3zkLDUrlsIxdSFxD4vp818D69NfbI0hM7U6reVMZj NYjwYgwyguKTDS8qdcTQZaF7zJwHkdB1NM8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Tom Lendacky BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3345 The MOVZX and MOVSX instructions use the ModRM byte in the instruction, but the instruction decoding support was not decoding it. This resulted in invalid decoding and failing of the MMIO operation. Also, when performing the zero-extend or sign-extend operation, the memory operation should be using the size, and not the size enumeration value. Add the ModRM byte decoding for the MOVZX and MOVSX opcodes and use the true data size to perform the extend operations. Additionally, add a DEBUG statement identifying the MMIO address being flagged as encrypted during the MMIO address validation. Fixes: c45f678a1ea2080344e125dc55b14e4b9f98483d Cc: Laszlo Ersek Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Brijesh Singh Cc: Erdem Aktas Cc: James Bottomley Cc: Jiewen Yao Cc: Min Xu Acked-by: Laszlo Ersek Signed-off-by: Tom Lendacky --- OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c b/OvmfPkg/Librar= y/VmgExitLib/VmgExitVcHandler.c index 24259060fd65..dd117f971134 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c @@ -643,6 +643,7 @@ ValidateMmioMemory ( // // Any state other than unencrypted is an error, issue a #GP. // + DEBUG ((DEBUG_ERROR, "MMIO using encrypted memory: %lx\n", (UINT64) Memo= ryAddress)); GpEvent.Uint64 =3D 0; GpEvent.Elements.Vector =3D GP_EXCEPTION; GpEvent.Elements.Type =3D GHCB_EVENT_INJECTION_TYPE_EXCEPTION; @@ -817,6 +818,7 @@ MmioExit ( // fall through // case 0xB7: + DecodeModRm (Regs, InstructionData); Bytes =3D (Bytes !=3D 0) ? Bytes : 2; =20 Status =3D ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Byte= s); @@ -835,7 +837,7 @@ MmioExit ( } =20 Register =3D GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); - SetMem (Register, InstructionData->DataSize, 0); + SetMem (Register, (UINTN) (1 << InstructionData->DataSize), 0); CopyMem (Register, Ghcb->SharedBuffer, Bytes); break; =20 @@ -848,6 +850,7 @@ MmioExit ( // fall through // case 0xBF: + DecodeModRm (Regs, InstructionData); Bytes =3D (Bytes !=3D 0) ? Bytes : 2; =20 Status =3D ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Byte= s); @@ -878,7 +881,7 @@ MmioExit ( } =20 Register =3D GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); - SetMem (Register, InstructionData->DataSize, SignByte); + SetMem (Register, (UINTN) (1 << InstructionData->DataSize), SignByte); CopyMem (Register, Ghcb->SharedBuffer, Bytes); break; =20 --=20 2.31.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#74491): https://edk2.groups.io/g/devel/message/74491 Mute This Topic: https://groups.io/mt/82407851/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-