From patchwork Wed Nov 1 21:17:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brijesh Singh X-Patchwork-Id: 10037191 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 26BAF603B5 for ; Wed, 1 Nov 2017 21:18:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2445728BDB for ; Wed, 1 Nov 2017 21:18:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 177B328BDF; Wed, 1 Nov 2017 21:18:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7D55028BDB for ; Wed, 1 Nov 2017 21:18:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933663AbdKAVSA (ORCPT ); Wed, 1 Nov 2017 17:18:00 -0400 Received: from mail-by2nam01on0041.outbound.protection.outlook.com ([104.47.34.41]:43936 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933625AbdKAVRw (ORCPT ); Wed, 1 Nov 2017 17:17:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=cujqGzW2f4LMk+Ulnp0X0IGNQNHg6fgWoCHTuWCpjwY=; b=UHV9t2Vo68Jf6DQuI3i3PYmJ96pPbFzUSc2RBrm352+IYOHfKQ4iEa4orINdVdoxPUDGbnJAJQvtFQUzbaX59dvlJpryu4KRieTdpkGGR++DrC88xbfpfeow67FYs4S+yWc9ugLnF0wWyork1/npyUE55N7EAHYwZQOSDdP5UuI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from wsp141597wss.amd.com (165.204.78.1) by BY2PR12MB0145.namprd12.prod.outlook.com (10.162.82.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.178.6; Wed, 1 Nov 2017 21:17:48 +0000 From: Brijesh Singh To: kvm@vger.kernel.org, linux-kernel@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 Subject: [Part2 PATCH v7 38/38] KVM: X86: Restart the guest when insn_len is zero and SEV is enabled Date: Wed, 1 Nov 2017 16:17:23 -0500 Message-Id: <20171101211723.71594-9-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171101211723.71594-1-brijesh.singh@amd.com> References: <20171101211723.71594-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: CY4PR02CA0025.namprd02.prod.outlook.com (10.175.57.139) To BY2PR12MB0145.namprd12.prod.outlook.com (10.162.82.18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 57132b7f-a6b0-4f7c-c43e-08d5216e017e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(4534020)(4602075)(2017052603199); SRVR:BY2PR12MB0145; X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 3:7lL8vNlgwRz4khXbgBBvjQho0lmpMe4cHVzwU5Mpvtibzckm3Str1VNq8+1hwOrHXvlMvdLO44SaEsE+esjT9XqtorzAs5QzX/96PQyuJnzfrjqcArbDdhq4KSwTTCdF/uIcUywqXF+5vubnsWBj1ycfLFAKsTXuGm5xQJiy9OHsqGI0pYMWys9ZaZ4HVOzjH//IZDe0ewgcQ/iFPnwaFvgg+T3zoo05YdPYaRJQ/v+Z5lFqx2u+Wl4GivRwx96g; 25:WJm5ZVoF/uvWBironqtVsmWQJ4fVz7qNrfEqjfyEgZtNHE8JoIGdcHg1ONkfCDTkewXKNZAGMJkLBDgHzAL5wqtCXn9MCXjDUTcOdNVBedcIoY3RIe94kAA7STGYWlw9cC2pNFaRpZAtt5+dfIaBxxiTCPlvI94K9saK9D6xn+w9N1fEYebJ7g5JqaXILSa76EZ1DLqeMNHMU8zEVU3M3+yCRd+2Q/s1n1+iBwBOEl1K59WGFjaxmOIQB6vzdvppL1hTO0n+OvAhuOTMeVpmtmI0sBIb9dfrbpOiBX2epTv3VSCKFMb0aJZYpQOUiQRFbxVYaE645dBAYO5B/axCOg==; 31:iFssgFl5yLfky/n/KnY0UgUBLUNcFqwxd+HJIEiwedrJZ5nF2751FUlLOrz0rc/ZL4qcRNwncG/gX2y38w7RGQ0S/1aD9jv5x/EHmIc4riRKYdOjouau2CpzOmQoMtnuNGygJrpb5QbQzKKIARHAsj+vij7es05o2zomhEAce4nFMCkhJ6wEUOpXmQxDhjHaP4vDm/HUi+fYuiw86X+Dtm+EjdDj/iQ0W5EcniYG/YE= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:4dAKb5u3Un/rvKrDw4E5+W4SFybUO9etNFj0WCdv9FxX0UZu1XdMSHO8ltaefOVwmCsAKL/Vw4puE1Vhs0O1B8QZnqhmLnx9hz1FGPOWK+GyEUKDQFYKyv1QIZNDlhUkR7p42uM/zR/iLDNn7XYk8oX1YBXKcAnCWI26VmrtMwaAMEIbwqwfjqmIdyaBMf9GjIeZebB+vaXaupnUZm3+1/MvV/QrjsxBjrJM917ifrif2B03W2YM/KRaoNuEfp1gX5MYjPoT0ZBK6nNkMX+UePtSrw1IYiKbh5IAobRYHZQ+WykCjYrmY7JJ8UfyRvToJpFqf1v9ejjKWiIvGskAbbMcV41pv3oGoRzIC2wvvXQc4bwiLBVoUGOukDcXTh6/BVrTuuvKXEWncuJWmQoGX9xB6UJHvs2PbEieb0e3gG/Pm4kp28i46N3nqwSeZjnTB6H9H4pNfLl0AedVa2zKB/0p6fCsB7bma4i9vg7I8pxz9HwqiIQTkMK5EY83zZrh; 4:3iPkhjZNB9YCs0bc91vRf7KTgwyAYbhBDDxGPJtscuEl2t//oRfaiF4jyBMWD7N1YV7R0YGLaj6BvkDtqS9t/d3idR1yblOAHgc1czl3vYEF5iJiEqnkSe8m7uc7XZABpsbo77KsJlTXediSG7fhwQnGyTJxSV85DtSJXV0eY/KHdLysQ953MxJL2E0doDzJdk09Mf/u1IUiyucsfQMYE+u6QzgG6Y/SlLBsOGKC+oMu6OWUGtklWVXllFhW3kyNPP1FlTMbWHNiTCSE+51uoDot7WVZr2vx872xABGoXogQEEfaRxRAVMGFJaR0DoYgib/ANTVlTSxiy9gbryHfJKrfPBiHcCOEYuuNiQF3q531etp/YccD9PyUkDS6aKEE 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)(10201501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(3231020)(6055026)(6041248)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR12MB0145; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR12MB0145; X-Forefront-PRVS: 0478C23FE0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(346002)(376002)(199003)(189002)(23676003)(25786009)(2950100002)(4326008)(36756003)(8936002)(81156014)(81166006)(8676002)(33646002)(2906002)(68736007)(2870700001)(6116002)(575784001)(86362001)(3846002)(54906003)(97736004)(1076002)(53936002)(50226002)(316002)(47776003)(50986999)(53416004)(66066001)(76176999)(50466002)(478600001)(101416001)(6486002)(105586002)(5660300001)(6666003)(189998001)(106356001)(7416002)(7736002)(305945005)(16526018); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0145; H:wsp141597wss.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ1OzIzOkNzTzJtK3ptcjJ3cE1IemdTUHlQTUpQRmJT?= =?utf-8?B?Z3ZUYTZrSUxFdlVkclZsdm5Vb1g2U2dIOEZMNXlHYkYyNmZRcjl4VkhJQXMz?= =?utf-8?B?am5Fak5JSzFYNnZmcDJQZ2VsTmVUUU15Zk1uNDVScmZxWnNHcDl4K1A0UFFR?= =?utf-8?B?MDFGQTE5c1RqQnp5dG13MVNydC8zMDRJWnM4MFM4cHk4eEpja0RKcW5CaTBk?= =?utf-8?B?ekZaSWxKanlBbXd5VnNKQWtLMXhrY3JzbFBwR3htZlFWUzdSajhqQk1nMDJK?= =?utf-8?B?RmtyTm9CMHJCZjZrWUplekU3UkRCN0VVeUIwc01LcW95Zmg1c1RLK29nWjRR?= =?utf-8?B?bnc2ajFXR3ZMa01vTVVOYUd4cG5EaXBTNzR5MHNTTzJkbXMrN2lYVC9mdk52?= =?utf-8?B?N2dKU3d5eGYrY1ByckVyMzVza29Edy9xL1RuZnNkZFgzajlpdVQzU1dta1Yx?= =?utf-8?B?TFZHZTlRMGpqQjd2T3lOV015WjRZaktCL2RWUzlJRjZHRmVsOXpPb1RDdXlm?= =?utf-8?B?cXd2OGRndTNkNXhtVTJBRUNBU0RwRzQvYjNIZ2Mzem9iNzg3WnlQME1lL3Az?= =?utf-8?B?dTR6c2tFSkxpSGpTMkkzQ0w0QnZ6TG5Ib1MrMW9aQy92QnhnZ0NyWjlFSHBE?= =?utf-8?B?a0Y4V2FtRDJEV0VnYURzbDVRemR3Sk1Pak1ONUdaOEZkcFROTndocjhDWUxM?= =?utf-8?B?TTA5SSszSVY4MlN4b3cwbm9DcVNmMGkzaC9yZDBrY2tEaFlENW8yVTJYelFv?= =?utf-8?B?emcxTWhJTTU0Yzl5V2RuWUlYZkZKN21kV0tKNzRYZmhEeWVEUkFOQmN0Zlo1?= =?utf-8?B?OUFOWHg0V3VBZWtvYWI3OVIzWmRxdUhxL3l5bGwwdmZmc0NNek1xU3hwMzIv?= =?utf-8?B?REpTUXdFZU5haXJqTTVleEhZMnVVTmdYME5NTTlXM01uNXFNOGJ0U0pxd0Jy?= =?utf-8?B?U0Z4ZVBMeGFWdmJJNFFxTk5aWmFrSkZWWVdUd2s2R2RPaWZPV3dLR2VGUy91?= =?utf-8?B?bmhLaktBVGFFZG8zbHN1b0VGT2U2LzU3N0VPUzFKUzJadThnU3ptR2dOVGtG?= =?utf-8?B?eERFQkdhMnZlSERQRkt2NCtPM1UvTk8rTGFnVld4TERwK3lUL1h1b0N2VlN3?= =?utf-8?B?K0Rvd3lPbk1rTmJIV09abGsxa1g5SXhkU1N4cGJ2QVZEdWJCVlFEUm5Ud2tN?= =?utf-8?B?TllDbVZxZmFUNlI4NU5NSnhUTGNjdTdXSkY4Tnp5bEgzSzFsaXFiZ29Bc0pK?= =?utf-8?B?b04wV0tjVXF1ZEVlcjJJeHhkUGE0TFFJbDNlNGZVeHhkVmVSdEFaNHdwR3JD?= =?utf-8?B?Ylh3Um1taEdXa1lISTZ3SEhQMmNsWE9tOS9pRVovRFVJTW9PeDkzWU9EWXI4?= =?utf-8?B?UnRPZVVjOWxJREFjZWFScnlVZUxjeHB2OXB5M2hkczJxMUEyRXNSakYvN0tL?= =?utf-8?B?TTh4b2NXRnpmTjc2c3JhWktiVFhIZStEckd1VUZ5c1g4WHZtcnNIVlZ6Zjlx?= =?utf-8?Q?xJYvs/eaC7klfKN4cDPS3JNLU=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 6:ACbyLsjH4q/lFJ78LpL9wpz1BBOdXIQTxQPHAUnkdSN2p+Z8WwDrNtCTB8J+07irzFsqxZvISHxKjDvOBmC6Yi/KNRDk/r8QVSIGew1ame8IAal0LjHiwVe7fx7+KPNOrR6UvorI5gD6Bdh+FouonZb4RKNOTbaLK/S/qAu6yrrE0FC7Io69GSCbNtG8tWoiO0YzDxNHAM/ze/+kNhqCWc3NcJRmiCeku7k1shpjq9Y1s050mKlZ/MWi9nQBep6BzMrAUj47rsDzFCYuTzrwIPGYuk24nX5UgxUWL4ZC3tlSVa0md1q5lp1/zqHaNtpsxOcPllZnl53MSllDo1RtbugFMzVwjGqD3a9AohrcJow=; 5:DvCluDggdazzAKOz1W0ORAy+JIQ3tIXMAYl1j6am8A5N82fNgmsb3AeoFMnmsKUyKkRuUhzYwT5UOnKiJpJSDXDdgB09a/C1POutVtZhGVX7jF7sKfX/YI4ZnCJeNUIUaChK+KmMsYxPeQ7QicUOJhs5No97rZF0273r+ROrEhg=; 24:G2Bf/VYRyaJFiMAgv6NA0Lv1Q1fgHTsI6aIhJfjmseaBoXYs5xY/smixe/0Lyr5aJ9i7X6fbiQUlM2yFOQbZA1syUO6nL3K4JUZTQH4XBeY=; 7:EMrddMLrg2E/Ngpvdp47OdpKuxMz4P4VxusMQdzWD/lFYB6DVTFcIcd8IE0c4/reQwvuzDS2EYYtg+7d+yi5zQ1mr3I1CTMBqMXKMF3wqFZpAepTy2x0ARsdBn3RssYuF+bqgBrzZ7hGlo+qzg9RXFz54Lab0rVMe/IQdPn5alryJtvUJV+H6RrrJpNofPCS+tTzeYIYNrC1MY3uGhxSturwVlwbkOFgyRYMfDnp9p5k3ZKMUdrqS5Nl/bEkZXpn SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:4zF8q7MHPG1nXrn245m7fRIF7euFkznIJig3pfGfkx7aILRvIHmYG8b21ep9lUtlKtNqOoVTXFNo9W5pKxam1qdauvUqQIDjSDv4seqWUye6Arct+BLg5qDjdi6cllNstnq9B9v55RBgVcTfxUMYBnw1vy2LEV+Y4CzEZfVB3fQp6W4fryDu0unsjP+g4g3/t9CKdzB6zMhsbJ2wlJFyO3rsKH5TYjplcekLt4XuQxGzUb6bVdb/bNLLKQE+SZFy X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2017 21:17:48.7841 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 57132b7f-a6b0-4f7c-c43e-08d5216e017e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0145 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 | 10 ++++++++++ arch/x86/kvm/svm.c | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 7a69cf053711..0d4776b855bb 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -4954,6 +4954,16 @@ 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). In those cases we simply restart the + * guest. + */ + if (unlikely(insn && !insn_len)) + return 1; + er = x86_emulate_instruction(vcpu, cr2, emulation_type, insn, insn_len); switch (er) { diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 29c30ecde780..3299d0d2ee1d 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2410,7 +2410,8 @@ static int pf_interception(struct vcpu_svm *svm) u64 error_code = svm->vmcb->control.exit_info_1; return kvm_handle_page_fault(&svm->vcpu, error_code, fault_address, - svm->vmcb->control.insn_bytes, + static_cpu_has(X86_FEATURE_DECODEASSISTS) ? + svm->vmcb->control.insn_bytes : NULL, svm->vmcb->control.insn_len, !npt_enabled); }