From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751965AbdISUzq (ORCPT ); Tue, 19 Sep 2017 16:55:46 -0400 Received: from mail-by2nam01on0056.outbound.protection.outlook.com ([104.47.34.56]:55572 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751782AbdISUrI (ORCPT ); Tue, 19 Sep 2017 16:47:08 -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 11/29] KVM: Introduce KVM_MEMORY_ENCRYPT_OP ioctl Date: Tue, 19 Sep 2017 15:46:09 -0500 Message-Id: <20170919204627.3875-12-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: a3e58aa8-b992-4608-5008-08d4ff9f92a0 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:RLm/z1VSw1pRlHIcKRYjcrn8WR+RojWFEAjjNi8JTuF3nXkNK82/XVw+B7TCENP8yi2N5vjuX26pbg0ecDLF/G/V1DWoF/Tk26Q9QmJVX9iYcz+K18JCwem43kdjHvjSPsd6KBjmK1cjEL8SA1sM9XVdsodZH8DPRBgGZB1+HFI1z6MSWAuw6BYsXX/lBosjRFH+s7ow78QbyjzGZCfcbfhA8RvCcf6N1H0dLqcneKzXqJYfPLn23dOyW+B04ExE;25:TIpne0FZqUVJ4yJ/Ct2XQEOhwv6+etGl0I1h2cGQPr6D261I7/XZ/ElT8cpC7/77hgbraI9AL+TpiWVXB934Jv9gkZVqvDyCiE7qZL1W1mhoz0umZdI1jKCUxr/AuCJ9otAV+AudKJKZb1s/i/rOOxqt8tZMnR0z1n1t28uj1KqTF+q/Chy/4KqOd4L3ueaxTlVdA1lWzbcTCGr4vQTJ54U1xx4sFBhdEK5FeHQ7Q/F4eIa5rz4120dUC/Cxg8RaBYuoOBCPKVTfFdFFfVZdgbwzUrTknj4jrPkYuElgr6rgmiZK3DZZmEMg2+nuqd0fPFj8OgBikUGclhrXgi01wQ==;31:ZQU18LqvqYZaJDjgs3iRjoxqMSlQMUpkvJQBKZxR0kDN7hPo3tcjkKvG/4icKM4zg9VOGgc+XARf4hlBHnl90ueZYsOLDRIo0kEyGHSCMEBACtEIbnaquC6/meiB3WsU+37MP/wA5bfLxu+bvMpDrv+JDp4PiTuV0GkXVzEtYH4jAaD9JbCDRwYdgWDdPgA/D+yW8KzVoTRafmbnchRrnkYFlDcQNaFwLDAQD3hMEWM= X-MS-TrafficTypeDiagnostic: SN1PR12MB0158: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:PX2gM1ecIcL5TEg8vrbxr0BKWkDD6CIfX/0zp5qn154g6z1SVG2IEMe6AC+Fdm1Rm8HlpBafibNIECF2Ko+l+r7ihGtg3VE6MyhRG7RF0KbjeMTm/3XDcAB0grTMXUBAsz9aNc8lc8gaZfpPHe31+7R+EGlxYjVnzqG9ce9yjqBmr2zROyNyO2qh1TE4NdWInIxTb9uLMX9A0qwNmIJRfc6neYW/bZCaveeXbgCp0z4B8GYyHk0OMx2txVAT5ZV3Gv4olCdVxzb6+ZnVbJJ1uX9NhZVIWhcmqkwytHdtuBl+vFxpZbdLL87pd0LrmM1c/bGvvY27kSD4yn6ZAgxziQtR7LUDxGmCgPew6zzVfZr2SPVDwsAodwveDLxfIvX4FrwiIwMSLEFmhqroTYmUnzjCH/Uo34p/zUbI9nQjVEtrnhSNn2I/2Vto/yxJe3RBl6dYX1VCeWG9nM3q14p6QLlFICwpRAo/eAEfI8uKPKLxJxw6CLjQ6Fr0cx5AkTCn;4:aVFkkZ1HQQQKh4ZMK1fCvZzNuidn89kQ9XtxMispm3xEzQMbjt1mtC/ElSgw03SxsEZwnMfUw/v+B6g4UnqtaPc+9aFngMm+E+E94ZTNqQnT3vBjQBav/HfAwKeGc0qvZz7/BayrG231sYt/9ATTNrSm0xK+oh3R63+L8aI4r7+43GlbBoCphF29eGesiBYVispYdAlrUmgldw89SVrOYwHfpMWibiOM8NYw4Ishm84kpGcmfNVZzoawlaty+/kUzAW6G4Dw3AAdLoLj0pzozW2+DVp829RjcrWOAaU+GOonGA/uNJxQOSpcfgSsnV1jGDyEu4Uzugk6X72pDHn2cA== 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)(575784001)(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?MTtTTjFQUjEyTUIwMTU4OzIzOndHalRjT1NRWWdGTmU1d0dNMlBaZzdoZXJU?= =?utf-8?B?ekdETW5LRFpXN0diRVFrcyt0QWdOSDRWRjZZT3N1UXAvZHV2aTN4NkhaSWpW?= =?utf-8?B?aUJzYjN6MkgvcGFjNEkxeTBTcm1XRU5NcTBwWG9oZFRuemE4V1NvRjY0SkVI?= =?utf-8?B?RGc5NGwwNEVzbTBJWGVPZEE1K2NBeklwa1hONXJQeHNnbVE1anRBZC91ckJn?= =?utf-8?B?RUtLbyt5R0RsTnY1K1ozLzFySmtiR09hbG9WV3pSalBibzFTYnk4ZmREeWo3?= =?utf-8?B?RDhZYTVscExSb3ljUGUwRkFUNGxlUFVtaDNHYmhGUW9GMmVFVEg1SDN1MWtp?= =?utf-8?B?ZGpuUVRVYjVLVGY5WGNTS1BvNlVUQVNhWlhoa21BVDB4dU9pcC9XU2thQU14?= =?utf-8?B?OWtPVVRpZUhXNVpLMVJFSU9TNnlJTFhWa2NwU0RBV0M3bVdmZnc0THVrQlV2?= =?utf-8?B?bjZiRlEwMHNVTnRRTlVzd25wUmxlbG5MTDh2dDdzdC9wUnlTVngzNHp0T0NE?= =?utf-8?B?emZ5a0gzdHBaTmFGWHpHK0VsYmtRVGNQMU9yaUM4REZqSEVxK3ZBK2wxRFpF?= =?utf-8?B?ZGQxMUVlSmRjaG5PSm5nMGxLZ3lOUW5jUDVCVDhwdDBSWUdtV3dJY2FBRkts?= =?utf-8?B?bDFMaHdVbjZmSGJ1M1VYenEwNlBscm9yVlROUHZnYXBDaStxaSs5b1JVOGU1?= =?utf-8?B?emRQem9xRzBMd3lUMVNlN0JBZEEvWCtTcmRnMU5PejhDVUtRS3JmbExsUlRM?= =?utf-8?B?cGxXa1QyRGpJaXpFS083a3JaYktwcGw3RWV5eFhqYTVkTXhhdFFCNCtHV3Zq?= =?utf-8?B?aDQ0aVdvLzNpbmx1ZWpwcjhMMStVbksvMkJaTDZOYm9EOEVRRW1FcXRrVXRj?= =?utf-8?B?Y3FFOGhWVnZHd051VjltVytYNFNYQUhBWHd3czl5UnR2SmZuYjZxcy9IdXJF?= =?utf-8?B?OXI0bitEWlhVM0Fpa2lNK05Zb2tDNjVCVDk5cC9TSG83RFZaZ1BMYVN1UDF4?= =?utf-8?B?Sm11S2hSczFNZWRGSUhYYXhWcnFJcEwyM1NBTlM3Y2FIMHdmS3ZUdkw3UjFT?= =?utf-8?B?dmsrMGd6Nm01NUlxcU5zYjFWSCtjbEdRcWNoV3lzczVuOWp1ZTBQM2RXdWpy?= =?utf-8?B?b2J2Zmp0RmppbnRaU0FYQ2VSTUkrUHJDcURkWjBCU0Z1bU5XaGFzN2NQRlVK?= =?utf-8?B?UzA0dCtEdnFEYWRMN2phLzBvVE9PMG1vVTVQbjQyL1owc01hTzgvci8vVFFs?= =?utf-8?B?Q3VtdWNpRmhXcVY1YitlcWk2MFQxNlNFNGJ2WFlhU0JFYU1EUFpqVTFyaVVH?= =?utf-8?B?N1pMVldZNnhDV2wvQVNReUdnWHBMTUh1dVhPbllDa0JFK3hydEhReGxvaVBQ?= =?utf-8?B?RENiajBYQ2tDR0paTmJkeXV4WktHQVM3c2ljTWtEOGJxZlRYWDZVMXAvZFNn?= =?utf-8?B?SFdyU1ROTjh3ODhYQlRmdS9Ldk1tWUE0Q3FEaUMxMzd3T1RLdFZSS1VUMnBO?= =?utf-8?Q?p6d66DwONADS7HKx5zotzg0/Y=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;6:DkVSbyGq9yhAUxeFonRQDcR7WFXzVeB+Lq9W8itUQvB9TUryGDNi86ZEsswY/1O8xNJgwwt86GgUa2fr7DtmhBOTiIzDDXw70yosF4hq76C8HV2IAiewW8JAK9G+EN6DCtUSv6ZK09grvKBPV4HsDrjFoV6zBJv47wTRiFtG4N9SYqqisOk9epM6Q+Nrk7zbshwiL95XSyv++qlsPZF0actUs5WyRl9YwwiIjjzgKXq7irs3Lz6j0emQrE8rwnmhyGmmFHUREAJeom0BquRkxE4yf1QMRnauA9Z3o5McBUAXZFDf04C5HAu295+kdx28zSxg3s7k6Rxl8QfhAGCmNQ==;5:lFbrFEmk5GbqRBVaByzM8lmouP7WuBEJC+WDQyFOb7Z8QltZLaz+XRS1w8to+gXef9eZ3sSb6512dhDTXygddce9XblDSXbT3GyDu61UPk6cyfsHFakekQDi4BcKqeQQuFvsXBOYx53EsI8ZOpbMYQ==;24:khCfVT+qhURFAFGvr922uUIThPWM3img4DhlN9W6zgqsZcd3s9UFat2jU3dq0EQ4vrc5qo1vtfNU/LropJn2rahDYguzBMcBVnmt+UA3SHM=;7:5EMtQtge6hFoC44hIPy1SRheHzfq20VFAiLLf1/N8xNhqJ0BWlSBBjQa5KhijYZTMPViiSB6tYqG/smyO74cgZaNkdSGBMugxDItBw4uRTBES0vTv7oiwGug26edJWjzTKZo6iQyfyzwGih1RvHqzXDxnmsY1aEEnanZobjJ0x6aZ6q+6NyPwFLLsm0Xt1PODxs+LiooOAuMKegH7TqivUn6X8MukEpR8Tj33WPrYGQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:bnHMGDeimtgDq1Luf6WjN2Zb0DVz1xkvLqlNky9F1vtkN9Buat52tjR1gutt+UdC53ItueVvAfShTjKM49Y1yl0PwPcOu6xiJnmc7FP4jF7/2dRfuIRyHyPpG92b4xtpjOjcJC2+VWPh64kBK2v8agHFM6/c7eh2CKiw/ZIE8KknbCj66s1FICDjdW4FRiA+y86OWoQwCUJnB1z9x+PuusRBJA7lI0W6F9kjjuxfkbDDMo6jU4G49IxoBA+zVaB+ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 20:46:58.2040 (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 If hardware supports memory encryption then KVM_MEMORY_ENCRYPT_OP ioctl can be used by qemu to issue a platform specific memory encryption commands. 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 --- Documentation/virtual/kvm/api.txt | 15 +++++++++++++++ arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/kvm/x86.c | 12 ++++++++++++ include/uapi/linux/kvm.h | 2 ++ 4 files changed, 31 insertions(+) diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index e63a35fafef0..3f0dc33d8a8b 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -3390,6 +3390,21 @@ invalid, if invalid pages are written to (e.g. after the end of memory) or if no page table is present for the addresses (e.g. when using hugepages). +4.109 KVM_MEMORY_ENCRYPTION_OP + +Capability: basic +Architectures: x86 +Type: system +Parameters: a opaque platform specific structure (in/out) +Returns: 0 on success; -1 on error + +If platform supports creating encrypted VMs then this ioctl can be used for +issuing a platform specific memory encryption commands to manage the encrypted +VMs. + +Currently, this ioctl is used for issuing Secure Encrypted Virtualization (SEV) +commands on AMD Processors. + 5. The kvm_run structure ------------------------ diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index c73e493adf07..48001ca48c14 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1061,6 +1061,8 @@ struct kvm_x86_ops { void (*cancel_hv_timer)(struct kvm_vcpu *vcpu); void (*setup_mce)(struct kvm_vcpu *vcpu); + + int (*mem_enc_op)(struct kvm *kvm, void __user *argp); }; struct kvm_arch_async_pf { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index cd17b7d9a107..ec9f634b75f0 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -4010,6 +4010,14 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, return r; } +static int kvm_vm_ioctl_mem_enc_op(struct kvm *kvm, void __user *argp) +{ + if (kvm_x86_ops->mem_enc_op) + return kvm_x86_ops->mem_enc_op(kvm, argp); + + return -ENOTTY; +} + long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) { @@ -4270,6 +4278,10 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_vm_ioctl_enable_cap(kvm, &cap); break; } + case KVM_MEMORY_ENCRYPTION_OP: { + r = kvm_vm_ioctl_mem_enc_op(kvm, argp); + break; + } default: r = -ENOTTY; } diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 838887587411..23028a78f12f 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -1356,6 +1356,8 @@ struct kvm_s390_ucas_mapping { /* Available with KVM_CAP_S390_CMMA_MIGRATION */ #define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log) #define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log) +/* Memory Encryption Commands */ +#define KVM_MEMORY_ENCRYPTION_OP _IOWR(KVMIO, 0xba, unsigned long) #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) -- 2.9.5