From patchwork Mon Nov 6 18:15:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brijesh Singh X-Patchwork-Id: 10044065 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 B465660247 for ; Mon, 6 Nov 2017 18:19:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ABEE229E2A for ; Mon, 6 Nov 2017 18:19:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A08A629EBC; Mon, 6 Nov 2017 18:19:05 +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=unavailable 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 E29BB29E2A for ; Mon, 6 Nov 2017 18:19:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932551AbdKFSRv (ORCPT ); Mon, 6 Nov 2017 13:17:51 -0500 Received: from mail-co1nam03on0077.outbound.protection.outlook.com ([104.47.40.77]:18934 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932733AbdKFSPr (ORCPT ); Mon, 6 Nov 2017 13:15:47 -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=RYAU0iZGYPSK+2tlstrmKXka+Lo1DgC2oAoor7NQsLc=; b=QlOvYZvJdXPYkTzNe6ayEBRUZWQ44TgizFV1c3/71qwAaATEZYxWU+peAem9SEMSPSZdtH1E8oUbzpg1Ywk+qwag2sbAFWN2KwLHlIorhn0ghxPXHjOhCLrgIbBmaht9NXVa8tqapq60UV4Sy++J+KUyNb0Jh2Brnc2kNUdt6JE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from wsp141597wss.amd.com (165.204.78.1) by SN1PR12MB0157.namprd12.prod.outlook.com (10.162.3.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Mon, 6 Nov 2017 18:15:41 +0000 From: Brijesh Singh To: kvm@vger.kernel.org, linux-kernel@vger.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 , x86@kernel.org Subject: [Part2 PATCH v8 32/38] KVM: SVM: Add support for SEV DEBUG_DECRYPT command Date: Mon, 6 Nov 2017 12:15:24 -0600 Message-Id: <20171106181530.68894-3-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171106181530.68894-1-brijesh.singh@amd.com> References: <20171106181530.68894-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: SN4PR0601CA0012.namprd06.prod.outlook.com (10.162.115.150) To SN1PR12MB0157.namprd12.prod.outlook.com (10.162.3.144) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 17ffdf53-8edd-4612-f9d9-08d5254263d5 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603249); SRVR:SN1PR12MB0157; X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 3:C5RJesBf6u52OWxRthPpvCnBYdj1Pm+ZSjH2jAx9et2W1rNYfgZX8FfErT6oEhm/VTprBVOcsI0uzlV2HZTSFw+vIFMHivv81jN+ClvU+kwZbmf5CMgy620zAHSly1Dmjt/OedSoMybemmnG2r/BnBfDpJXGsG+vdI3TC+kBjxVNWVffaM3QsMfyxLrjtrDBLyzat3qG3lEB3hFleE/PlmkDqQ3uyOsyuY69GzVAWbh2xH1JyA9+JVGLt7huUgCi; 25:GfIm2x4sk63MqwxV8jLNxCvTcw6nw8SysrknbfARZws6pSS3d17WvVcFO+G9GBEd3dHjpywfo8SVfVytr48ZWp6zww+R1W8lXXeTD/8CCeWsaem/XBj3WLQeCLbAYGkqQdbZ9vNZRaunfWb+WO4b3/Q/+KeCKss7XUCrfDhW9UICYIGITxX9s3DJwlGHW19gVRFPjDLwZQwE3LzrOyBIMuGVY1k2Jxa9rlmm7q2JsO+ss+2J89tdsTTp+fCyko8d82ySMtZQKytv9yfYDk47iSoivJtXPediD5dOv907eljs6yQYWZTQDooEhRv75juABFY/HuF/btzajm2gYLKixg==; 31:NbiWy1HRSjjlhk7AgNIBnTcJ7ruk6gZ4w15VqO42RdPRl+CbKd2EML4IO1t9aTk1CO29gRqH1cDiL9e0O3QzR+gLagQ7327gFtxukDjG2oEJ2EOF80popkKfqkjdjDI6sNlArkQWdTkvX3ThOGNugf/ATqy+y6wtZmmYTK0Osb7EYlfT5FSoXiRueDjQY2XXRm4aiS7lrV+fm23gpbCEmi8Hkh4GXkXrDt/Wk1x1xFo= X-MS-TrafficTypeDiagnostic: SN1PR12MB0157: X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 20:LCmaYPzldazC4f0Y6g4nbDC/X/fXyz5EEpJ/oFekWq7bHBCvTJ7Jyv3Qpiy48BCfwP8xjFWtcv1ikW1CyQWB6gl3cJAQhlY+2E9A8IZRWdcPTqndOctXv/t0pYGVIgIdUgG0fdnlzEpxPDFfs69NgZBGY6Ltq9g4929tUoqCT1YbVkZQeb9BTFOBzCpJvo2sSLTT5B7DINEDhxkFlYebJrF8wwUt9jDMRKzuKUJXmbUaBkHnSgZK6yK5sU9YeBg6pZQ1odLOkcmPQ3boN7lSAeC/saPOPN22ANH+ZKqsCy998rcdXigeIGSYvxzf735QCZlwQuL4DlGIeYZQihRFShb7ezec/yb0e5UVIDWTlCicJEdAA3PN2xTZB34giQnrwgiY88FHSveTTGxu9mQ2tdWi0LqgJyY5WjZOLFvvEgLlzDCaslHBgo42xcQq3R0JL25nEjRozijj6brOuXnAvASqkFSuPbgMge58iislsJNODv2SjKeTm5EFZlYelNfD; 4:1dKYOzqNx0Hiq04MzMmKFKM/pnUwWkWyqOP7k4MCQ0xfWrt4damlZEQeBp8e+S2Q8AEK7HUutU+6JwdaNzs9eSBNqfrZY4LfWvxqykzL64gKKl6aPMQYzKuXEDb/JLHK3Cg+gmev8NrBp1FM0SOJp87DYo4chQLjj3OoKqBg0qz8XW7GHWkRYpKqIg6O7MHQB+p+HZAjzKFMBpSZGFjO6051Zlov/H3pcnHBq6Y/z+7wrYL+zV3Vr+ydLpLC9QQBz6OXC4eeyaLfMnLDZInOTT8oji+0DTDyvIQ4T3hXdqZysyLZGXKQMdAL/N1V8NGAw0UaNVoEbBVQ1IOT5yQPXg== X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(93001095)(3231021)(10201501046)(3002001)(6055026)(6041248)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN1PR12MB0157; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN1PR12MB0157; X-Forefront-PRVS: 048396AFA0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(39860400002)(199003)(189002)(25786009)(1076002)(3846002)(6116002)(316002)(305945005)(50466002)(2870700001)(86362001)(50226002)(4326008)(23676003)(54906003)(50986999)(2906002)(76176999)(97736004)(53416004)(101416001)(7736002)(68736007)(16526018)(478600001)(53936002)(8936002)(5660300001)(6486002)(33646002)(106356001)(105586002)(7416002)(6666003)(36756003)(189998001)(2950100002)(81166006)(66066001)(47776003)(8676002)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR12MB0157; H:wsp141597wss.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwMTU3OzIzOjhWMmM3M0paaXZCZElSTmJnaG9lRDB2bWpr?= =?utf-8?B?eEVnQ09KZjY2SmhtU1RoL2Vudng3T0pPQzZmN2hpV0UwT1gxQ3VYTXhWN2ZE?= =?utf-8?B?a01aSklCdVN1eU0yVkpZd0J4V0NNT204SGxHTjc1ZTE3a1hGS1RFU0l3aWpO?= =?utf-8?B?WkJBUks1bXF1Tm9EWVZPckFYYTJhRXRDUVo2Vmp2c2lHYXNHdHZKQXYxS0pi?= =?utf-8?B?K2xKcXdRQm54dExiLy94eDB4bm5RRkd2L1U3L3phelJOZWlPS1ZQdVI5V2Z3?= =?utf-8?B?VEsrV0srTzA2TCtxZk5vL1VmUzhweDlYMUt4eFd2ZWUvTGZaVy9qL1FTZ05l?= =?utf-8?B?TzNWcmdjTXRJNTV2ZmFFRE0zRDFUbTE4VUJaU2FGQjBTNXhhejZiT215T0tC?= =?utf-8?B?L3RDbmV3QTFpQjBncnFjWjVwYnVTOTN1ZFN1UWdrbUxXN3ZwUE45SEhmUnlp?= =?utf-8?B?UTc5S0I4QzhuVCtIeTRsMlZ6ZnZEMHFmS005d3BXc0o2Q3k1OUxmdXlva0Vm?= =?utf-8?B?dkoxb3VRMzRFaDRsWVE4YUtGeHAxSndQMWd2SDV2VWJkdUtmTk1RM1dnUDBD?= =?utf-8?B?MW9laFVGNEpJbFBNelpQZWdCQzdVdzQzY1NqSFNyMWJ5a01sQ0VJZzM4bzlv?= =?utf-8?B?dzZSdk5XK2tDaUhZeXZGeW9LV0JTYlRWRTRUYWMwdkl5MkpDcHZ6dmtBMml3?= =?utf-8?B?SjQ2MkFHMmpuZXArckpGM1NvQUIvRC85UWlFc0U5eDlMNU9NbGQ5enYxVGYw?= =?utf-8?B?WlNSOGgwYUJqVW1DRU4xVHFQdVY5Y21NWFRCTUozbHJmWE1PbzBuZzdxOU9P?= =?utf-8?B?OEZ0VWhFNjJhb3B3Q2tmQmEvOGZZNUdPZitaNjVtZnVrbnllTmRSaFZsamds?= =?utf-8?B?NTNXSDV2Tzd1Zmt1emh3bEJZT0NZN3JjSXhMZUc3UDBNMEkzMFh2cW1yaDUr?= =?utf-8?B?eDUxcjR1QWZBQ0cvNkI0YnpCT0pXZm8zNDZRd25CT3duMmE1RVlJMFRxQUpu?= =?utf-8?B?MUhFeTkzWGQybUJTdVJxaGZZaUduQWFLdlhpbXJJYUltMWh1V3l0WDFuVkRn?= =?utf-8?B?TEUvN1RxU2V0OUNENGIrOUdydHk5V0pEOTJxWVlVbk9aY1dpbkthdnVyRnhJ?= =?utf-8?B?TE5NL3puQU9SM1M5VVZnMkN0OTBjcy9BVW5DWmJPMTRUZlBuV3BDZWQxeDFD?= =?utf-8?B?cVhwUmNyNDBnUU1aeXRxVUEvb215MXJOK1M5c0J0bkh3Z2hNRnVub2c1Rk1w?= =?utf-8?B?QnVtSDhEYkZaQmsvQ2FCWHY4QXJxblI1a3ZTaURBRFU4eHhzKzV5QU5rWU5H?= =?utf-8?B?aHNSNTFiSHZsbTAzSUJFc0d5VU5WQWwrR05DTWFGMzhHTlNBRU5mS0YrdW1R?= =?utf-8?B?RHdUVVlESXNVMmF4V1B1MjFTc1dQWHo1VzRFcmxFYXdEeDcvckVDZ05lemxT?= =?utf-8?Q?HF2WpsTtV12eSBgvO6rlH17Z1Cv?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 6:6huBTB9ECEYb6llopVMGR6VwXOv//k5grzPRigKLp4R40Uvfgi1piFHkHD24r1dOc3484W27Sm3I2WfUskATr517gYsAKiEvPMJ9GBhXAYW/CBJLWFqSmfbH8uIXs/XTRSYMf2Cgk0m3hJn/F4gsbxD0AxroYOKVHnUbKe4289Um7mEdZ2q5AWgYzq4nYqCM1ME605cbOQBF8mIvGp4PN0Aas9NA6Vm02zTbTQVIwtdgqHwFPgSuCrQgP3/pFbx2h3GDmh/xfmXQcpnb62Oi1AhbOIFQR1dpn3e4soh9LGc8S7mu6frFVrJ0h+Xn69rh1lk0x6V06xCw5cOJKFJY6XnMLKgHVAIu3dV1sAdzuI0=; 5:x8+LYRJzqmFrLRYrEBjFAp7ZaTUZ67Y+/YM3jTIQFlWwYZsqH5DryFdxR+9HE2udcqPRxlvSkcgc34Uf2rA8RPaSnUB5v60BNV+2/twYRD+Bofdg72sWgIxD2kaN/XBRVNbKpj0pOj2AdwVlprT7icbHeaZfw1ZNm1aJVWFlyJg=; 24:6qq9wPKKHTyD3TJdqI7RfGsW93Ub41C5f1gjC/gG94WVYCc4pdTsl4Vsm5kx1QZX/bZNNLJWdHqnuzDae/bFTjHu/rvfX6uiTQKztBrCI4k=; 7:V4uc/d+uNt5yxkyZZWH39iFEKELcUvht2OH65RzR029RIeA0AgrE94fvTkKuzt1pqMzuWK3J+BRqbesqJUal1hdm4oo63KV+dspQmnii5mHuwycPeDNFJ0tax5cAufhaGKp2YI17eVO1HKXbGSoRVGytWOSCY6IWx4wy89p+M++VGvDufOo62+ZTrTFYTioOvFQid8BuK/7kwSyNZcpCXzRvkvPk1mhF3cvlM30de6i1vMMCRrscCOipJzSYgNGm SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 20:8aF1FLz6NOjt7D/jLm8j91sDqw72KYUP7/mjB4klETgEwrX+3fSzgDE2y8JvkiXH4pa4IAGK2Nub/lzBwW1bHUM8IsEEPSWqvwH2Y6d3+cCyyBxfWk9V6ofcV5+UUljeaqfHgb2teFGmV2nyN5NvqrzD8wm1llWbrUhl+ckURyKizCByga1tmkWfMrvN2kcDhBfUxwXAb3eATgSD8HBMFZSACAVRnHa5hL6t/TpB0qblYIKux6uwaur+YcKx79+P X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2017 18:15:41.2079 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 17ffdf53-8edd-4612-f9d9-08d5254263d5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0157 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 22af24264411..55adcd35cdd2 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -6123,6 +6123,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; @@ -6155,6 +6304,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;