From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751938AbdISUrZ (ORCPT ); Tue, 19 Sep 2017 16:47:25 -0400 Received: from mail-by2nam01on0052.outbound.protection.outlook.com ([104.47.34.52]:32170 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751660AbdISUrQ (ORCPT ); Tue, 19 Sep 2017 16:47:16 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: 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 v4 18/29] KVM: SVM: Add support for SEV LAUNCH_MEASURE command Date: Tue, 19 Sep 2017 15:46:16 -0500 Message-Id: <20170919204627.3875-19-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20170919204627.3875-1-brijesh.singh@amd.com> References: <20170919204627.3875-1-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: CY4PR04CA0071.namprd04.prod.outlook.com (10.171.243.164) To SN1PR12MB0158.namprd12.prod.outlook.com (10.162.3.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 13b4e8bf-578f-4711-5fac-08d4ff9f97a0 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:SN1PR12MB0158; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;3:LKf5rtkQgx0Juxuu/DG77+uoI3tZTATZ7mAj8mzykDvvaHTRHDj1U411zAYb4sEZRhDq2DoAdZ5V+NWXDPFhwO11RyL2LJUfoH3hAbRNbuYp5S+snwDTDXOaCqjXwcM/pc7Rh/pt3U/2ZaiwaTSAcdXLbjOjpA1yqn4dzQc4xD2rjLIT5goZsLaPgXOWW7Aw2BjgyX2EpZcoWPoxHgTtvQpnNBpykh6yt+GM79w/Dc1gAUFMPUlpoRMbJPKu0yMK;25:qQZ4mTzsQRL1vpDoUNdRSPLa4dBOjSX6FnvemmX6CeNrLAYaMaRAKWagL67TG6ghGaxzdnw7FHMy566t7B5FPyeu/qtBVIVyywZ/Ez2/A3KshbC4/ucD8rYvWSXkH//SH+UFWbVFzWfLr6zskkep7/LKX1/IgqCx+RBPXYhJpJ/rFOrRoVmOzKjg1hKegRiRVVyJcfsPF+snPob5pQ0WBzHBrV0nxD5n4IaKn91CF+5O3TS1NNFAy/yqeYU1y5j7ehxIgnR7TQciKg0j+n2s2Nz2k0F0vPTLZpTLoWjzfgra9A+OMPAjRNy+MW+Whsb2tZ+anIs02P5NrowtoK2NhQ==;31:uGo71aLNYubsoUkcsulAmk/bDAlOppvOZBxhQLPghc5wG6966pG6e7Hbxngk/Xm+piUkTbOoj7fgb4beyOB5XAtmq5I/rgqwzjniAMPMGZuoucOoB8gh+I/UmvSzmWNPC7+tGBvxeHUDnxHr8MgdH/K/YH27CZdFX8X38c6vt2uRrLzoV6jVGc33eIMElYpvZebVr3Mwa3Kz0M61yHXntVxL+WoA5NyAXsO1E4+gJjE= X-MS-TrafficTypeDiagnostic: SN1PR12MB0158: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:2mnM98RgWE2AQrWMT+qns9zsYrz1diMFRJboyXaGQJ+KgO/sKOsgO/7GM0smJw5ye2nnV/nxhPOIm+lilVOSKkwVdMDfHoJEp6VS1uP0UEpCSrunybJT7PGU0R5N2LIlqeErNczodkI+nnNbgGGCS4/GBIVgjUAUQ+a6MkxkCAmWZNC188vupThSWAlw/8kHLmAAq4hr4qkl9PyHp8grBEEsf8KgrBH6jxmDeS1IbLXeylFOOI6ZBupPPA5I0JJ0WQwk+jydC/ksT9zjM5QnNvno/xHp8sZKRku6aZhrcbuHqm3qKw51d7/+O0bki8Jo3PqKs9McSY+PnPafGkqoOgEiDai0zXCtZ+Ax9oPGUcjf+9SC5Rt6PfMy4O3axv/7L8SSUOLVbQn8baJTbn0m4fWy5WVKpTZccDJSNSyoWZDlJtAYFw3afaD8C2DxSD8jeEJ39iCSmtpT5ks1pkaE10JoIyd5ihbIRkvn9nm5K/xuYhrveZsFiB4iFrwXjdcl;4:XeIbwue1ZXGzDxSwx/yquJ11oBCOIKGbPtAPmL7Hik/cHkxLhA5/PeyIWjKAsKfVCO9OSyrmA9H/LeO1zQcLWxb6euHZzeYGdh58ll5Nj8IE9Af4U3HKIErOzpJSdPOE9KcbvceHucNoeFMXTzPRwdQadnO24GjPTl9wVobsotjeT4WAwP6W2CeYcijTT9vfTiDf0iBtMcB2anPKr3Rf2mNun7eX1AotreJiB+P0jYUMbfW32dps/zbZAwgZzsde7K27JvMfk+5Cmx7hmO36QGkQCfdqF7D5V/Qqr8Z5D3IhxpPHBEercQsxDwttme9AYp1E2OgXAm7wOiSyollvow== 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)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:SN1PR12MB0158;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:SN1PR12MB0158; X-Forefront-PRVS: 04359FAD81 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(39860400002)(199003)(189002)(86362001)(50466002)(8936002)(97736004)(6116002)(3846002)(7416002)(81156014)(8676002)(50226002)(2950100002)(81166006)(316002)(478600001)(16526017)(6666003)(7736002)(66066001)(305945005)(47776003)(6486002)(189998001)(53416004)(25786009)(101416001)(2870700001)(50986999)(76176999)(53936002)(2906002)(68736007)(36756003)(106356001)(1076002)(4326008)(5660300001)(105586002)(33646002)(23676002)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0158;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwMTU4OzIzOkxHN0NvM3FtaTBmQ2FPMUhEZEt2cklTemxF?= =?utf-8?B?NmJsL1NUOWFiRFFXdlkyOXExTWFBbEd1TlpQZVpMc0dXT1pTczdHc09LSzFM?= =?utf-8?B?NFU1SDJ1SFNvWVBMVDlET3BUYUFFZk1vNytCeFkzblFxWC9PanhWMEl4U1BX?= =?utf-8?B?OGswZnRxZkhOUDVYTnd5UVcyTlU4WHFVdVR5Wm1YbGJOU1NnVGJIUWdtZ2l3?= =?utf-8?B?RzZEaXNjMUZiSE9GMlJuaGVWMCtmbGVBQXNoZjVFTExycmk2NUtqa1FZTndG?= =?utf-8?B?b0c4bVhGdzVjM21OakFDMGNqOVMwanpPenBVZ1dWYm5ZVGhtK3N6OG5GcHJ1?= =?utf-8?B?bW9lNGU2YWFJRml2UVVRKzUwUVB1VE5yczEwbElRQkF0OTBzci82TGNLekhs?= =?utf-8?B?MTZXV2xUNk52OU1BMVV2YnhMRkx5SW1tOW55S0ZUNUpHS0xBZ0xLZHdtYVor?= =?utf-8?B?UXNCU2oxdG45dEdpSTRaU1kxNWpkbHdZVnNsYktBZkYyVGpyZmhZeXIwVFJw?= =?utf-8?B?cWJUU3NvcW9YOUFPcHpBN2dXRXhwUE9OMTJpQW54bUR6K0kvSzR5MDNtSDdM?= =?utf-8?B?OE9uZTFzRDY4b0Y2eS90Z25wWHJ5Y0crL0hPaUFCcU1ucXpraGh6QU52RFRO?= =?utf-8?B?YlRJU1p0REtMM1V2NExWanVYNy8yampreWRtKzlzdnNycUJTMyticERSWnRQ?= =?utf-8?B?Sml2RmNQZ3VzRi9rNGNZRDNzMW11dXBJRWNteFNDSGw2bXRONkJKTDNDdnAz?= =?utf-8?B?bzRXZHBmbVRkZmlLNStDSWlGQVpRd3B1UDNpZVJoa3V2dDEzNnZVWDhLUzh3?= =?utf-8?B?dVpDZDcvaHV0bjNKWjIxdlJidVUvYzd5TVFHWFhEYThHUDFVTkxDYlpScFdK?= =?utf-8?B?ejRvTkdUU05taWFvT3BnUTBoNkl2RUpPSzJ1QklnUkllUnNvMTNmWUlFZWVO?= =?utf-8?B?QjV3MFY5SlhPTjdON2xZYUpGWDBFSTM1cUEyOHE2b0ZCTm1vRkVUb2loOUFs?= =?utf-8?B?UzZNamtHZ3UyS1JoNTFvbU5UK3o4ckkwemZCYmNxWkVOdko4dUJYMmlhR0dn?= =?utf-8?B?N0tscEJZT0t0YVBYazAyV1I4Z0JnamxsZlpycVM3NkZOWHhKcnQvVm5CVFM4?= =?utf-8?B?MkhFWkdRMExBVXhLV29IbmN5QmJucDI2eWc4VU9PME9Ga1M5UFhLL1V3dVBh?= =?utf-8?B?UktXV1NSU0ZVNm9CYi9RR3d1WlNCRXR3TVpWZ1phaXFLSmp5SXNFYWI1aTRI?= =?utf-8?B?cW1OZUJBMytYOC9YYlROWlZhdFUrbU5iNVhNa0hFemdSV1daY1pjelFaVEEv?= =?utf-8?B?dWlWc2VvcEYvSXI0TVZMZTd4TGpwSSs1NW1CVWQxbUNrMWRxOTYxMm5iNjZs?= =?utf-8?B?NENzR0lLU25kam9xWmdTRDhDSkNuWDhlc20reU9pRlZ3Y2dGWlZjOEl5ZVNx?= =?utf-8?Q?bGIeuzIEVQZpmG7A+T5W+DCo/jb?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;6:0T+BU7+/TUwYExdIk4gcGf6V7c+4BU601+QXmXRPhsjGpoPFM98EndOExVy9bdoZZaBpsuxiPOPvBLDVJnlpysegap4igno7yHPWaPTW3/LihQEg0VTXqeTEIsrQpdK1PdFb5/xv623u98em7kvZMMAOVVr70ZFSeIVcD4krK3hAVLp/za4kP8cmPF0QlaOKLZh3lJwIjCO33iimfVeUmWnRxm+1TxrPIzczqYdVMTtDU42rP0QyJS0ynzbGEGJHizXijEE0LShKfaK1i7Py8tOcNCfa0lL6dCRwDkSJzNVjRRTX9vxxzObHxpEI61od2ZflpIhx/vxnJXVYEhdEzA==;5:8L4FwnQEOX7HPNZGBZ8Cls4pv+2/SfOnle40xW5pG57D3lXC5hiq/AQjQPo270po5Zmzd8n6+5XK/fwUEczCciawSZHXtzdJQVu6AP1yVFyWJMdeQfuavNtIhKX7VneZhfdO7DOTJod47XOYbVBcsg==;24:5IL9FcO0ex0hyi8UNddGfgmuheLJvFpxp6WyHa0LWZzq6V78ZzaXwYGP/5vPd+RZ31KJ3ldTCSagScqYl+q54C2Ty3urew45ZXgh1qlH1v8=;7:q44suvUvWrSb1cRYBVaGgQEv3mCE9MkBKdBg9bqJxWsdvuKLNW0j4r8VfCbLgnSP9Kcb6CKB3s0aZkjSK2R4mTtemRag1h2LzweUutiCr3TwBHqC+d+X8iqkcIrX57ueQbeJAZ3mTrtcS3tHF4yrT44XKKrTXhwerwekDNuKh0zwZBjrsbbh3sdigdRzkxnujIX/1KxE2HGOJjcr8FL/6/Xi8zCzStGflF+5BoWoeFM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:cl3GjUMly1c88uq/TqvWdNACPl0YHTGwIeDkJxJMSiT2nyxlP5OhEyqbw8fxYc6YV7/jXlKpIuoKYjgVpaGbRDOQdmCxqCW3rmgehsCRu4UWQgj1NE0Tn3rkG51LiQMRPi9MPfQzWqy320lZA3hxR+wsNyqG9CySgumVKrqUE7EuPDg/Gwh5uAqfxsTAosXAANtqxLHEJFTIzzszn/TE+I1s0mEWgCeg24xh0tcoaSiwdOORuXV4/8Vx5hVCleb8 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 20:47:06.5930 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0158 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The command is used to retrieve the measurement of memory encrypted through the LAUNCH_UPDATE_DATA command. 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 --- arch/x86/kvm/svm.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 4667504acca5..b7099fd8b641 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -5998,6 +5998,63 @@ static int sev_launch_update_data(struct kvm *kvm, struct kvm_sev_cmd *argp) return ret; } +static int sev_launch_measure(struct kvm *kvm, struct kvm_sev_cmd *argp) +{ + struct kvm_sev_info *sev = &kvm->arch.sev_info; + struct sev_data_launch_measure *data; + struct kvm_sev_launch_measure params; + void *blob; + int ret; + + if (!sev_guest(kvm)) + return -ENOTTY; + + if (copy_from_user(¶ms, (void __user *)(uintptr_t)argp->data, + sizeof(struct kvm_sev_launch_measure))) + return -EFAULT; + + data = kzalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + blob = NULL; + if (params.uaddr) { + if (params.len > SEV_FW_BLOB_MAX_SIZE) { + ret = -EINVAL; + goto e_free; + } + + ret = -ENOMEM; + blob = kzalloc(params.len, GFP_KERNEL); + if (!blob) + goto e_free; + + data->address = __psp_pa(blob); + data->len = params.len; + } + + data->handle = sev->handle; + ret = sev_issue_cmd(kvm, SEV_CMD_LAUNCH_MEASURE, data, &argp->error); + + /* copy the measurement to userspace */ + if (blob && + copy_to_user((void __user *)(uintptr_t)params.uaddr, blob, params.len)) { + ret = -EFAULT; + goto e_free_blob; + } + + params.len = data->len; + if (copy_to_user((void __user *)(uintptr_t)argp->data, ¶ms, + sizeof(struct kvm_sev_launch_measure))) + ret = -EFAULT; + +e_free_blob: + kfree(blob); +e_free: + kfree(data); + return ret; +} + static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) { struct kvm_sev_cmd sev_cmd; @@ -6021,6 +6078,10 @@ static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) r = sev_launch_update_data(kvm, &sev_cmd); break; } + case KVM_SEV_LAUNCH_MEASURE: { + r = sev_launch_measure(kvm, &sev_cmd); + break; + } default: break; } -- 2.9.5