From patchwork Fri Oct 20 02:34:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brijesh Singh X-Patchwork-Id: 10018625 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 6927D60234 for ; Fri, 20 Oct 2017 02:36:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 501C22883E for ; Fri, 20 Oct 2017 02:36:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 44A6B28E89; Fri, 20 Oct 2017 02:36:46 +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 A2E5E2883E for ; Fri, 20 Oct 2017 02:36:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752434AbdJTCgQ (ORCPT ); Thu, 19 Oct 2017 22:36:16 -0400 Received: from mail-bl2nam02on0071.outbound.protection.outlook.com ([104.47.38.71]:59884 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752297AbdJTCgA (ORCPT ); Thu, 19 Oct 2017 22:36:00 -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=2EgRTIIlPaPq0u66spJmuLbspov6bh9Je2AM2tKGfBk=; b=TnqLTBq6E+xIKpXPzAjsrqYvCiriRffsc0YPRP4+7Y657428sKRhjdpSP/U05gGznDy/lTQ4zD8UuupmNKJjb3kvRXif+KXsLCcUGilszONLZO44WJOOyX4DYygSMOIlVATeh/sqhSuRxLBcHlTj0jaBN7Z0uR3SXuTtL4M/Sg8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from ubuntu-010236106000.amd.com (165.204.78.1) by SN1PR12MB0157.namprd12.prod.outlook.com (10.162.3.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.156.4; Fri, 20 Oct 2017 02:35:50 +0000 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 38/38] KVM: X86: Restart the guest when insn_len is zero and SEV is enabled Date: Thu, 19 Oct 2017 21:34:13 -0500 Message-Id: <20171020023413.122280-39-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 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: 0178cb4a-fc3b-4c5a-f459-08d5176347d3 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:GQ5/8In/JiVDXc8Un9Z/m5IxV1DCxy2fTtaYMGoZ/WjwvaVegxHOzVtEOhX+5h8W/2u4Lo7oxhPeLIebJHb+BGHvRU3RC8TYMYUtRg2JYexz0kFiFRcUzozefcQqpDtLsAC74LAzXVjCms6MGS5Ob6gr0WMTYhfg77Y/8sgKEXf2F+RWn0AAonqkFQkbJDVV7Gb7DSE+MyZpN5Hj0DaHq/b5KEEYLudb/zc67CagN2taUuLGDs2cRH8MPyRd3tNJ; 25:+9iPJgG0xvzfgIqA2tSfmRxEYKQgpAbuhizJ3z8z2rp6rsIOTelhhOZNPt4aB6stCZgO7yT0oq/YEwd0Sq6p87bCRvpRc5GKdMjcaa7KR0MUgagYq4flXf3jBlpUV3vCEc6PghCJFhMiJVcluC588wo1RU1tLWMo60KiLN5/0rQmkxhrzYFWfhG8O4yvV5LE/pOXGH0auRQ4IRYuO2kPpNWJjI7RXkaG39jdxz2UWnVAyRsptZLeFxWtXuo1SdhTpzHWh8YhNKsxWxshUODFSggs2iEvcLNk1c7h7dvgtIsf5W0A0m54VWh0i42OKxGfjgx1lgpoCJURnplH2m96sw==; 31:iHqx521g3jS+6mgf4MI5dgSpN80naT1oO9IRqOP53qJvlhs/InEsVDLMIaChqWYlh1l0aXVxa0JyuUtn04jXVy8StEHi00dWqGIL04UoNUe56agWvTUXdoiSVJcBYpYp9NJotvwHxPpFqIDToqwsnsA+siPTSeYp2yQ3BdC82lIOq0DG2hZO7a1F+HRXd+TQjoGzZrYFm9coiSG09y6tlxGMRSjzMRq3GD/jmBeZOBQ= X-MS-TrafficTypeDiagnostic: SN1PR12MB0157: X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 20:9LG24SIZpnt58KYrwz+5jkLGqLnG5cMljowMmMRnTvRdmSqrX9snN07sHCToP8pWcM3toTm2ayumCqAHOuu1UmRgQqi0kv2z+nBxBHQrR3WpH4PT6iu18+FOE8PekHyU6b+MlfGTlgO/xpqJB22/PR1NaicZkEtfE0/EGriqsu+AcP6MsVBGx1EFdZsH2MDGQWEzQ1tCQK88BZ56KEKVkxowlpQ+vBvhP+34KziPNo/YWZfcZd0Km992hekFJWxNMTQAhcNu4EhNF/Lk9PJdhxGNi2Ewcp1vj14voH8eYtMfThD5ClT+El0JX+cZg+tbJlCBHawuljSCk9XSGBEYzkPlcviXMp7lfrQ6ia27K+auoQgLqjdAXXcnHaUhyJFUj9Xf2l5vJVpnBtSNCBqXirPheRHyNJ+uJKLC/M3rjDEzF/xXm9A41azsvAvcyApik2Xu8+OoRBUp8L9DviMcs+RPhdsyaB6Hy+XP6gqs8cTnPV4WkcaInqGSM6UY9kdU; 4:vwZaKVh83qvxfktJ6dNJw5QwTv0bvOFIZ4oeLYE+wpEC4yJDMTmkj6uw7QItUt0TET8WdfGjWGhY7npPYYigqtW0ChDlOi1MbV5+sXFUyNFw35iCrUrnD2IvoeJQzdm12c1d0qtmYNJpm/+U9+OZS+i7/Xr1v8cUwnQX1faKtg9JuY1kn754MzmvHzoB8nuHkwg+EyX/tvYEu4qmOli/Csi4PSMRlEsd5hZTcC0+l1q3qRWXKTh/VVzMK7l1F8O5J/bjk2NALiTr1mI7JK27vP3RYxXEFQ2dJeIAzlqHpZzHAf79WkJ3wMlrI9SRtJnkY5s5/7hsVEM5W/7FsbR4dHDZRcmkNc6FZUZVE18rE8M= 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)(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)(575784001)(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; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwMTU3OzIzOlY5SUIzU3FzSnB0MEt0ZTBkYTlNeXdlQ2I3?= =?utf-8?B?Q2N3bmFmeC95QkNXQUhzT3hXUnMreGNTRzRnWGZxQnVEU2FDWUtwUWpzcjNP?= =?utf-8?B?UndOamlHNGJETnYwWnIrRENUWHlUSDVzSnREZCt5NEY2VWxxQXlwR3grYmJP?= =?utf-8?B?OFAwSldtbnVvMjFZejBBbE43WVAzSmRKOVNCMzFielVXbUFWMlZ0TkQvRy9J?= =?utf-8?B?YjhFbHVGSjNGL3lMS09aQlZXS1B6QjZhY1plSE41aEd1dEYwQ0dTYTFEVVE4?= =?utf-8?B?WjBwemRlb3NadmVwM28zQ0pxK3R1UU9USi9JZ1ltOTJISlZNb3hidDhXTk1T?= =?utf-8?B?NFNlSVJ0dWZZMno4RTNiVXkyTDBGQlRzVjlsWFR4WmN0aythNTFvRml6RTJ2?= =?utf-8?B?UURYaDA0cXBlVkMzR0t3TDE2L25QTWpwMms0cDFCd09YanFiZUVSNGFsZEc0?= =?utf-8?B?U2pLVFhKb3BFMmtEMjFFL2JSaWpHaWpOaURHT29qbHFjRFBIT0YzRm9yaU4y?= =?utf-8?B?enYxWWtIRS9KZlZGVHQyU2FKNEVNbEU4VGdZdWdKbmxzdEI4K1JGRjlzN2lE?= =?utf-8?B?RkhYcE54Z1NsZE4rZlg4Z0xGbFdJekFZcVVnUGZIYVVZc3NOT1NyOTRjR2xn?= =?utf-8?B?cCtybzRTdlE0L3pUdk1PaklHYlVHOWswWGc4aWJwQktGOVI5eVkzWDBzTHJI?= =?utf-8?B?bGxsWkJ5Mit2SzBhb2hTTDB3RHV1S29BNFFiNFV5aVNVRExxZXNQalNEQmlN?= =?utf-8?B?ayt0aFhna3NIUXdPK0Rhc0xhdk10VEtQSFVEL3NJeXVBSFdrUXhOb2RiUG1O?= =?utf-8?B?Y213SmJUSHViRS9WcGVvQnlrd2I5bHFUa3lkUDZGL3JVT3J2SlVIb3lCNE1B?= =?utf-8?B?djdzQ0FsTldtTDAwVi9JaHB4R1daUE5yMDJWM05HYzh4MGZkR1lJNHdtVXl6?= =?utf-8?B?T0RHQWxhY290YmdUL3h3eTQ5MStMaGtMWGlZZE9yT3F6YlRyOG16Y3VKMXJ0?= =?utf-8?B?Y0hmcndjd0pTYWJvbTJPOWFKSVhvR0VBRE5mNDh0SXBkT3RRTjdUSytaSEtU?= =?utf-8?B?VkJEb0hEOWVLNmNEWThjM0N5d3lNemlaYnZUVWkrcFJoaDBSQkIzL3lwelJ3?= =?utf-8?B?TkIrN0cxNzgxWUUwT245YlVkbktxSTZBUnh1cHN4WkNtNS9ndlhjZzloYTI0?= =?utf-8?B?TEEyMXhIckpEMDgrUmhHaG01ZnowT25NMmE3cExGdjBhVXltVHpKYnBLQVBi?= =?utf-8?B?SGcrcXBLM0N2SDJNRTM2bWNtc0xIaC85MC9GS3JsNWVaQmxseE9USElnWmdh?= =?utf-8?B?OHNnMTRITDdpUEZWbTlHcFVUL29JYlNJUkNpR0QrRFdHcFpXcmhEK3dpOThM?= =?utf-8?B?R1dURUxDZHdFNVRoNmFpWFAvZEpTUEtNM3Fua3ZQSWRQQk9CbUJvL1VRTlZW?= =?utf-8?B?N1dxS21TRlVYdUUzTlJEYVBFWEFRZGdIdFd3UW1TcDBad0hZdk1CS2Fwbjdr?= =?utf-8?B?ZDl0dWFvWWRJcDNIbTVNTVAvK3lJT2xrYmgrTEliZHZITitZVmFRWXNHdlZH?= =?utf-8?B?QitlWGJ5MWxqalpJRVpWS2NJNWlLVHc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 6:PnUF3OWqavMnJ58yH2kGg92mR0yDb0GJzYOrKBsxmxqbZnpXL7lLRNglsON9oSCXnN+2qVVX7a4+KVZ5f+tBjg+Cojhhqv9wlbLX30iT0JLeCm7zilSaKOkuSKT/tlUCSzrPSCwLScjPJMSqZdKgzzkILI79FORGKyKqW76tNyUh5i6L1Mf5UIV4IPnNzbfzMSXdUbzYig8RP/rjuINOywAu+JMESnXoMAfooUIB3D+30MuOcXc+pM+QVQKKBpE6gXiqKWho41sZIYJjveahcKcT4XZTXCLTYNP1XDmG3bwuonkN5gsuMn9+rxxy1dCVkcCr1UEewHs8xDe/cR8ltw==; 5:SdZ6g/5ay3Spi6q2fMCHGGDwwp4GfEtgpIT0nJuWg9hqFFwDeuTsLSQ/4AnlC5nuU54Wrmpa357Q6Anz0g5kap40M3S1ooSBKHenODFF5cbfPv6wl2ot50KNMYQ7MU2g9mC+dUQTZigxkmTGw6PzDQ==; 24:YKYZNc5C/ygX1bgomgqQzftuwsm/yyT7jcMDRbSeX9qZ1PvqV30BOjvR90njlxj88rL199MmMoeAljrjIxjvi/dzNJb771G3SrQi3GYBeOc=; 7:vab2rYuisJcfe+lD6CvgrJZMMMICN3adRJnrzsj8E8C0CdpD/GVUKlA3stIYBRiz3B1+O5OeKp2QGTYv7sFsCEZHaQwbaC//fuKkZGhdHYPiQVZNgCRBm5uYRWn1twzwe5WYXJXyxLhZU6oPFBfk3wch3tuIkeyGFRK09mic9HBS6pQsb5LTh6E+DXQwdyPk4KcgcBNE3xGPGIkYAl/Jm6MxIlX86xDKed79q73cEf4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0157; 20:PZCp5UWAIH5ccKjDbrcRGC2g6dzPZZ5L/WBrqe8z3kTUySA18hJSnvte2EkgfBdcI5WxVu/frIwmLMFRtUqK6c+nP3TKUndbpaF0C6bl67zxRHkZoF8xCvNchf9gmwFcch2sZOsEfkT4A3EquXCR2TDxAsDvxYxrASfKqAf3vKEtyrsIFJWgjYsEPEtcWTyB7DNy2PF44N0/SgnacdP1H0CiVFVm74vK1DasSDd6ZtSC6UUMZUh0uXsr132kM/ma X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2017 02:35:50.0035 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0178cb4a-fc3b-4c5a-f459-08d5176347d3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0157 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 cd0a94e12c2a..d6e62d41545d 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2409,7 +2409,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); }