From patchwork Tue Dec 5 01:06:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brijesh Singh X-Patchwork-Id: 10091849 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 615D660327 for ; Tue, 5 Dec 2017 01:08:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53DBA294DE for ; Tue, 5 Dec 2017 01:08:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 46884294EA; Tue, 5 Dec 2017 01:08:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A0291294DE for ; Tue, 5 Dec 2017 01:08:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752312AbdLEBIg (ORCPT ); Mon, 4 Dec 2017 20:08:36 -0500 Received: from mail-by2nam01on0087.outbound.protection.outlook.com ([104.47.34.87]:63748 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752162AbdLEBGl (ORCPT ); Mon, 4 Dec 2017 20:06:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=vWqnbWGw/VRgxyxscnL7f7oguNYXPm6aAvLuYrc62rc=; b=r1nrJo5aqH9UTiyPc5oneb9yfMWJstM8/wpfLHjUdAIpE2V1Rzq+keSltjpDapOHuGK/1DUouQPgtLIAdwPVprP7tzzkzjEvbEzHazyPDajIqwi4OtJ7CqWPWRWJA9mRseOZFL7Upqu2NoMsr9jSsgUBjuXhZheqQE+DFdf4oCE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from wsp141597wss.amd.com (165.204.78.1) by DM2PR12MB0156.namprd12.prod.outlook.com (2a01:111:e400:50ce::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Tue, 5 Dec 2017 01:06:35 +0000 From: Brijesh Singh To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org Cc: bp@alien8.de, Brijesh Singh , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Joerg Roedel , Borislav Petkov , Tom Lendacky Subject: [Part2 PATCH v9 32/38] KVM: SVM: Add support for SEV DEBUG_DECRYPT command Date: Mon, 4 Dec 2017 19:06:10 -0600 Message-Id: <20171205010616.5958-3-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171205010616.5958-1-brijesh.singh@amd.com> References: <20171205010616.5958-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: BN6PR04CA0055.namprd04.prod.outlook.com (2603:10b6:405:3b::44) To DM2PR12MB0156.namprd12.prod.outlook.com (2a01:111:e400:50ce::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5f830ebd-790f-4312-5113-08d53b7c6f29 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603286); SRVR:DM2PR12MB0156; X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0156; 3:BkyUAhE72xPRvHZ72s46Qt3McOSLX4QA0UGa/v0vbXFfeospebdtP9L3k2CnvL/iN+qcsv0a6RPeUe9+ZCchRRo+0FOdZi9zKWx/FDn5LXzZsK3FaeufAWwV3bgbDtKRS9hRwknOE+RB0NQU4EN7eUYrQRcD3v6d4WeIWlFXGr5tqbJ+7VTKAuCihLzg38b2cEijeP5xOB0vvZL0FH1+bgq4FLJ3Xh3JNh75gk2y58lBKcQT/aRymDPCx4k3891V; 25:C3MMBjpRDQUaYYfgzG96YW3U546tUtHUC4TCihG1Ai7TzpweViMldUdzEJttzdl9Dhcy7fkKI1Q0uz+I0ub4QIdReH7RrmVaXjwOyJ0xtdwWZz70PYVhwsgUkzs7ehTt85K1Zsd2hcjAg7qeZgg6HOK07tV5aKDmcoQB5eFYwaztjqfVrvwAOwx8qBbRGIyip94Rbqx/B7Vza3VDedOi8LTtSZo42gVIjzGdY6yvcxbNGUSN4z6NGhqtDRSbku28/2RzbHHCnN+NHYLTuxA0we9zF8hIfmEmvr4DXGuthyC8KmFWvTQhkMR6kjyrQY0x5i2vOpbAcQgndIP9AxTOwg==; 31:/A2qPL5vBmqn2n9QIn5qfWuv1FWQoCLjA/lRgXNjRMcsYcE4wBliMT7Xeyxgoow9o/xC8RkznFYupbC2EKGBfAq6gr/J6/n1ZaaAeOS4DX/wMFj/MvOIVTfEY7EiKRugtYgCms7K7zfOTyX9RKGT7C7BHlkNKBZ31OZk4u/DEBNTe2jVLYHyYw+SEA4V5zRwbFkra2PQchVYKU3qJx+OuNT1ZQ3fxF8F7biPomVV9Do= X-MS-TrafficTypeDiagnostic: DM2PR12MB0156: X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0156; 20:4p3hu3ONjJYDPXTqAKonVkXaXlsheQYzMXPTMpTkCeAMPPUmA9OQYmQUD5v6CXHSC7wt2JBlPAzwLp2Yc6ByEHhPxPnWyWQ8LcvGnya7JwdtpfbQsgha2Wi9mZDX9xgzXpPEVFOT0tgIi2pI5aD86I4vneR7nlaoS+pec0pRCHRElNg0sYq1lGbDKbi2o5Ar3NNEWtLi9vTWjgTwJTnhkpfxNeYvQP58i792w5c0asNXz3ZL1+9lnM55jpef55WRJ/Lr3izgzDhgiD+QvWgV+GbQY+sHRZevpNkLVwr7taTGDoZhYSgTClcuumTEq2lLWbfEFFL4lbG2X5PYtEyAAb10k5abvMYaBQsi1IAnDkV5AFYThw1wCNCM8IxGI6xu66SVKGdzOfdtaSG6tW3tdEpZwdK07OFk9YX5Sp0LYoKbLpEjteNyU9H5erhC9aibOEk8O0uJBv1JXgWIJVf0bCgBkGrb3fPsOiMUlQF630lIV/MV4CyEN0nC1BU8Ijkg; 4:1B7/AFZ5HBvwbRRjCETQk1NobDvTDbso+iChQluHvwo0SjLavcwwJGfYlb/TVe1Uoy+u6Gt+nkrakYAlfMJU3K08D9hnd1PcCANuYeihntbwk8yNeeMMETNu91o97heSHLM9aZxSypN4pKN5OyJ3/R03aqJ991pDCCJRarX/JTuaSQOYZYRwt4CFfH85GH4LHuLtDBm63erL3y+LkENTQVEaFzn1YqZw/xQy98GLyH1AELIbPz66nGqRyq9/mOJb+VBMOqRKEwYlLrE8sIP6OPPZ0WbyTSr9G3IzAgA6lsnGVwQFHzFTtky30Szkmd4tFK8ZL3o4/MMKgZK1d+hWew== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(3231022)(6055026)(6041248)(20161123562025)(20161123560025)(20161123558100)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011); SRVR:DM2PR12MB0156; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DM2PR12MB0156; X-Forefront-PRVS: 0512CC5201 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(39860400002)(366004)(189002)(199003)(316002)(66066001)(50466002)(23676004)(47776003)(25786009)(54906003)(86362001)(53416004)(7696005)(76176011)(16526018)(36756003)(8936002)(81166006)(6486002)(81156014)(305945005)(50226002)(7736002)(53936002)(5660300001)(52116002)(2950100002)(6666003)(33646002)(4326008)(101416001)(8676002)(478600001)(2906002)(7416002)(2870700001)(1076002)(189998001)(106356001)(6116002)(3846002)(68736007)(97736004)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR12MB0156; H:wsp141597wss.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTJQUjEyTUIwMTU2OzIzOjhhSng0NHFJNXVDaGJtRkVxd2x4UFJWNjBs?= =?utf-8?B?YjFaSkFKcWhsSWM5T3lsMW9GWWljYlF0bElwclVqeFpkRTRvYTJSek1LaUZR?= =?utf-8?B?c3FhM0xHUlRlZlFOSnUzbUUzS0FaMERzcEM4Ny9PS0RoMisyOHpiSFRuTGxM?= =?utf-8?B?eFQ1OSsybGlxT215cWIwc3ZaL0xPZWk4SzBDL3FPR1loZ0g1cVpkbWlYSWdn?= =?utf-8?B?U2t4NTJpakpEVnRCcVpGcmxyRXpKQVRoRXFSeFJrVnh1TmJJQTJ6K2duVUJm?= =?utf-8?B?bmo3a0lnOGdaM2VVclNieFg3YVEyWEhtNmFIMmNXaEhmTm1Za3VLT1M1TXNp?= =?utf-8?B?YStleG9IVGJHQk5Za0JkcXI2SU94VnZQaTlpODFWUkMwQmlIWUNtTUxyR252?= =?utf-8?B?U3hZQjZqUUxDYkhjZE5Kd3ZOSmlsTkpBQnR2ZjRGT094S1FRd1k2a1FFa2ZE?= =?utf-8?B?SjRscmpGQ1V5SXFXbGs5Ymt1MTBVdDVCSElSZnVOa2pmUTZISVVCdkZXS1Mz?= =?utf-8?B?TTludjFXbEJPeVlqa0lhVG92UytxSW5YbVpreWRvQzVGUlk2T0FuYkhOWVJo?= =?utf-8?B?SnE1RnRrTlhjTTRuN2F2dDNLZVRxdjhVc1JtVHJ6N2tJTE53b0FGU1B5Um1O?= =?utf-8?B?b3VVaXM5VSt4bEdCU2ZGYWZvakp3eUF0UW5KekdYZ3pWamFFRFRZNnNnbGpO?= =?utf-8?B?Rk8zdm43THU3SmhocG9IdmJ1NUZQc2xtOTE3aEJ0ck9IN2RVYTYrdGNlc29o?= =?utf-8?B?eXpRc3lieXd5VWlqa0dXT1RDL3I5dWpxY3A2NHBKY2JkTWZjdDBjZ2VVR0FI?= =?utf-8?B?bkpFY2Z4Yy9paHVoVzRMWm0weWViY3E2U29PT1JabWYzakFuUFlIZ1JXNDRZ?= =?utf-8?B?bktSdUNsL2dRSFJPR0tLbHJaK1pOZGIvMWl3K291c1lOd2NKQThvT0p3T1Ro?= =?utf-8?B?aTZuOXdyUWFKTXREaENBWm9hbVFEWFdiQ0Y5S1Uvc1YvR2VKWThBZUFCUWlQ?= =?utf-8?B?VFhub3EyRmRzQ0V2Tm1hd012Q3dVM0VVN3IydGlvM3dLTUZKOW5GQmZ2YjdR?= =?utf-8?B?dXZIZll1dVdHR3o2VEdSTWozVG1LRk1ZV0VkOC93NkNDcjM4V0IzSU1CQjlZ?= =?utf-8?B?cGJ5Q1creFFlWlYwb1BLT0svNmRxQ3hqL3VTRk9xTENDU0g2OGZXQjdsYTZv?= =?utf-8?B?SndXaHQyMmpJdUFMeklVWGRBdEJxYnRJaEVGbHlQRFU3RGNFOFFFbmNpa01x?= =?utf-8?B?TzY3MG4zZlV4QXJrVlplaFVDMFlEZ0R4VEt2ZDFJb05Rd0NGbC9XZnF0MXho?= =?utf-8?B?NkJWamRnR1AyeVJpbTFEZGhmV01PRFcrUUNJQ0tZMUlRV2lSeWUzeUVTdEJz?= =?utf-8?B?VGlBT2lmMFdSYmVGQkgvcm1pL0RLZG1HUDZKRjB2QlkxdjVrcmtjQkROSFg4?= =?utf-8?B?TGg5cHNVc3pFTndWbUxzbE1kb2xWMHBsYTVlWHRuQmhQNkVBS2RKdjJCV3Er?= =?utf-8?Q?jof3Lo3X72RzgsxVpZyBBPq+g=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0156; 6:83bHm0KZq9/D0Dt6zSnvZvsoYYZ7jydRnWKCnyroV0eyvwB4g/LQP4S6ad3CHswCotDMWrp0r3mRK+emOof8OS3Mj6svfjvLYwvjMdNQIUm9v7tKTtiS+gaRpkOiA5iYpt2Yl03p64wVLtTijUkofyvC4wVzyxC10gNFcb++own/V/0NYocQFtgTeOKkdMBI5YDlRkzuKDuPPS4WLn7s7VibJCyRntIrRf0WH9QEx/CTLUSmuXM4U4IucntuAT44+uKg8G0WzN2GjNTjBhlsNcWRXQiiz1qWqJO3xVO2apoOSw/t2RirSzWN2o4D78f6dwt7s/3zIvQxQMZSSv0jjJSv2LIzdvNkK/ECENvjQ1w=; 5:bpMca0Qvmgn+cj8KoHVV27Yht/ForTs2ntJ4l4E3utIKUd1KKPeabQUoeJRgbAltTu2iQnF8oaokoKBN+GHjsXrWBPLrfgHx/JZM92WNMnT4jPzcjd2jktaQ736UP+JkO862Jr8zQy5f3eX2vtQKuPSKdg61aGSWeWh3WPt/w7g=; 24:tP2wAcqhZtRPkjaZfbP+Yuet9L6cgzKNMqNQeDjHPUuFL/8bau0wrakzPFt9LANUxsVTTLBaUg/zNMSEc1I5yjsjQ2mdqMkP4NJHE+vaT6o=; 7:aTtNnUUX7pyW1dpblivGuBTWrgMN+3q7eIN0CMnKw/xRdrsdsc72Iefof2G7ns4Nfu5gpjF3autWcjTk8dR3Q7UAmAi2z3H8CGNusaoTTdsDvpxzHs1ReVPF1qc+y+v4ifBP9iHdhxenFAz17Xg+HkDeDvQH7qgx5JDzEZbyM4kC7m0MWkD/IKPdKx8WW42LyF4uRQaXVmTzWN8ldLLoNElblOFUvPHEOeWEJB7y7K56iKzHgMDFpl6QP79HgBRz SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0156; 20:bnIeKxjAYt8HIkpvfeDjed46flt/hKJ+ROl5Qtv4ebBKbpn9uF1a5Eg1oO51ne4u/6kWGkvGOfW6irZ9lfrev6U999t9ZFaN5+qxxajjyJki0vabB280u3AgHQH3ZET923QqzDq84LGNk28T7/7aCzDbi1OajVbq9WUjokh9Sv56msj1T7eznUMF6DWV0ShtlrKvxEXsRTYTmCSr+2Au0/aQXvI/nTN1PBJz6uzyf+0W6UqnhadupEvRZ2MZAJ/8 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2017 01:06:35.8348 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5f830ebd-790f-4312-5113-08d53b7c6f29 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR12MB0156 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The command is used for decrypting a guest memory region for debug purposes. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Paolo Bonzini Cc: "Radim Krčmář" Cc: Joerg Roedel Cc: Borislav Petkov Cc: Tom Lendacky Cc: x86@kernel.org Cc: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Brijesh Singh Reviewed-by: Borislav Petkov --- arch/x86/kvm/svm.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index f5da2753790d..ec2b864faec2 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -6163,6 +6163,155 @@ static int sev_guest_status(struct kvm *kvm, struct kvm_sev_cmd *argp) return ret; } +static int __sev_issue_dbg_cmd(struct kvm *kvm, unsigned long src, + unsigned long dst, int size, + int *error, bool enc) +{ + struct kvm_sev_info *sev = &kvm->arch.sev_info; + struct sev_data_dbg *data; + int ret; + + data = kzalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->handle = sev->handle; + data->dst_addr = dst; + data->src_addr = src; + data->len = size; + + ret = sev_issue_cmd(kvm, + enc ? SEV_CMD_DBG_ENCRYPT : SEV_CMD_DBG_DECRYPT, + data, error); + kfree(data); + return ret; +} + +static int __sev_dbg_decrypt(struct kvm *kvm, unsigned long src_paddr, + unsigned long dst_paddr, int sz, int *err) +{ + int offset; + + /* + * Its safe to read more than we are asked, caller should ensure that + * destination has enough space. + */ + src_paddr = round_down(src_paddr, 16); + offset = src_paddr & 15; + sz = round_up(sz + offset, 16); + + return __sev_issue_dbg_cmd(kvm, src_paddr, dst_paddr, sz, err, false); +} + +static int __sev_dbg_decrypt_user(struct kvm *kvm, unsigned long paddr, + unsigned long __user dst_uaddr, + unsigned long dst_paddr, + int size, int *err) +{ + struct page *tpage = NULL; + int ret, offset; + + /* if inputs are not 16-byte then use intermediate buffer */ + if (!IS_ALIGNED(dst_paddr, 16) || + !IS_ALIGNED(paddr, 16) || + !IS_ALIGNED(size, 16)) { + tpage = (void *)alloc_page(GFP_KERNEL); + if (!tpage) + return -ENOMEM; + + dst_paddr = __sme_page_pa(tpage); + } + + ret = __sev_dbg_decrypt(kvm, paddr, dst_paddr, size, err); + if (ret) + goto e_free; + + if (tpage) { + offset = paddr & 15; + if (copy_to_user((void __user *)(uintptr_t)dst_uaddr, + page_address(tpage) + offset, size)) + ret = -EFAULT; + } + +e_free: + if (tpage) + __free_page(tpage); + + return ret; +} + +static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec) +{ + unsigned long vaddr, vaddr_end, next_vaddr; + unsigned long dst_vaddr, dst_vaddr_end; + struct page **src_p, **dst_p; + struct kvm_sev_dbg debug; + unsigned long n; + int ret, size; + + if (!sev_guest(kvm)) + return -ENOTTY; + + if (copy_from_user(&debug, (void __user *)(uintptr_t)argp->data, sizeof(debug))) + return -EFAULT; + + vaddr = debug.src_uaddr; + size = debug.len; + vaddr_end = vaddr + size; + dst_vaddr = debug.dst_uaddr; + dst_vaddr_end = dst_vaddr + size; + + for (; vaddr < vaddr_end; vaddr = next_vaddr) { + int len, s_off, d_off; + + /* lock userspace source and destination page */ + src_p = sev_pin_memory(kvm, vaddr & PAGE_MASK, PAGE_SIZE, &n, 0); + if (!src_p) + return -EFAULT; + + dst_p = sev_pin_memory(kvm, dst_vaddr & PAGE_MASK, PAGE_SIZE, &n, 1); + if (!dst_p) { + sev_unpin_memory(kvm, src_p, n); + return -EFAULT; + } + + /* + * The DBG_{DE,EN}CRYPT commands will perform {dec,en}cryption of the + * memory content (i.e it will write the same memory region with C=1). + * It's possible that the cache may contain the data with C=0, i.e., + * unencrypted so invalidate it first. + */ + sev_clflush_pages(src_p, 1); + sev_clflush_pages(dst_p, 1); + + /* + * Since user buffer may not be page aligned, calculate the + * offset within the page. + */ + s_off = vaddr & ~PAGE_MASK; + d_off = dst_vaddr & ~PAGE_MASK; + len = min_t(size_t, (PAGE_SIZE - s_off), size); + + ret = __sev_dbg_decrypt_user(kvm, + __sme_page_pa(src_p[0]) + s_off, + dst_vaddr, + __sme_page_pa(dst_p[0]) + d_off, + len, &argp->error); + + sev_unpin_memory(kvm, src_p, 1); + sev_unpin_memory(kvm, dst_p, 1); + + if (ret) + goto err; + + next_vaddr = vaddr + len; + dst_vaddr = dst_vaddr + len; + size -= len; + } +err: + return ret; +} + static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) { struct kvm_sev_cmd sev_cmd; @@ -6195,6 +6344,9 @@ static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) case KVM_SEV_GUEST_STATUS: r = sev_guest_status(kvm, &sev_cmd); break; + case KVM_SEV_DBG_DECRYPT: + r = sev_dbg_crypt(kvm, &sev_cmd, true); + break; default: r = -EINVAL; goto out;