From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752681AbdJDNRh (ORCPT ); Wed, 4 Oct 2017 09:17:37 -0400 Received: from mail-co1nam03on0047.outbound.protection.outlook.com ([104.47.40.47]:4553 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752528AbdJDNRS (ORCPT ); Wed, 4 Oct 2017 09:17:18 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@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 Subject: [Part2 PATCH v5 31/31] KVM: X86: Restart the guest when insn_len is zero and SEV is enabled Date: Wed, 4 Oct 2017 08:17:04 -0500 Message-Id: <20171004131704.13266-2-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171004131704.13266-1-brijesh.singh@amd.com> References: <20171004131704.13266-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: DM5PR12CA0064.namprd12.prod.outlook.com (10.175.83.154) To CY1PR12MB0150.namprd12.prod.outlook.com (10.161.173.20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 99268f30-96de-4750-7c49-08d50b2a3afa X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:CY1PR12MB0150; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;3:tsS9SJG/0cPeR1anfX6M4h+z85iYiLBkhUq25eZGUEL6SwBV6VIesqhAHvwGWmNuQ94x1kPQG74R34RwpgzDVMPcFHL9sp4wfHCnDzrbV1LAHR0R+XnXqcmeY5A8Aa3yMC1Mi6Wx7N+3gxYM4oeyMFQErkSXSE2BSOqK35F1gGdlm54nEJIqBdiPIkVbLYbl56v8ZNwyX0tdtdkGgrF0Wze5z+ul/6L5DVLpzUE9+IJ0i0ECyx4KLivme00mPuGj;25:fgwSlMYQeXWIX2C5c+qN/NjGaijKBkbbXk2dhf9B4SEMgA1f6TBfZv/CpeDLcqalEvkdceEzH9Yxyc6VZ5eYQHn3W8qUkLPYhD9ngnhnykujHQZLWddpwRvkCabRVfi1MvMaUd72yYreCxyQYmWrMjSxUkyN90nwq0c/GZrGxl+eok3ogcP+z9b/AruHZAD4a4YInhKbriyNslonc4IvOkZUUmJNOBT1rTixSjK1AHbowic8qBRHzx4ezeBipz7zuVyCaZeTiLnMsUX0S7v1CB/uyVXTO6RfDfKiPxk7il7O2DxSo5X/bdqv0qMNUIG6/lfg+VGO+dfSVeC8b8bmIw==;31:s4YWJ9ZT4f9fHZUQlFp0KCCRxRyBH0ZY13THzP6v/pzH5qi6jvBL75PxIH7HiiPqqqJeq+n6UbnfRa3IapOeZPUKhSgiZ6T2Pna8ne2NRFAH4QoKUk9BcwnfGrAyx1c6kXfec1i5Um2l82lMNxcRdmvl6OihcaSQxhCoBkOcO+RHVUvhWh2keBT0no7ss67wTcKxBdQYd5tsMrTVCTOAmvH+y6SV7yOHdxuZzfRIj2s= X-MS-TrafficTypeDiagnostic: CY1PR12MB0150: X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;20:V3WJAYu/lQFsRiBLuV/f36iHA5kAb8fPJSP5kjADDJlST2lbXDBAzyXGcNM5CEVd6WxO6IVigjo6zPB1QWCAPhImPdUbkNuvJJQu/z62HWUUWq2FnGhuWwBTYCaunWdmvNDSUcFlOwLW2snPvqTPlkSCBU6K/EoM6Po6Ql0F7EBwJqP+VSoY3nZisfFvQQGtvd1gFhanOiODtfNPcieH5FygE1dbnD+xBxUSGU3Jv1Kxd9jhO5cIk9Vxlqez/wRBPTRJFCodUyJsaVlvrOX01XvTf8I6jxk+Hr/C16lbxqQSLbk1Ng8V3xmC7s7WjOxd4WvJEBZq3QK85dGJ70K7aG+cxgEGlm4NDfOR0oq+LRexMRAGd0C2r+w+7t1uCBagg9iTdozSgyjLMTmgDixX9QrZcA3fhIqe0AoFgO7F0+Aq/5xNK0slTsuDLkdZNRB6CQ00FAqG49tUtCZQ3C7k6NrJtKrYFh3SKmmJ8ktEDwSfzmqWpCNmESY4QELYcuC+;4:7ll82PWPcrmKRt/KrU6hofWcjuZfgoiHeO964mrHQLnRBgxxOhgbLHI4erqB8Unlg+l1llnZEWe9pQQPUBuvNQzeViaUX5WgK4CCeckdtpJpHvQ11MTNj216qvoFKSbBbV9QMLi0941d7ULKDfE+vmhvMnAC5LPMI0w03/CdXxjBSbs/NdPx4JwskJ1PRaUe2g4A3aFZv1imWFLrlt/MNZZkqig+xh4v8TBLYboCUyBuAzSFO0hjIZmjG/ercl/GZ2FJ3c+7yQL4sd9OoXjjHzlnjfON+Oc+7KiCu9fGv+L86SnZcxtswSTNj4ZmZomS4h+TCXsbg/T8j74WI2z7ZWXLu6LaK1kOatTV2/39T4Y= X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110)(17755550239193); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123558100)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY1PR12MB0150;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY1PR12MB0150; X-Forefront-PRVS: 0450A714CB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(376002)(346002)(39860400002)(199003)(189002)(81156014)(1076002)(50226002)(575784001)(86362001)(76176999)(6666003)(3846002)(105586002)(6116002)(106356001)(23676002)(33646002)(81166006)(189998001)(8936002)(305945005)(68736007)(101416001)(8676002)(2950100002)(50986999)(7736002)(7416002)(50466002)(2906002)(53936002)(316002)(97736004)(47776003)(54906003)(53416004)(36756003)(4326008)(66066001)(5660300001)(6486002)(2870700001)(25786009)(16526018)(478600001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0150;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTFQUjEyTUIwMTUwOzIzOmNTU2VPR0ZmQlcyZjBZRkF2WVpiQVNKTE5D?= =?utf-8?B?QXFCeVk4QS9Mb2p1UXJzZGpkbXUrenN6Rk8rcmdGeGxpeXNIZDFQaDF4eEZ5?= =?utf-8?B?TXlrUTVESGNkV25IV29BRHF5dHZKZ25YSS9QTkIzOHNkN3lJeVgwbkw5Z0d1?= =?utf-8?B?N3RrRXJPY2pZQ1NxR3hHSVhXU3VnRHlmQi9FaFNHbzBSTmpaZjBJL2hHVitP?= =?utf-8?B?MHFxemhTaE05VHRWeWczUkZhTDhLd1VNS3pYTHdQeFk4dnFicHNKYWtCNVk4?= =?utf-8?B?bCtoVXZUZkpHajFoWUN3UEZ4L2lYK29FWm9aNkpWZ0hiREZLTUkwTjdYRmNz?= =?utf-8?B?VGwyWGk2NXdyRTkvQnFYRUhjRUZQVUpXbWNveEJrL0VEVkxOK28zYjhxZ1Z4?= =?utf-8?B?OUh1Qk52MEEvd1YvYk5ZSkxGUjhKbVBSMjJna1lYd25TMFFHNzNDRHJ4ZmQ1?= =?utf-8?B?MVlQcUMwcjlsbDBOZnd3QzlENHRVNGxSSlJsNmd5clRtZjlyQXVhcEZmKzI1?= =?utf-8?B?cFArM09qd1JLR2hGMytEbFVqYVljVVU4NHN5Njc4YkpJT0VxNXNQeUVkbGF2?= =?utf-8?B?VWIvZURwRjFVRjlYdHlWdi85REUxajk5WXBLaWtpUFcxTTROZG1IT002VE1O?= =?utf-8?B?V2dhTEZPdVV5ZTBvdGhHTE4vZVR5bE5GMXJ1c0Z3NVpRZXhxaDZiajE2aHpH?= =?utf-8?B?VnJTd3hZaldGNFlaaXhIQTJsb0tkWUxxeWtha1UyWUZGazNnY0lJcmlVcVhM?= =?utf-8?B?c0dyeWd2ZDM5S3lZYmlPa1lDVTRqTGlTTTVnVjhvQis0WWQ2QXc5VmVBaThI?= =?utf-8?B?MytxeG5EYS9hM0ZvamdNQW9uT1ZBU0NaanZCdG0xbkxVN2FVMHF6OTFQUjZ1?= =?utf-8?B?clNUSEZzbDl4THpKTDFlYWgzdUpGUVZkVzloK2M3ZkRZNENvd25PUkpGVm5u?= =?utf-8?B?ODZFNEJjdEJXdlRjSUQ3eCtheUxuM0lRa3M3cW5BQUtQVER6cHBZbklOQkta?= =?utf-8?B?WXErSzEwRFpEZGllM0IvbllRWlNERldWNEkxWjhxemJWY2dwV3BGN1RoN0tz?= =?utf-8?B?NmZscElzSVlqaE5mSWtBZnRoZm5UNGFzdkp1NHV3SWxvcDB2RUQ5NnU1bGZW?= =?utf-8?B?cDBHQXl0MTlJTlZCcWhlN1JnOXNNdDhsQ2dab2M4ZUNBWCtxdEZhTTlvdS9o?= =?utf-8?B?Z1A0RGlmZkhzU2MzTGhMMWdmMW5iOFNCaVAxQytKZkFEZlZlOW80djI3dXlU?= =?utf-8?B?N3gwcUxNM0EvVWZUcHFFdEwzY0h6VHc3UWZwRDFsLzdqc3NsY1Bod1JrQnVU?= =?utf-8?B?azcveXdCTWMzSml0N0ZEbHNLZ2xRd1NZNlhERHh0QjFRNlFaQ3dkTmJrMW9R?= =?utf-8?B?M3Y2cXlaV0NmUGdnRUdGSGwvZ0JrVklGYlA2R1k0WmNVL1VLT29vK2ZqeSsx?= =?utf-8?B?QVByUjUzRkMxQjVoMnpoMEk3VW5GbzVsVHJ1blNWTnV1cEszcW9uTjlrUEo0?= =?utf-8?Q?f1Le/ch1zf7+wAdS6/yTRQ0Uw=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;6:7cK2O1CVHRHq6lZQq4doY9ne5D/EiK02RuQvFUSscxOXK5N3vZKz7qTKc1aS1dO+e1fIxgCHdBDmTEiG3qM0dckC8EbPNtvaLjVyA1PbbDiUoIX7BHYLldACUSah1fwcH4yHYqXV9b02gAOuSlHLIwgbg+YyPczelb8/s3e0wLiqKOdfjEHGx2OtYyunCQkpUf4V7rbEkNbUpiwlr3mvtoyS7S5ekFSr+SbU+Zm0r221TgdVvzJYHYk2PxbkG2M+venyprJXQ8bgc9GyC1gP1kqlhdAeFI64L+tEeBTaOX8jiVU6dRSagRsgdFmUeDsVhon/8g7lfVh8AIgrPJJfxw==;5:eepONllsxdghBNiAELUO17I+4v+NToDz1pWFXb6ZE2Udmx92qScBiCQbe7P98cugMRH+PifJTOJeduy10YTsRFxT75EbgitsMn9USowlujTEas56GhL9EW2SAB/BRCF/4vv4Xa0k+4hcmuqrRAjumA==;24:nYfc8yeqS0Xp/senCmNBLeDf/xhiBPHa71AlXSCg1w12H2HwrhePjQY0SPr7nFZ+EK2B8P3U04FijJCK4RVEMjqbRtoxrGgydWMRKOvV9Xw=;7:fEjEbCrfv/MKtJnAZGCmJ+gG075SX/7LC3mIykyl3XGTKBzByOcpWu0k5Te+ZLZrNy0RE5d2z+LqLDUmlITWvdwHvBLWN78RSl1QXShne+bVF4SFSzLoGAL4tM31Ybzf3JyOMAYrqzav9NoGGU/7aTw1t2COGHYjkvRZeuoAQFiUWFLl8v8f2DmaCuTBoIa7dkoa8l4CmJBe3zADkYuA6+5DZgjcXZGg/JwoJ9jPjok= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;20:+294gmRe+VsQjKlacs3ZVM67wxSxtpUhUkvwsrEiB+6CKREKnSXlF1hEmB32egkLmC8r18trfCn9bfUFqy34Wva83B5VVV5CWQnk9eCn1w3J1Zj/wffy+zKHEkK8l112LAyFG708w9atoEj0q6pIP/aNq1Ml4S7OvIF8/9y+ilqVYh6t8+mk9I3NHOg51v30UI9vqtDWxdESmdKBvCMW+w4abYbvOWlSvJtJ6cVC08kSmLluEX+cPM7PVcxWqjSF X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2017 13:17:14.3194 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0150 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On AMD platforms, under certain conditions insn_len may be zero on #NPF. This can happen if a guest gets a page-fault on data access but the HW table walker is not able to read the instruction page (e.g instruction page is not present in memory). Typically, when insn_len is zero, x86_emulate_instruction() walks the guest page table and fetches the instruction bytes from guest memory. When SEV is enabled, the guest memory is encrypted with guest-specific key hence hypervisor will not able to fetch the instruction bytes. In those cases we simply restart the guest. I have encountered this issue when running kernbench inside the guest. 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/mmu.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index eca30c1eb1d9..2bc0fe84aca2 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -4953,6 +4953,23 @@ int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t cr2, u64 error_code, if (mmio_info_in_cache(vcpu, cr2, direct)) emulation_type = 0; emulate: + /* + * On AMD platforms, under certain conditions insn_len may be zero on #NPF. + * This can happen if a guest gets a page-fault on data access but the HW + * table walker is not able to read the instruction page (e.g instruction + * page is not present in memory). + * + * Typically, when insn_len is zero, x86_emulate_instruction() walks the + * guest page table and fetches the instruction bytes from guest memory. + * When SEV is enabled, the guest memory is encrypted with guest-specific + * key hence hypervisor will not able to fetch the instruction bytes. + * In those cases we simply restart the guest. + */ + if (unlikely(!insn_len) && + kvm_x86_ops->mem_enc_enabled && + kvm_x86_ops->mem_enc_enabled(vcpu)) + return 1; + er = x86_emulate_instruction(vcpu, cr2, emulation_type, insn, insn_len); switch (er) { -- 2.9.5