From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752185AbdJTCpX (ORCPT ); Thu, 19 Oct 2017 22:45:23 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:36505 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751712AbdJTCev (ORCPT ); Thu, 19 Oct 2017 22:34:51 -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 07/38] KVM: Introduce KVM_MEMORY_ENCRYPT_OP ioctl Date: Thu, 19 Oct 2017 21:33:42 -0500 Message-Id: <20171020023413.122280-8-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: 3a41eeb0-50a1-474d-c0f7-08d51763215a 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:v5x7IRyrK0sBDpqL9d2DVmniVycIP8nk2a9jiBim1/0edvwZyjiEebGH8MvsGTgG9DTfKbr3yy7sNO6mEqtj33gZECQIIzfCPGkIYROkynpqQLS10cqIwWn2w3/2gG6y7EVf2Q43iJcrcZbKasFkaRxQsPxQAjEXnn88kDbAMUVpN1NRvjQJLXw3hK3E82lh527E1pS7BKsr7+pKfe+wa76fcMuTcROkahMyys4PzJwN5TW0qm/tK+DfDrc4vZ2/;25:0QVHF88v/IJl9UXjWfXhxlsDyIalIeaGBdbS3Lnt1TUMnI3sGDlgorGmRqAJuGLuX3DbDwDS4KemAO1bmyM2LRVpjKhutjLcQRgvwM9isV/PyOLj5aRRj9eXt3cd+MGkmUf/aPoNwzBRvQQqmTWJOYhuNmDWwlGjaAimEtycDg+T8GXBzDI6R/deeYnaxqu1Xz4NoH8JKGpWbKeT5vdG8qRqnTuhra7a2mvgQ2IefFDLQlOyDCZvVKkt1Ykn66aVNTPLBk0BalxfUrKl3RgW4EhMVr8ImsWalO+SpSvHqadZ7oRT8JsokxegYz/MSq6GblA7XCBPz590q9+yNtYzGg==;31:1Ha/AhgsYA1L7eL00zukvGJ/7RTcddcacKXadcGtfujaKonx5VkbR/7P4sQ3HDTclhgBDu4+WcNkl5O44hd0TgmvqycmwSa4Po2P857/LMSVOJCsti5+eg7VEWyGTi9wPBb1QSpR2O/0HJu+/GNn+azkCr9242EvlNNA6BXt8qpiUUkfd2zcKNbyhT088MIynT6ktmxKbcDVBWQj+sLeeJxiXUYMiIh7pd3dw25aAJU= X-MS-TrafficTypeDiagnostic: SN1PR12MB0157: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;20:YDhVuVrHTsD70B+dDIjZDbAvg7XYiWRG+ydXaPHaf+zYeH1fY9WZGaKshXVD7+zclZhlor1aOOCVZr3l5XTjOayh3teTV5CzlntRZ/JJWWVpsMNOjVh26NQR53r5IedY02IM9aRK3iUOwMUnORl7lVS7PlYrD7dKMDABNRNROlOtRLYy76G41/Z49v4deoAyGT/+mgIHbTGdEy1ZzO4vL9CuALJNGpJF9MfwtFObWbFfzxqsq0LjDnDjY0EeqqUyDb4kQOEo32++5rDH8pAdHQUxeNzY+kudYAq0c1AtA5QvGJg2NA0e8nDrX/xdslp0MIO8oWK6m9Q+rCa/p1c+sZVtNKELtkm3h5TNvhkmp8Hb7USCg05VYCOUwQqV6aK9fi3JOPNy6T+y0LE55Szapx+XgG0lfT7aPm39psv7+2XF8kZdNCZKMzS9ZPlvD58ke/DPWe00gP2PFGPpxt/jyrsZk1AGuxgs15PY94xTWWiZaDfsX1x1gjVk4jOGELgb;4:KjKJIZFwLPUa9Geko/81k2e1TFbwpKeOy0u6FQNZfCJ94lJV8rg+FPsr5vIHExcViSnbWwTqrauO3RyKzQQfZgD4e7xBXas7lsZwR0EEl1slMIyoXejQM6VAy7pEwaNZCSLHrxKTO0FwhIhay8pEOKZq3gmhdBaKPCWAE0qy1kHRTGwjY2Jj5jsxxfhMO29amugYc5ECnCq78UrNZhvWRP3FRbXRPC3Mn6NcKec76V2jisXFsz44z3w/wIE0qZPYHWdjiuQgCo9DrAGqsr7YEq/KBc45WjtjuZwMQj3eE8WGlr1F+tlY8iGP2QfK925M/g1iLxyA9JRi52GtMqps2Q== 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?MTtTTjFQUjEyTUIwMTU3OzIzOkxaaEFmbEdqOHJBVGlxVTNENW90UUpIdjBK?= =?utf-8?B?YzdvcGxpQzdVL05FdGZqQ1lFbFRkclEzOEgzQmJnZW14NDJVT1lrVzFhT0RJ?= =?utf-8?B?Q2pHTkVCc0QvN1RXeXZHbDMvTm9lcFZFeENMdzRoRStDbFBuU3BrNUdDdklO?= =?utf-8?B?T3huMndMUXVmQkUzMFZmTklwWDU3ZTlRMG54eUZvZW5QSXVtaThEcWVNTG1Q?= =?utf-8?B?b0gzRUJqYmZneVduSUEyejVlSk53L2hNT0VuVG5pdDI5c3JncTF4L05PVGQ3?= =?utf-8?B?b1pIblVndWZ4anNnZzVZc2xRQnY2WFlYdjhBcnErZnMwZ25CVGVPMkZmTnZQ?= =?utf-8?B?Z0FqZ25RSXhUQUo0d1FsNHhFdTViR0tEUW1zWTkwZ3hDbGVrNThQSWpRdGJ6?= =?utf-8?B?VFNaM2Z3NjBSbEkySGYvUlo3MzNHKzI0WWlEOWMrNjMzM0ZXMDZ0dmExQ2lE?= =?utf-8?B?WktvSW1BWWpzRmJBUXF2OFVlVnBCSjFhTjlwME5yc0kwY1NIMnExeGF4blZ2?= =?utf-8?B?dyt3MDUwek95alVlcWdsSzNCSXhtM3Fid0dCQmRaTEhqQWFudVlFM2JqZkNy?= =?utf-8?B?MEU4a1EzZGwxWjUzYTljcW9OUWt0WjVQU0ZhRzBKUjlXVE9xcysxOUtoSkl2?= =?utf-8?B?TENHVEhIVGpESXFXOEtKSUJQZHNDaHZOU0FteGJ0VE8xdjFKV2NVZlAyMDJq?= =?utf-8?B?RjlVZ1IvRTNqaW5yN1VwM0pESlBkVlkxdW5CQ0lLWm5sYUQrOEt2VnlFNmpZ?= =?utf-8?B?bUN6enFlUTZ4NmZpcDJRdW85ZG5RVHJvM0NHdVM3bTk2SVpYYm1iRStXWUpp?= =?utf-8?B?VzFlUC9GcSt6YjVPWjgzYXFWYjJTM3JOUTJCYkNUVnZuVndIYnZNanAwTW15?= =?utf-8?B?NjBHT3dWQUNIMmZ1aWRYTng3UlpMU09PZnhNZFpvQlRpSldTQmtFZUFpRzZ1?= =?utf-8?B?dFQ4WFE5WFJOODNJOGxJK09yTTJtWTJ2VHc4aGZJZkwrSGxnZnliNllvbkZW?= =?utf-8?B?MzlHTElmQ0ptT3FTMHp5SjVFbVBTaFZONldWL2pIaDJjYjYybFltUHFQbDB3?= =?utf-8?B?SFpPTUxJSXgzb1hOaFI3Q0gyekVKMUY1TVgycUE1SWw2blpMaVAydjB6QVZR?= =?utf-8?B?RzByTjZTMnN0OWcvckIwMWw2Y1hmN3hoOGc4SFh5MzlyRndNdGRKV3pWUXZT?= =?utf-8?B?NERwLzJHRnV0YlEvNnJybXZDK0V3YlY4M2dlTHpVenZWQm1TekVoOS91TGx5?= =?utf-8?B?bWptR1d3eitUNXdXWERBQW1zNnU5Ri9WUnQ4OUQ5Q25PallURWtOQ3A4b1ps?= =?utf-8?B?aFNkQ0ZiOGE2bGlCNVRkT3JkV2JWS3R4OG5PNmFVdGxkMnpPSC9rV3BJMmVJ?= =?utf-8?B?WmFpNmRmT1J2N2NnWm13MVoyaXpGMXh0RXFWNkYydU5obzdlV0NtRHMzNURl?= =?utf-8?B?NXpvYmpzdWNwV1FJcktTWjF4dWc2UDhFdURaZ2tUdGF4WkxUMytvbzN1dWdp?= =?utf-8?Q?+mtBYA6xywH7sLHjcdrPYSaJh63WQk6M/wlNcUDRA46Qsr?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;6:ICkJbQMHDeNQyB/KLkFo2t9gi4Yu8UE6chuxR3/eiGv9kQNKSG26nAXxmu3Gl/7jGHCJOpEaLzc8YMy4fsfsJuHLCTAiVHJ73hTEnt4+1QhvOWcQsiNrYpcYdfhrLDPlc5AHcY0voalhwsstjaFBYBzzn1wPnJL9LtFMaxd7kG13DoCMpX0OqjqewCojO4y5awE51hAPozYdievNtScTPe495z2/6A11f+UVroS8+UFn4i2DKOKaRhIpM98hUeaReSka1O8DXjX1cTxEJZWIMbdkl+FreGerY+3zDNsdFenV9soKBqaCwHpba7dlhI/jGSKJO8IhX0wJPqCuO/h0rA==;5:qVTVW0c6Y8bjHN8V3A91oCBGMJImkRa0xqM50ELo9xRCg4ZzYWhCakqWaCvxGrVVes5u7FCzV5FrpghLZVaC7eplwLzq3jFGz8B4+QT7L2ZoSsbKEi1Q2QNrfzEQOtZ/BryJPQ0cCcKoh1zoChXs6Q==;24:FgZs+sd+1j4C9FXBT1/ZpnkiHOSZtig6PSUfvy8OvSFKb3fRFnH5a0VFSr8qjuZK86oPFbRvp73hBAa7MNXd/XPrAWS67SQaa+WiPnZbuWM=;7:FOie0Fi8cs2IEWOh8Km404VG10u6toyp+OiHG600uhGXjeAlGqQjQzwdxOCK1jsSSCJevTGbqmF84Ex9k2p9Fl3/kDlsRQyyoKsDLdcsf4s2Y5sbyFiPnTbMjqQ8Y5t23SDYd05PgcxAYKAUBPICvo5BR7fyq2o0Z8FW0WuX9myiRB13t1B4IPZyQnL+Y12pUXS9BcMsB2Jnn0d/d6DxaASHe2y9EfNxHWAbQ7ML2s4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0157;20:2HZlGjESKS57ZHVIg885LrHsXROE/e+3rukSgQ8MxR43WS98FGlpU/7NMvihk3+FF1owgi65P/7xPYVptQ4M3xth1zJCNW+JuQeSJxMMNaHMykFn8ASE071PmRymT/gDPD5yV5ThSuOhqWXzk/ynFwLSFn8DB2UlU1P7hw/IrPpUGcFsIBuSZxggEi5BUGgF2RrKNb6iCa3WPe0hojcEwGPvG0qR9DHIxvhsUpT9B7AmJHJ7i/sG/scpyUjtQuX3 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2017 02:34:45.4402 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a41eeb0-50a1-474d-c0f7-08d51763215a 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 If the hardware supports memory encryption then the 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 Reviewed-by: Paolo Bonzini Reviewed-by: Borislav Petkov --- Documentation/virtual/kvm/api.txt | 16 ++++++++++++++++ arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/kvm/x86.c | 6 ++++++ include/uapi/linux/kvm.h | 2 ++ 4 files changed, 26 insertions(+) diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index e63a35fafef0..fcafdae1739e 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -3390,6 +3390,22 @@ 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_ENCRYPT_OP + +Capability: basic +Architectures: x86 +Type: system +Parameters: an opaque platform specific structure (in/out) +Returns: 0 on success; -1 on error + +If the platform supports creating encrypted VMs then this ioctl can be used +for issuing platform-specific memory encryption commands to manage those +encrypted VMs. + +Currently, this ioctl is used for issuing Secure Encrypted Virtualization +(SEV) commands on AMD Processors. The SEV commands are defined in +Documentation/virtual/kvm/amd-memory-encryption.txt. + 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 03869eb7fcd6..4c365eb23080 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -4270,6 +4270,12 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_vm_ioctl_enable_cap(kvm, &cap); break; } + case KVM_MEMORY_ENCRYPT_OP: { + r = -ENOTTY; + if (kvm_x86_ops->mem_enc_op) + r = kvm_x86_ops->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..4a39d99c5f99 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_ENCRYPT_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