From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752333AbdJTCfz (ORCPT ); Thu, 19 Oct 2017 22:35:55 -0400 Received: from mail-bl2nam02on0077.outbound.protection.outlook.com ([104.47.38.77]:40268 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752253AbdJTCft (ORCPT ); Thu, 19 Oct 2017 22:35:49 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: kvm@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, linux-kernel@vger.kernel.org Subject: [Part2 PATCH v6 29/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_MEASURE command Date: Thu, 19 Oct 2017 21:34:04 -0500 Message-Id: <20171020023413.122280-30-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171020023413.122280-1-brijesh.singh@amd.com> References: <20171020023413.122280-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: MWHPR1701CA0020.namprd17.prod.outlook.com (10.172.58.30) To SN1PR12MB0157.namprd12.prod.outlook.com (10.162.3.144) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a621bfa5-1fd8-423c-0e9c-08d517633c70 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603199);SRVR:SN1PR12MB0157; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;3:1APMGmrTXLenACck2P0rdUd7iDQOTxHT54wuKckQPEfRpqzWNBYGcDxac/s35+Kzb/R0eZ0Gs96zvHMMevDH2Y3DAcD8juB255PhRNICWRSn/QgJ+oaGn03w9vc+mifeSRuo3hiU5DkPFbEOE3WtoTdaA8E3pwARf8RwP38f6RKF0tjchCe4HpRl+c1HWnHvYeK0nC6V7uEyvmp1om/8liCUiTQBCZiEGo21IIUL6PxRDB+XQk5UnCAUrp8cD7a9;25:W7+z3GTexYxO7WpsBrR4YgixZjls9yWAOPEs42+0Pk5BWeKcQJRh0aLWhuQyfDeZDwPBfmuccrYiXrciY3LS7NeI0pU5KlLGyMhoXI3ZFZJ+Qave4WG39fwxA/fjHEPb2NLx2a0NyQNPsE83Ao9c8ZwGoTrMhMQXJpJo3qsSu+YjTVrJDVw2yRHOT4iNzW1MN1e6SQzI/inTphjwa5kr2ZuZdBbqESZAIvlS7D6JNex9l7XqLUDkYvCp/AfzTHy99TI0De+fIQAxBjvawotK6NO1bk9G3k8r2pLZVpOkOgTludLldxkDpgEUK9fqwkVtN4ojS0OyWdWUcjRZJa48ig==;31:0ed6KqRF0xJs8xmH9TkztZNZk88Xapk6WuAZePzQehPBA+KlxTvcECUKgrUGh9X/ks3VjbLMjykaPEsQerxBh0XBor79t+pWFLfbAG2LPf014jesX2ZQKYVmBObcGtuV972kaKE3cF4sw2vwBU6ObRLwMmXjyqT05uhS3kn2HJoAkkrf+NLrPSH4bQsuYmMLQIANpEpEmZDgKtN16JrGqYblL2TaGklQLwgWuR/4tX8= X-MS-TrafficTypeDiagnostic: SN1PR12MB0157: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;20:AA6H2NiyhQFptWBO4GaOcQQbgeDR7umO2cohHaUQWiR5OR44TfmXudAoi9ZZLRHRNqcwJQ/GB4vFn2mgcNLGtNzawfESTWy1z3Yv2vSGDLmnCOjsablQjk0uhpnm+aTW5O/4Ofw5QU26MSDKI1+lKqKS08X6OPaVq+/8BoMtnrEAU3K0Y9Gd7GQd6xAYXOyksm4ZAMPYJZs5g3LtKAe+/3WF/L43XDwMLWdBLp7s+JXyW/lYoBnPuaGUGB858Be2+x4VnXVU8t6yV93cTD0/HK9r7CF8awtgeXjpBw9JrYuoQLTnTdmuQIOfHE+f4k6prIJ0nvPQLnv6hdUXXjXVzi2l3jO9V/FXf2p8cRkiNgzY741MYoy6b//Y7iD89N8ArFGvKo956/L1tG/4O6ihA4rYIEMIkwPx67pCyKcGyMgIDz2YiurHdD80v+6JfmGJKhl/VpG6JwFRhXtOeqLFaX7cZEI+MEeQ+NWQRzel3sfC8XbV3jzdCDX22nMlQnCE;4:IHsD1ulV4Oui1dmCvCyn+c7sCuBNQCmALbzICh2EP9egIx8DaZIbkMINMOVQkwzCA6IwHfM7Sk6YgGs6FxFmVde8TUgd2I3W5T5fmpg9UGoanDb6uv5XNfK6tlCZLVQUwY4r1s388EQXP+UkKGSAGVVssTkmkKTXWMlNHPhtogyJuBVG3agMBzD6jZ2QT9VRD0P6q8UFuzrh3skHwPFVCOk08mghq084hn9YVd4DSsEQX23wyxrbdQ9GrZQ60Z5MPoBKKlfWmifSKHNxxzpWQHqhThV4s6ZfL5BhMhZyjimcPbKfEBFhaYrlEMWNo++r/p/O+XwcxNJDs7RiELFnXw== 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)(3231020)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123555025)(20161123564025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(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: 0466CA5A45 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(39860400002)(199003)(189002)(36756003)(7736002)(68736007)(50466002)(1076002)(478600001)(4326008)(16526018)(316002)(53936002)(6486002)(86362001)(305945005)(53416004)(54906003)(50226002)(2351001)(106356001)(101416001)(81166006)(105586002)(8676002)(2361001)(76176999)(2870700001)(2906002)(50986999)(6916009)(23676002)(66066001)(47776003)(6666003)(97736004)(6116002)(2950100002)(189998001)(8936002)(3846002)(33646002)(81156014)(7416002)(5660300001)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0157;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwMTU3OzIzOkVvc1d6d0ZjTi8vdlBmVDZjbjJHZ0E3eWlm?= =?utf-8?B?eXlkQUljWUhDYzZaNlEzcHM3TG96bEtmRVRmcjBtUFg0WG4yYnU3eHZOckJt?= =?utf-8?B?dHRzS09lNjdWR1R2M0hpek81LzZPVWFCbC9Gd2tVbUtCQ2U1Tjd0K3dnbFVF?= =?utf-8?B?cE92ZUUrQ0NwREt4YUpvclpKUUdDZHRsNGt5dFhSamVqZEJFWmxJbm1pRFhm?= =?utf-8?B?OGJHNFVzSmoyck9Fd3NadktrQmdVMmFyZEFJcnE5VFE2Qk8rSFE1R09GZmlW?= =?utf-8?B?REl5M3VUdktUcVlFNlRmZUtnb2hKMytMSlJ0dndyVHd2YWRuVzEvTjZBc21N?= =?utf-8?B?RWREU21YWWVzd0w3amxBTk5wU3JLVXdieTJDZWZSWVJEdUdzaFpQd2NldEMz?= =?utf-8?B?RnU1djg5N29UMDlTUTI1ZUQ2ZXBydU1ZSmwxcTdyZ1F2UGtqMEFGWlVqTlox?= =?utf-8?B?ajJSbFVWQzVpbGNhOFdSZitMY0FpeDBmajlyc1paWXptR01YUG8xQTlham4v?= =?utf-8?B?enBGaFFKT0RZcFA2RXYvcy8rWHFsYk9TYVFxZHV2M1VST1VRclZhM05VZWo4?= =?utf-8?B?MEN4Zkt2TWoydWp1S0xlVU9WWjJTUVJncmg2cTV4c2dCTnpIR0pNdWRNTGxp?= =?utf-8?B?MnQrSElTUms2TVZ5djhqMW5CVVl6Nk5LdkxFbnFNUWVqcHl0aFIxMWNBS1Qx?= =?utf-8?B?NTkwQi9kajdTSlo0Q25rLzJyYndzbFVFTXg1S3I5Q21mN2xSNDh0VHY4ZGdG?= =?utf-8?B?d2xJdjNlUUhHM3VIQjgxQzJvbVJ6ZkVKcFNsVTBsQVhYdCtKZ2dpbitiOCt2?= =?utf-8?B?YVN0L2dGNE1XaUNnc0M1R3dmbWk3ZzFGcFVLS0MzbVVsWGx4NHYvSXF0dWRD?= =?utf-8?B?MmNTbkY4Rnd2ZXV3VTYrejFjcnZqZXJRV29Hc2YzOEF5QWI1OHZ3a3dwRjFX?= =?utf-8?B?bDlNdWgrOFZNQmxvblpLS3d0RllxUUNGMExMRmFDK1V3NEdBYmMxUnhTMy9i?= =?utf-8?B?ZE1xS25ZNG5xZ1JiVHNmekljSUdjdTZEYjAvMHlUU3RiR2RBenV3cFNPK0lS?= =?utf-8?B?eXZFbWlJUTUwcE5LQlk4MEFOMkFBMjV0VlpDbUFjOEMrUE1qWmpnN0lxeDZN?= =?utf-8?B?Z3hwL1JaZXlxeDZQSUh6S3V4eE5obGRjZWw2dDdFMmJYdGtsMVRvYmIrTmc5?= =?utf-8?B?THF6NnAxOUdFYVo4bk1vWVJEejg1VVRZWFNNMWZ6K29PSm5NMWtURGx3RmVP?= =?utf-8?B?RFhSZjRtUHFZVDk1eWZEVERUcXBNeXZQL2h3c05neEpKS2xVZjNCTGtRMC94?= =?utf-8?B?ZFBVUmt2bVVHdnRsZjlsaHAyM01RSWN0UjhCVlBCNldhRkhvaS9aT2ZwUG8v?= =?utf-8?B?aHhwNzNvRXg4c3kySDN5T0tyK0k3SzgzSXkzcCtjSUZQb0VvRGtuVGs0cEdz?= =?utf-8?B?RTl6bUtYMlR6V1hyc2Q0Z2tSWFUyMFpQb2I4SWRobXp1WmttTWFLWWEwTVRw?= =?utf-8?Q?t0IjJjerfUQMc+Zycu/wjdDD/FEOFwxKtm0pT8Lv5NMriv?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;6:yn/pLInaAqabWuD4pJLTwzyh6ayIAA66NuZmQBdEwgSBgaCtFC+T8p/mzY7WaVu1pv97Mz1/hvNyfHD/Md8+Jgi9MS9E7QkQrj8+oL5Ah68o6nwHaQqs2H8lB3TlKt3ZKbKXUzVdmAl0HJELkwrfpdWVdcGH1HUrmVpNdxgo1NiT/zJLZJZ/7mZa9d9glvDtSaYXmRQdL3WR8vj0PUscISe3zdS2CuF9E5QZdE5YVX8I94dJYOa2imbukcOxGuzMqVoicl6umzHmJ2V+ZNAJIDw+lS5947b2VvamniJPCTlVaVxobPMS6mSoVPILcQGkzDhRfQHbSPqh1wJeO2v7Uw==;5:EaF1M8E4qvky9HcX88yHpuEIGssWJ3n3CcnReHsEdRIQqEqZEj2iyWV9yHB/q7u8LerppauJWkwlVOLvSqlpCIOgP4TRKt49rF42jM90jcBOW+L53OWZB178antI042t/ctR2bVF6kLEua9HNY3f9w==;24:1MvpJOY5O09y+71US/D8yli5kmTYMppQMFYG4+CZkhD88Hk9lWZ2LIJBqDcbDiBdX8AETKFDPxnmXWyu615sbnbTIw4G+9MuT52dfveXwZ8=;7:7v2EVwFvGuEthwcM6M4qW3rSgF4PLzxTt5KnIPvepcl8EWDaKQ6deBp56ypvkP7N3ohMQcX0d/p+zL2tM9dzYO1uBrdJCqCLRJ5ZVJPY8jdX1ZkeJj1ncxdt1TNkdJfvgs1ZZQp4SaWxTgH33VicgjNw8wzvMGTEDv/xrpfFVY2YLusTVa0pvg1ogtbmO/idCDYHFkTZSsfPQgKcWBMZXCcL/yzwx9IfZ/Nn8aK7/fg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;20:kBh9TXkZ3fnetwEWYGBCyFJNi80RUiSH2YlIet4PHAK02/SjxdSBTZoW9GdSBqifXAG+nWQP1zvzxLWAZrJ8NHW1O6Mvtps1NXOPqFBdTollrCvsTrf2/ZYo6F82IK16/FmSgWPNpQS/SDgPLX0hhV5oDfiBchgIR5b0Z0DD8CE3ek1SlumH8yjI5QukwY8rFDXmJnrXPsswdUI0u/YhEYkVRfE0k8a02FWPNrerWRybZjFe0CnM2/9WF/jKSH/3 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2017 02:35:30.0502 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a621bfa5-1fd8-423c-0e9c-08d517633c70 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0157 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 contents encrypted through the KVM_SEV_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 | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 7f13bb8a7078..3ab2d4ae11ea 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -5913,6 +5913,66 @@ 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(params))) + 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; + } + + if (!access_ok(VERIFY_WRITE, params.uaddr, params.len)) { + ret = -EFAULT; + goto e_free; + } + + ret = -ENOMEM; + blob = kmalloc(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); + + params.len = data->len; + if (copy_to_user((void __user *)(uintptr_t)argp->data, ¶ms, sizeof(params))) { + ret = -EFAULT; + goto e_free_blob; + } + + if (blob) { + if (copy_to_user((void __user *)(uintptr_t)params.uaddr, blob, params.len)) + 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; @@ -5936,6 +5996,9 @@ static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) case KVM_SEV_LAUNCH_UPDATE_DATA: r = sev_launch_update_data(kvm, &sev_cmd); break; + case KVM_SEV_LAUNCH_MEASURE: + r = sev_launch_measure(kvm, &sev_cmd); + break; default: r = -EINVAL; goto out; -- 2.9.5