From patchwork Tue Jun 22 21:00:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338603 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94501C2B9F4 for ; Tue, 22 Jun 2021 21:00:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 77A726108E for ; Tue, 22 Jun 2021 21:00:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229629AbhFVVDK (ORCPT ); Tue, 22 Jun 2021 17:03:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229501AbhFVVDJ (ORCPT ); Tue, 22 Jun 2021 17:03:09 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D7F0C061574 for ; Tue, 22 Jun 2021 14:00:53 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id 44-20020aed30af0000b029024e8ccfcd07so516793qtf.11 for ; Tue, 22 Jun 2021 14:00:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=8yKH6rVnVFgj2jFWvX66nVJHYzWTfB4k9pf2/C93MtE=; b=DDFs1peMNW1wuVIiHhmna2BbrolwZ/I9Y/XZaHgZJH/Qal368vHng2oUuI6oVEo+SJ VksCCq99IAmBc7YAsAlRhVPXLwJinUupKPLBJhuj7gnO+AOjdTBNwT8OF2/9y9rnk3xS zKbwLVxw5xbiCxc1pBgieroEGpAreaPNK4RNqtrq/GJxJrTakhxqAyjWez+d/aDesD7r QySAmM6THYn2tQjRXdwF3ux5yZMFRu21EaVwkhGJugiZ44vjeNf+L7t3NXCqFnQ7661W /ilC2sk4bgrdheiieNi+cpqx9O6ai+h5059aMpcAwM5SGVbU0Uzr7UCHYQfGEAU6jQUE k+3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=8yKH6rVnVFgj2jFWvX66nVJHYzWTfB4k9pf2/C93MtE=; b=gaWs7b/qGulK7GsZ1oUik+GU2kQoqt+FWWz02KWufbJ7NYh9zpq1gmAaxIG0hhQj92 CkdXoO6EeAvitqlo7WhyFI/drzKs+Qq6WY/629IqfpZ1GWkeXpQBbjADgplxl4o3UNIJ FnH4wbEI+LrJMFwE+Llms5nqzVesyg7brEzvQksk/ADd4vbQvLM+7KFfTqghj22Cp6G+ 7yS1VE7yahQLMWzZeMivEJ4xflqPAmzNPDygiQMcAIgf1smxonCFWCfDNmA1AIG63Fl8 +8pBSImJTh3F7YIx3clvQazxMpry9wi9WXnEdfi16DRETEXo+g7OZ7HrjZCj1T2HKEzh 7ZZw== X-Gm-Message-State: AOAM532zYS7p0eHcn6BcfFR7CxaYbxZ/x47o5okB7ixIG3hPHoFC3jic hTBCQKE6xs+MXYahphfRgDqPl5WJ/Ls= X-Google-Smtp-Source: ABdhPJwxIW7OCjoi38/03I7tBOKd3y/ABkvDHzYa0XmllIzeE0GK45/h9U6hb1ElYSBgb1srFrOKTijuMpg= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a25:cc8b:: with SMTP id l133mr7666074ybf.518.1624395652220; Tue, 22 Jun 2021 14:00:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:36 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-2-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 01/12] nSVM: Provide expected and actual exit codes on VMRUN test failure From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Be kind to debuggers and include the expected and actual exit codes if VMRUN doesn't yield the expected exit reason. Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index 2c85a30..df4c60a 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -2186,6 +2186,7 @@ static void basic_guest_main(struct svm_test *test) exit_code, test_name) \ { \ u64 tmp, mask; \ + u32 r; \ int i; \ \ for (i = start; i <= end; i = i + inc) { \ @@ -2203,8 +2204,9 @@ static void basic_guest_main(struct svm_test *test) case 4: \ vmcb->save.cr4 = tmp; \ } \ - report(svm_vmrun() == exit_code, "Test CR%d " test_name "%d:%d: %lx",\ - cr, end, start, tmp); \ + r = svm_vmrun(); \ + report(r == exit_code, "Test CR%d %s%d:%d: %lx, wanted exit 0x%x, got 0x%x",\ + cr, test_name, end, start, tmp, exit_code, r); \ } \ } From patchwork Tue Jun 22 21:00:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338605 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15ADFC2B9F4 for ; Tue, 22 Jun 2021 21:00:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EF0C761153 for ; Tue, 22 Jun 2021 21:00:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230002AbhFVVDM (ORCPT ); Tue, 22 Jun 2021 17:03:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229501AbhFVVDL (ORCPT ); Tue, 22 Jun 2021 17:03:11 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B045C061756 for ; Tue, 22 Jun 2021 14:00:55 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id a193-20020a3766ca0000b02903a9be00d619so19561645qkc.12 for ; Tue, 22 Jun 2021 14:00:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=2WwTCe46deaikUhVyu7Yq+ukrkAZae/spD96bptegqA=; b=JKw0cxJMszWEUTNKrji5Mr8+2gGfpeAvwpp8JRE19/TCx6IGxClmo0UDmE/qioVUQq Vl1PcNqiUEKuJHNLHaCegMF1fsG1BdD8VnJyHMlZQ3PbEhtQhbJAixA38GdGeiqvzh2L hkur6v0fg4ZiGhJT/zSeqQqH8Yj4xslxwRTHhU8uf8lvH4bTmXzx8TTMewJRb9fGCPly 5wLpHJRWrEQL+VFdw+yIReaDQBAYm7dga9r1aQhDHB4Q0ugGReNyvecCKoPBlO40jqii W1J7U+UiScsfSzkqjIRoXHzXbE6jAFZAk111ioICCtu8oTuRhjPUPquGTQiOkMkPXyKy wjpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=2WwTCe46deaikUhVyu7Yq+ukrkAZae/spD96bptegqA=; b=PlKOVghM4ytvmLdritLRIoK3gWE3Z7/V/VEDXSYXT1Ybn8DbmqSo+sgUuDKKU29rAW SGa+mSpugut17Y027r7+tOY3oazOjqbIGSgCvR78aV7hxmFal8QKHgzSf4HW1NqOhXc6 YfGhY5iRAX0C9aKL/NFWHLijyqc4bkZOxpQclhn4Mk2UWgF4EyT4K1TzAXR/z6Ocl0PF vK0+CztGY2teZd3ctNdocVzh3yglV0jqYmBO1CqOXh667JUiXaiQ55y82rophnJhKsEh 3qBma3vmJAY/nvcHSfspxDvuNhj9QtZHb/uwjr0k0JNogsLwhiPKta/Qlesqwf42dZ24 6jMQ== X-Gm-Message-State: AOAM5328VNktSFXjLe32orNpolBK5lpwzjSHWgXo5pdqjcOthC1lnLWs 2O7UKJ3Tgf8sOuxz6e2ROSQFAy0iSJ0= X-Google-Smtp-Source: ABdhPJzkbsfKRDObeakk1KPN1XJej4iNTtfa3F51nr6dEmdhMcKrQaSLRoc3MAwFKQv/gNyk3whta00NK+M= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a0c:f309:: with SMTP id j9mr878013qvl.12.1624395654433; Tue, 22 Jun 2021 14:00:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:37 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-3-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 02/12] nSVM: Replace open coded NX manipulation with appropriate macros From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Use PT64_NX_MASK and EFER_NX to set/clear the NX bits in the NPT tests. No functional change intended. Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index df4c60a..4bfde2c 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -707,16 +707,16 @@ static void npt_nx_prepare(struct svm_test *test) vmcb_ident(vmcb); pte = npt_get_pte((u64)null_test); - *pte |= (1ULL << 63); + *pte |= PT64_NX_MASK; } static bool npt_nx_check(struct svm_test *test) { u64 *pte = npt_get_pte((u64)null_test); - *pte &= ~(1ULL << 63); + *pte &= ~PT64_NX_MASK; - vmcb->save.efer |= (1 << 11); + vmcb->save.efer |= EFER_NX; return (vmcb->control.exit_code == SVM_EXIT_NPF) && (vmcb->control.exit_info_1 == 0x100000015ULL); From patchwork Tue Jun 22 21:00:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338607 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97469C2B9F4 for ; Tue, 22 Jun 2021 21:00:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 787A86108E for ; Tue, 22 Jun 2021 21:00:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230094AbhFVVDP (ORCPT ); Tue, 22 Jun 2021 17:03:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229786AbhFVVDO (ORCPT ); Tue, 22 Jun 2021 17:03:14 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3A6CC061574 for ; Tue, 22 Jun 2021 14:00:57 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id b6-20020a05620a1266b02903b10c5cfa93so1371014qkl.13 for ; Tue, 22 Jun 2021 14:00:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=Ep1uIwn5QmrQEMh0BtVDPzMtbSvWz3l8d9EGtBp/iDc=; b=LfQUQO92NITSA9DwKSXDfqpb7/ZFFM6n4Tu8U3zj+rLvVQEKRQ0D/LoOg/oTeeIED5 dR5ThKvHmr6mYy44N5z7m4Ka+Agl6fijTK9T20ZEoWbWXK3PWulmBTRLtGQW7CATm2jU DwqKQkmLsiU3T72bSM71ywq0xm4koSP7SUHwJsU1BL0rP8er2gfIH9Zo5N0Sm7uoimJ+ whe2sY4AmHLnWcCKO5UL9DH3raIctGOVIubBcdjIxqhfeJ9KBpk7QFx7+mA4HkuT8kN1 kbfaFrtIaz54qfmpe0xqtXsVzDr8bDWgPW0WT8cMJr/VQEJrj1+vbyQEaEnTtA02V5Ym F7BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=Ep1uIwn5QmrQEMh0BtVDPzMtbSvWz3l8d9EGtBp/iDc=; b=TJGIJix/62fuwecRQukZ6EA6c87mO9hj0UhZQRGIXAhqRy0PF3isOQjxDGRsglvFbY RHtGCXNJpkE+9EZsbdE4bnvJI78TetrOf0vBlKnBAzWXLxVlaUIMJLS5jU08AYlc2f13 +dIXqPsdjoe9Zc0R4hqKvoYWAsACIEqCQ/aCUiAsBeVPBVhQtSxAJzIAX0TLDezpmUgv pR1Rc2hYsXo/jlrcrvHElt/uiT2+5VrY5FFv8rqdeukTPiUF5Okee+kvErgFHpzqeFV3 XxPByoUh9Qh1hSEI2fxbKhvWh6HnEN3XaAm+OCGb4gdkQXJL1eYhh/mOpnPSY30j09Yo mxKQ== X-Gm-Message-State: AOAM530LlfxH59xDfFqlbmZ/3GP/eB1apAtGRkX3N91XrwUYiHvSobmt tA37WNdS7UUmyRZs/OREtSMDbN7N2g8= X-Google-Smtp-Source: ABdhPJxy5cPv2+EBjljA3Yau315dExAkgWxxN64seJE3tyFbxUrj0b24SLRQC9lyEyiSrBB6H26X7jK/BaM= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a25:6dc5:: with SMTP id i188mr7897769ybc.420.1624395656840; Tue, 22 Jun 2021 14:00:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:38 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-4-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 03/12] nSVM: Reset the VMCB before every v1 test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Refresh the VMCB before every v1 test to fix bugs where tests neglect to initialize the VMCB and end up taking a dependency on previous tests, e.g. looking at you mode_test and next_rip. This will also allow tests to modify VMCB fields without having to do their own manual save/restore. Signed-off-by: Sean Christopherson --- x86/svm.c | 2 ++ x86/svm_tests.c | 13 ------------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/x86/svm.c b/x86/svm.c index 9fbc0b2..6e5872d 100644 --- a/x86/svm.c +++ b/x86/svm.c @@ -250,6 +250,8 @@ static void test_run(struct svm_test *test) u64 vmcb_phys = virt_to_phys(vmcb); irq_disable(); + vmcb_ident(vmcb); + test->prepare(test); guest_main = test->guest_func; vmcb->save.rip = (ulong)test_thunk; diff --git a/x86/svm_tests.c b/x86/svm_tests.c index 4bfde2c..aa74cfe 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -667,7 +667,6 @@ static bool check_asid_zero(struct svm_test *test) static void sel_cr0_bug_prepare(struct svm_test *test) { - vmcb_ident(vmcb); vmcb->control.intercept |= (1ULL << INTERCEPT_SELECTIVE_CR0); } @@ -704,7 +703,6 @@ static void npt_nx_prepare(struct svm_test *test) u64 *pte; - vmcb_ident(vmcb); pte = npt_get_pte((u64)null_test); *pte |= PT64_NX_MASK; @@ -727,7 +725,6 @@ static void npt_np_prepare(struct svm_test *test) u64 *pte; scratch_page = alloc_page(); - vmcb_ident(vmcb); pte = npt_get_pte((u64)scratch_page); *pte &= ~1ULL; @@ -753,7 +750,6 @@ static void npt_us_prepare(struct svm_test *test) u64 *pte; scratch_page = alloc_page(); - vmcb_ident(vmcb); pte = npt_get_pte((u64)scratch_page); *pte &= ~(1ULL << 2); @@ -780,7 +776,6 @@ static void npt_rsvd_prepare(struct svm_test *test) { u64 *pde; - vmcb_ident(vmcb); pde = npt_get_pde((u64) null_test); save_pde = *pde; @@ -802,7 +797,6 @@ static void npt_rw_prepare(struct svm_test *test) u64 *pte; - vmcb_ident(vmcb); pte = npt_get_pte(0x80000); *pte &= ~(1ULL << 1); @@ -830,7 +824,6 @@ static void npt_rw_pfwalk_prepare(struct svm_test *test) u64 *pte; - vmcb_ident(vmcb); pte = npt_get_pte(read_cr3()); *pte &= ~(1ULL << 1); @@ -850,7 +843,6 @@ static bool npt_rw_pfwalk_check(struct svm_test *test) static void npt_rsvd_pfwalk_prepare(struct svm_test *test) { u64 *pdpe; - vmcb_ident(vmcb); pdpe = npt_get_pml4e(); pdpe[0] |= (1ULL << 8); @@ -867,7 +859,6 @@ static bool npt_rsvd_pfwalk_check(struct svm_test *test) static void npt_l1mmio_prepare(struct svm_test *test) { - vmcb_ident(vmcb); } u32 nested_apic_version1; @@ -894,7 +885,6 @@ static void npt_rw_l1mmio_prepare(struct svm_test *test) u64 *pte; - vmcb_ident(vmcb); pte = npt_get_pte(0xfee00080); *pte &= ~(1ULL << 1); @@ -1940,8 +1930,6 @@ static void init_startup_prepare(struct svm_test *test) struct segment_desc64 *tss_entry; int i; - vmcb_ident(vmcb); - on_cpu(1, get_tss_entry, &tss_entry); orig_cpu_count = cpu_online_count; @@ -1976,7 +1964,6 @@ static volatile bool init_intercept; static void init_intercept_prepare(struct svm_test *test) { init_intercept = false; - vmcb_ident(vmcb); vmcb->control.intercept |= (1ULL << INTERCEPT_INIT); } From patchwork Tue Jun 22 21:00:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338609 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 548EEC2B9F4 for ; Tue, 22 Jun 2021 21:01:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3ADA361153 for ; Tue, 22 Jun 2021 21:01:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229786AbhFVVDS (ORCPT ); Tue, 22 Jun 2021 17:03:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230028AbhFVVDR (ORCPT ); Tue, 22 Jun 2021 17:03:17 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0AFAFC061574 for ; Tue, 22 Jun 2021 14:01:00 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id 100-20020aed206d0000b029024ea3acef5bso516017qta.12 for ; Tue, 22 Jun 2021 14:01:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=3roEB27IHSAyww1GhUrfxciS1XDaGfhjhokUOuHz8oU=; b=nHRgLM0mRyRxReQ2ALJtfGJ7kSU1GqczWckyuJ4P8j1kefZqXyKLjSNbRMSyVgevK2 Eifh5iQm39v9CXBmq5UG5siI2jk/4dwHXFNzTCq4qH7F3G19Uy96t9VvJm1LvyvuVM2i 6JX3PfIknYrAXYMC1idtKgnT9P92rTs3HgI1zqGNr5POe8BneR+tSkeDD/BQ1eKwesML gzZnfpLQLpfnLIB2rSBieMY+QbaNmN1x92TDaCCp2IjCoCquNk/5m1ja+KDv57BYDhvP SYObrxSRw7TzsN8SnKYyyhR332Bl/VUuOaRVS07sSca9Z1M6YNw9O0esKUmltQsf98fC WTnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=3roEB27IHSAyww1GhUrfxciS1XDaGfhjhokUOuHz8oU=; b=NM6AV3z4D+HKe7wWjxnKvsJiP5TCjAdgaliAdF+UIy8meBSqcFWTK1zgvhWF9cPYUX i8r92mw/Wg8Z+hkTfDwT4s8uajeYVXch5ZBX6iKgqHA8IDO4Zkkd7L2e3cGcoOZ3cIZb T4ZWNOB5kA8oyHLUOunPt9DGpvYh7IdXsV5bk/W+B1S6R9bnS2xluiSTwHcy7puqMxOq P17UIXTuzpMnhA4mUL88DX169HVSa0jADpBgo/6GEwSAciCHD6GZ2k7Vhql7kXD8+x+D FF2o8raAl0KsKA3EuqvRqgSKiUnXqLSLxoIlJMvIGBxlH9DNfTw7J2B7IupVTRqGIXHY GHAg== X-Gm-Message-State: AOAM530Nrl+/aDWQlgRVfS8gv72p8dy9VLxCcZc3FtYndWmbbn8nKsIH uZiALHQB8ty6YImm99WMCfXUdeCt1ns= X-Google-Smtp-Source: ABdhPJwwdK8WNgnzX6J9XW8QCS+QVPg6P39pm1ry2DC/5obBCSCT0CeB4uKg6C6Ectfp4z67xQqI57sjIRs= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a25:f208:: with SMTP id i8mr7155324ybe.340.1624395659180; Tue, 22 Jun 2021 14:00:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:39 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-5-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 04/12] nSVM: Explicitly save/update/restore EFER.NX for NPT NX test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Explicitly set EFER.NX in the NPT NX test instead of assuming all tests will run with EFER.NX=1, and use the test's scratch field to save/restore EFER. There is no need to force EFER.NX=1 for all tests, and a future test will verify that a #NPT occurs when EFER.NX=0 and PTE.NX=1, i.e. wants the exact opposite. Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index aa74cfe..506bd75 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -700,9 +700,11 @@ static bool sel_cr0_bug_check(struct svm_test *test) static void npt_nx_prepare(struct svm_test *test) { - u64 *pte; + test->scratch = rdmsr(MSR_EFER); + wrmsr(MSR_EFER, test->scratch | EFER_NX); + pte = npt_get_pte((u64)null_test); *pte |= PT64_NX_MASK; @@ -712,6 +714,8 @@ static bool npt_nx_check(struct svm_test *test) { u64 *pte = npt_get_pte((u64)null_test); + wrmsr(MSR_EFER, test->scratch); + *pte &= ~PT64_NX_MASK; vmcb->save.efer |= EFER_NX; From patchwork Tue Jun 22 21:00:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338611 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E7CCC48BDF for ; Tue, 22 Jun 2021 21:01:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 24E9661153 for ; Tue, 22 Jun 2021 21:01:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230046AbhFVVDT (ORCPT ); Tue, 22 Jun 2021 17:03:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230102AbhFVVDS (ORCPT ); Tue, 22 Jun 2021 17:03:18 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15695C061756 for ; Tue, 22 Jun 2021 14:01:02 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id n195-20020a3740cc0000b02903b2ccb7bbe6so3059311qka.20 for ; Tue, 22 Jun 2021 14:01:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=oynEYjbfGkxcQKBEu63DRAhp5WXiHLm3vG69ktsWTSo=; b=SdYsFqUC3ouvIEWUZLppsCvI9Os2EWNH/JGnJlNTXqaJiKn+31YIO1RMcM8SDjhRmx 63VYACUmhaxHV9bJ2XY8TmlLGcE88qTYs/OdY6Clc/6MUztdSxjdC/0J4nm5ztM8X5HT LrtoKIx533xncjDTcokYErGSwsnnWodUDbe1PgIqzxz+kUSX5kwLYvf0ciYTypxvpI4K rvOflPcIpmbmY4tENr6KAcUy0DjdgjGfllv4ATY46NXzdXcg5vwHlHIDHiNbBA1iCWLo IO5mWc4KjnTejly7YQrQtn562db7NuRBb8o9md2kLevui8JZikbYBhKbQREjiZcG9ApP URkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=oynEYjbfGkxcQKBEu63DRAhp5WXiHLm3vG69ktsWTSo=; b=jgxrGWQjzCIan+uT9mpvuu7vj5rvw3hM7PrQksqqMheiYBXtSl9kuuldPl5oZFIiPc I2uSOG5nE723aItsYygeppFS9WEadIW8qYhTXzdACbBnB1LWDXBVMS8pInmr5D/CPjQO 1sakAMrf3DyMB8jAGw7TmJlrKDuVlpoUlc+xSx/P+Snx69vIxdllQl26BsmbUruQQhYW S3UWoZy0MdQ/F5y1J6YxJNMt2z+4fpFKoNpuM0HYdxowdFmZoIeDfvXdofzUvlqFB/4Y P+lReeQcnP1z3LdFRtFPE+jWqw3ezO4HjooUDRFgPFV56Doiap0lIFAqM4XewM6Mw481 DZ6A== X-Gm-Message-State: AOAM532g/vheiNouAEtyCAVqASdzCFZo2mijp0ZtN9JMEL1F8Ui4zGpX tCP945Egoe1HC6S7I4fHIGars2AqJn0= X-Google-Smtp-Source: ABdhPJyVMGEpOGPc/rF0OtugJz1tszDhOaeUQviXo8Od3tialiJGEMUhpZ+xifmDH6rQtkfcY8R+nrcaAks= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a05:6214:4b:: with SMTP id c11mr808533qvr.18.1624395661257; Tue, 22 Jun 2021 14:01:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:40 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-6-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 05/12] nSVM: Remove NPT reserved bits tests (new one on the way) From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Remove two of nSVM's NPT reserved bits test, a soon-to-be-added test will provide a superset of their functionality, e.g. the current tests are limited in the sense that they test a single entry and a single bit, e.g. don't test conditionally-reserved bits. The npt_rsvd test in particular is quite nasty as it subtly relies on EFER.NX=1; dropping the test will allow cleaning up the EFER.NX weirdness (it's forced for _all_ tests, presumably to get the desired PFEC.FETCH=1 for this one test). Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 45 --------------------------------------------- 1 file changed, 45 deletions(-) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index 506bd75..96add48 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -774,28 +774,6 @@ static bool npt_us_check(struct svm_test *test) && (vmcb->control.exit_info_1 == 0x100000005ULL); } -u64 save_pde; - -static void npt_rsvd_prepare(struct svm_test *test) -{ - u64 *pde; - - pde = npt_get_pde((u64) null_test); - - save_pde = *pde; - *pde = (1ULL << 19) | (1ULL << 7) | 0x27; -} - -static bool npt_rsvd_check(struct svm_test *test) -{ - u64 *pde = npt_get_pde((u64) null_test); - - *pde = save_pde; - - return (vmcb->control.exit_code == SVM_EXIT_NPF) - && (vmcb->control.exit_info_1 == 0x10000001dULL); -} - static void npt_rw_prepare(struct svm_test *test) { @@ -844,23 +822,6 @@ static bool npt_rw_pfwalk_check(struct svm_test *test) && (vmcb->control.exit_info_2 == read_cr3()); } -static void npt_rsvd_pfwalk_prepare(struct svm_test *test) -{ - u64 *pdpe; - - pdpe = npt_get_pml4e(); - pdpe[0] |= (1ULL << 8); -} - -static bool npt_rsvd_pfwalk_check(struct svm_test *test) -{ - u64 *pdpe = npt_get_pml4e(); - pdpe[0] &= ~(1ULL << 8); - - return (vmcb->control.exit_code == SVM_EXIT_NPF) - && (vmcb->control.exit_info_1 == 0x20000000fULL); -} - static void npt_l1mmio_prepare(struct svm_test *test) { } @@ -2719,15 +2680,9 @@ struct svm_test svm_tests[] = { { "npt_us", npt_supported, npt_us_prepare, default_prepare_gif_clear, npt_us_test, default_finished, npt_us_check }, - { "npt_rsvd", npt_supported, npt_rsvd_prepare, - default_prepare_gif_clear, null_test, - default_finished, npt_rsvd_check }, { "npt_rw", npt_supported, npt_rw_prepare, default_prepare_gif_clear, npt_rw_test, default_finished, npt_rw_check }, - { "npt_rsvd_pfwalk", npt_supported, npt_rsvd_pfwalk_prepare, - default_prepare_gif_clear, null_test, - default_finished, npt_rsvd_pfwalk_check }, { "npt_rw_pfwalk", npt_supported, npt_rw_pfwalk_prepare, default_prepare_gif_clear, null_test, default_finished, npt_rw_pfwalk_check }, From patchwork Tue Jun 22 21:00:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338613 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F9E7C2B9F4 for ; Tue, 22 Jun 2021 21:01:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 383DE6108E for ; Tue, 22 Jun 2021 21:01:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230185AbhFVVDX (ORCPT ); Tue, 22 Jun 2021 17:03:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230102AbhFVVDV (ORCPT ); Tue, 22 Jun 2021 17:03:21 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CD64C061574 for ; Tue, 22 Jun 2021 14:01:05 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id q207-20020a3743d80000b02903ab34f7ef76so19654508qka.5 for ; Tue, 22 Jun 2021 14:01:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=vLaSeuzytuR7vvw4yPwWOITjIwy09qA/AxiRyKDmw2U=; b=RPF6munACGVqz85nz8cT11Cns3fEt8lE/seqQA5Iy6csQ4n3EIVTIr7223ZJUktbOM fCRnWcxtjWhry4v8DxOGbvXi9ghJMmhC9A2kiovuB+v9q5xf1nNjee/i3EJVnMTMYK1A N3qpXZAmZEtlobUPJWOAuDS99DRD8vCgztKPIxnZzJb7QVQILeOhxYnC7Rh1MD8M9e6c zG3Cl6M1JwouvZTuQBuKrbqGHXerJtr1s7jCZhVQaGpNwRl3pmAhguRzyddXRhHWKQZq XjWhBaGOr8nOVrds3XUNKikeDXX5fsfobnOEkIFUnY7PGAcbNMXoy34CmLHqi8xfVcjj kcsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=vLaSeuzytuR7vvw4yPwWOITjIwy09qA/AxiRyKDmw2U=; b=sD8zLIxML3v45CpPcDIMIuk/MBOindw6KHrrEUSTofaxRYCkiBa5BV4kfcyfZOljAt guIZ2oNxdwJh0ec+HYrqSPrqzlOOdJVd7al2fRMu1Dt8FLhSCziyws0iHdgC4HCe0fWI TA0x68m4u1NsoNABay24qOWoA1eQr4DiHiB9yXnJrU+PoCEmgSeh50Y/6xB0jva1YQ1h RhWaYV61eoG/XFkvC8h2o3Upoyh0QeTG3FPuw8UGCT9kKf/VnV/wke5cn1Gt08Ozu9XH mlia6iPucekOt5pMjWITXUymumbJChjSzEcw24JzPwiBaEz/g5qpd7JMKHB2lFkLlCxq M7Wg== X-Gm-Message-State: AOAM530EPtgfghivVM+K+aVkJfjGmfPxTkIsnd+tSEUfqMZmoeS6bdJ6 mhPJA6L0pWY0rLZtnCU2DnSxEPiwETo= X-Google-Smtp-Source: ABdhPJw66SsvmLyOqh5Un0sLfKmYW6HqAvR91NfK63Q2LGNtmOhFaxJBz6dhbkDQw11CUE+tGY1In+daQZ8= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a25:4805:: with SMTP id v5mr7178689yba.4.1624395664350; Tue, 22 Jun 2021 14:01:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:41 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-7-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 06/12] nSVM: Stop forcing EFER.NX=1 for all tests From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Don't force EFER.NX=1 for SVM tests now that the one NPT test that needs EFER.NX=1 does its own housekeeping. Signed-off-by: Sean Christopherson --- x86/svm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x86/svm.c b/x86/svm.c index 6e5872d..0959189 100644 --- a/x86/svm.c +++ b/x86/svm.c @@ -295,7 +295,7 @@ static void set_additional_vcpu_msr(void *msr_efer) void *hsave = alloc_page(); wrmsr(MSR_VM_HSAVE_PA, virt_to_phys(hsave)); - wrmsr(MSR_EFER, (ulong)msr_efer | EFER_SVME | EFER_NX); + wrmsr(MSR_EFER, (ulong)msr_efer | EFER_SVME); } static void setup_svm(void) @@ -306,7 +306,6 @@ static void setup_svm(void) wrmsr(MSR_VM_HSAVE_PA, virt_to_phys(hsave)); wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_SVME); - wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_NX); io_bitmap = (void *) ALIGN((ulong)io_bitmap_area, PAGE_SIZE); From patchwork Tue Jun 22 21:00:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338615 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CEA53C2B9F4 for ; Tue, 22 Jun 2021 21:01:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B5EB960FF4 for ; Tue, 22 Jun 2021 21:01:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230175AbhFVVDZ (ORCPT ); Tue, 22 Jun 2021 17:03:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230202AbhFVVDX (ORCPT ); Tue, 22 Jun 2021 17:03:23 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CC21C061766 for ; Tue, 22 Jun 2021 14:01:07 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id w1-20020ac87a610000b02902433332a0easo600905qtt.0 for ; Tue, 22 Jun 2021 14:01:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=SlZYndtBT6I+KaOifP/wRG5sSQAx1y6ctf87XCjbUJI=; b=OenfmcWZhtHt6LoEca8UzQBjCsgMnfErm5RIje7t6rCqEBE/Un126oBBPk3GOugkGS 9SSn0hZ7gW+8tLjUh7w2N9byuynHj2goV5HbzizODSRjPppWKoL7ykYFJ3oJJKuGVeYO rTomsNJmqBKuBWCcAJU77Ngwq44k23Ycdck+aZfAUxLIcQxQSdWVrnVxX1+Dg/XOdZ4u STgK9l/znqb3AUnwCUCaL8YuUyCkIIneYaLsTXBVo2nNpPm94X1VLRlnqQ3k7NPIKLP0 VeMIPsQQdC0KpVS8sI7txAbTGvpzWtyp44cQfCq9leowNShellfeNLHWnYfrbXv7/pj+ Dsqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=SlZYndtBT6I+KaOifP/wRG5sSQAx1y6ctf87XCjbUJI=; b=m2lHMq1tGV8jcKpCPUShSky7lscAe78tV5PAkLv2wQnVQtjx/cUiKn+HMlOKsnQgAf 8oQgtwGaG5goZc09G3Cs8QoMvwgXdiPC/WuCA9dQPh89RdjFtIPPCD0q0xK0ub3uP1eq ynCg9UKnYhsM9F4FNbR4B5X0Sx77xb+T6U06y+EeLfZH0OYPA7CKvh70743QLdRiOlX/ sVi5WNKfFzJjpbwKeaCROsZZS6foaSRpZGWqeSlMMKV4fZYw84l3DAZMx3uCQRAk95PC 6Rd/Uc+CUP2/tNRlifOB+AXzAdxWdI3ujB4b6WuMYS8ILMTMcUFPLxl/2/zuZVZ9x+06 sRdA== X-Gm-Message-State: AOAM53312suChNrRds4Lt7FDvZwKajwHbJvtIWxpkAm0+Ck17FtobSNi oQkS7utIkAbHo1UTKqOOQ1OfGqurwDM= X-Google-Smtp-Source: ABdhPJzWzoOAz1xTZ8FNDkJ7YZkwJPaZ1xvMc8YHE2mavTEllBUlsRXnlrlQ3ODuVuYtsBxKTC3OPd4cFCk= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a0c:e18c:: with SMTP id p12mr788183qvl.54.1624395666543; Tue, 22 Jun 2021 14:01:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:42 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-8-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 07/12] nSVM: Remove a superfluous modification of guest EFER.NX in NPT NX test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Remove a bizarre modification of the guest's EFER.NX from the NPT NX test. For reasons unknown, the NPT NX test forces EFER.NX in the guest _after_ running the test. Now that the v1 infrastructure saves/restores guest EFER across the test, the motivation, whatever thay may have been, is moot because the forced EFER.NX value won't persist. Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index 96add48..b1783f8 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -718,8 +718,6 @@ static bool npt_nx_check(struct svm_test *test) *pte &= ~PT64_NX_MASK; - vmcb->save.efer |= EFER_NX; - return (vmcb->control.exit_code == SVM_EXIT_NPF) && (vmcb->control.exit_info_1 == 0x100000015ULL); } From patchwork Tue Jun 22 21:00:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338617 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28955C48BDF for ; Tue, 22 Jun 2021 21:01:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 11BF761001 for ; Tue, 22 Jun 2021 21:01:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230188AbhFVVD1 (ORCPT ); Tue, 22 Jun 2021 17:03:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230202AbhFVVD0 (ORCPT ); Tue, 22 Jun 2021 17:03:26 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90695C061574 for ; Tue, 22 Jun 2021 14:01:09 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id 2-20020a3709020000b02903aa9873df32so19611018qkj.15 for ; Tue, 22 Jun 2021 14:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=XDPyuP+76sS7H1b65gbiCra1bWwUEj/k7PFZqKhwftA=; b=lirgx8idx0D0/y+AcNZE/SLGdB5CrPBxFGt++QbwAU0JXxOKj1N/byVmAS4gKrvCaN szte26D+uI4T9QtT1XkZ/XpixZgakNA4lcQDlh0rZ+/BkIIb2HvAQzRJS/+cJlV6NFc4 xixCY2IzqKffwYALZ1nGQW4PwXKAxzfremTRfmhvT8YvP4DYV0qZ53vgVGvoF8jp0Zz4 jFIPSBWgidNPQ5VoUOv0Joe+Gw+avhspAeFMb2a8lcOA9HpjQxnfKAOa5ng3k/dpx6yS 5VqVwJkDTCN9myoiKt3KHCbR6WkQnSvGpAU9YFkvGyrydViwrhfboxCybbCuEbho13AC SapQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=XDPyuP+76sS7H1b65gbiCra1bWwUEj/k7PFZqKhwftA=; b=bQXOxbFdnQ0TW9tqw/kLvlxlzkrT+aXabZvDQaYzWUQX0nRBgv0jNoHCJZN9OFeqaM NjhbGV7qCwPkMEF7ziMNymZwL97M7xGmo8R6Yy2iCQ5+SzDUpGlORpZtXPdGtsTmvnaD 0EsyqJQntET2j9FLj8SLjSQRc6Z3YGbFHTYfGaBpSITe/GzJRLsrr9A9rvqLURaG5DSC ZEyugmk30p6JvxX4IziqGymfhwFReoG0Sw/ApvgfHivroq4ZbsB2wcbf+U7tUq6hJ1HN bhPOzXyZ7dEgMAg283sTFOuu//KWqedpNmSMy4dy/26XBuFQjeUJQXgqO5kYOhDy90zs sdXA== X-Gm-Message-State: AOAM533GlhtFH5llU7TM88fVpcGBRelXxS3/SAQJUV5FVnc85U/VGVZT tan8+UWzxcoGlOXrn6R/oifG7aTAEBw= X-Google-Smtp-Source: ABdhPJwcab6N00Jq/84QvqMB5Z0L0KDVBDUimNQe/HCvCdVcnKeXaeOEWZ+MH8doUYTBQDlZmV7s41UVvW0= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a05:6214:80c:: with SMTP id df12mr834477qvb.18.1624395668731; Tue, 22 Jun 2021 14:01:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:43 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-9-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 08/12] nSVM: Clear guest's EFER.NX in NPT NX test From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Clear the guest's EFER.NX when testing that KVM supports the NX bit in nested NPT. The guest's EFER (and CR0 and CR4) should not affect NPT behavior in any way. Signed-off-by: Sean Christopherson --- x86/svm_tests.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x86/svm_tests.c b/x86/svm_tests.c index b1783f8..fdef620 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -705,6 +705,9 @@ static void npt_nx_prepare(struct svm_test *test) test->scratch = rdmsr(MSR_EFER); wrmsr(MSR_EFER, test->scratch | EFER_NX); + /* Clear the guest's EFER.NX, it should not affect NPT behavior. */ + vmcb->save.efer &= ~EFER_NX; + pte = npt_get_pte((u64)null_test); *pte |= PT64_NX_MASK; From patchwork Tue Jun 22 21:00:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338619 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63F32C48BE5 for ; Tue, 22 Jun 2021 21:01:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5270E60FF4 for ; Tue, 22 Jun 2021 21:01:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229949AbhFVVD2 (ORCPT ); Tue, 22 Jun 2021 17:03:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230102AbhFVVD1 (ORCPT ); Tue, 22 Jun 2021 17:03:27 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85C86C061574 for ; Tue, 22 Jun 2021 14:01:11 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id r190-20020a375dc70000b02903acea04c19fso19593199qkb.8 for ; Tue, 22 Jun 2021 14:01:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=u95zDG6n6gRWNnnEaj1cPaIdVUcCRGEQQdX0rZcjzdE=; b=uBLIb7qV2LD2zF8Q+Kgz6urlUI8Iws9XaybkJrLC+GY+V2ubhPmdTplt7Bn7jpN9WB UbCrmkK968Ybt16+gVIj4NGFGPpYXs+PlQadbsyjHRWBO2CJqkkCcSazKILCW4VY/nBa IdOvyjE2ko90isTyaZV3By+eEABW9oSbJW37oyfw2jobLIV0zhOpdKlwCYV3yYLILUbK cMdpIGrg6+Gc3byo2beBTWQF8ZnQaz4zxlzyAEcMfAwJDM418kYySNuse1bTbR8Y1ELc 3YhlPsN1cRh8xZj8gfH2sqJIt3+cI+h4J157JFWF8cklcRScYs45ADIay1e5J+crQ7WU GDMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=u95zDG6n6gRWNnnEaj1cPaIdVUcCRGEQQdX0rZcjzdE=; b=A3VDvFDRPwlrfXu6ByN32NMvUC0V21EnJGWNCi679qw48pYNdImGY/R5RQCA7YGOBi UCjzAg7zula3k1O4ZaKNzGfoHz5lviYCIgyVzurv2gn4R2PkLkXkrTG0pzZQW7lsENAE lFjUaZAd6Is/ZZzPQi+M75HVbquqJsJk21uTUt06l9gr7azFH8xlucRJm7GCXMRGyLdG 2111aSDdzv4eTj846nISZ59BiYhsi0SQoNZg6mz+mpcu9r4DhNy8YYzoKdEnHW51wZQF KMM/Sgs6QjEk+Yf+9L3E3i0uSOvwts09SE6iGzMQcHjH5qC4twL0dmS1GjQntFsWtdvj /Xsw== X-Gm-Message-State: AOAM5311ZCjewW7TLwzaTOTWxyIoFPyzkkqYNBLRTkMSs87cneSqpyyi MD/rM0057LZDj8snXZ5hj7eYXY099/Y= X-Google-Smtp-Source: ABdhPJxfUbOvVeR5catbBRfoWmNUlSAJtnOTk04ODfJnFLTZoXqDOZCrZHEKMzONAUwenZB2ZrKq6Y7eWKE= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:ad4:4b22:: with SMTP id s2mr842942qvw.22.1624395670698; Tue, 22 Jun 2021 14:01:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:44 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-10-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 09/12] lib/vmalloc: Let arch code pass a value to its setup_mmu() helper From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Add an inner __setup_vm() that takes an opaque param and passes said param along to setup_mmu(). x86 will use the param to configure its page tables for kernel vs. user so that tests that want to enable SMEP (fault if kernel executes user page) can do so without resorting to hacks and without breaking tests that need user pages, i.e. that run user code. Signed-off-by: Sean Christopherson --- lib/arm/mmu.c | 2 +- lib/s390x/mmu.c | 3 ++- lib/vmalloc.c | 9 +++++++-- lib/vmalloc.h | 4 +++- lib/x86/vm.c | 2 +- s390x/uv-host.c | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/arm/mmu.c b/lib/arm/mmu.c index 7628f79..e1a72fe 100644 --- a/lib/arm/mmu.c +++ b/lib/arm/mmu.c @@ -153,7 +153,7 @@ void mmu_set_range_sect(pgd_t *pgtable, uintptr_t virt_offset, } } -void *setup_mmu(phys_addr_t phys_end) +void *setup_mmu(phys_addr_t phys_end, void *unused) { struct mem_region *r; diff --git a/lib/s390x/mmu.c b/lib/s390x/mmu.c index c973443..6f9e650 100644 --- a/lib/s390x/mmu.c +++ b/lib/s390x/mmu.c @@ -343,7 +343,8 @@ static void setup_identity(pgd_t *pgtable, phys_addr_t start_addr, } } -void *setup_mmu(phys_addr_t phys_end){ +void *setup_mmu(phys_addr_t phys_end, void *unused) +{ pgd_t *page_root; /* allocate a region-1 table */ diff --git a/lib/vmalloc.c b/lib/vmalloc.c index aa7cc41..5726825 100644 --- a/lib/vmalloc.c +++ b/lib/vmalloc.c @@ -206,7 +206,7 @@ void init_alloc_vpage(void *top) spin_unlock(&lock); } -void setup_vm() +void __setup_vm(void *opaque) { phys_addr_t base, top; @@ -228,7 +228,7 @@ void setup_vm() find_highmem(); phys_alloc_get_unused(&base, &top); - page_root = setup_mmu(top); + page_root = setup_mmu(top, opaque); if (base != top) { base = PAGE_ALIGN(base) >> PAGE_SHIFT; top = top >> PAGE_SHIFT; @@ -240,3 +240,8 @@ void setup_vm() alloc_ops = &vmalloc_ops; spin_unlock(&lock); } + +void setup_vm(void) +{ + __setup_vm(NULL); +} diff --git a/lib/vmalloc.h b/lib/vmalloc.h index 346f94f..0269fdd 100644 --- a/lib/vmalloc.h +++ b/lib/vmalloc.h @@ -14,9 +14,11 @@ extern void *alloc_vpage(void); extern void init_alloc_vpage(void *top); /* Set up the virtual allocator; also sets up the page allocator if needed */ extern void setup_vm(void); +/* As above, plus passes an opaque value to setup_mmu(). */ +extern void __setup_vm(void *opaque); /* Set up paging */ -extern void *setup_mmu(phys_addr_t top); +extern void *setup_mmu(phys_addr_t top, void *opaque); /* Walk the page table and resolve the virtual address to a physical address */ extern phys_addr_t virt_to_pte_phys(pgd_t *pgtable, void *virt); /* Map the virtual address to the physical address for the given page tables */ diff --git a/lib/x86/vm.c b/lib/x86/vm.c index e223bb4..221d427 100644 --- a/lib/x86/vm.c +++ b/lib/x86/vm.c @@ -147,7 +147,7 @@ static void set_additional_vcpu_vmregs(struct vm_vcpu_info *info) write_cr0(info->cr0); } -void *setup_mmu(phys_addr_t end_of_memory) +void *setup_mmu(phys_addr_t end_of_memory, void *unused) { pgd_t *cr3 = alloc_page(); struct vm_vcpu_info info; diff --git a/s390x/uv-host.c b/s390x/uv-host.c index 49c66f1..426a67f 100644 --- a/s390x/uv-host.c +++ b/s390x/uv-host.c @@ -446,7 +446,7 @@ static void setup_vmem(void) { uint64_t asce, mask; - setup_mmu(get_max_ram_size()); + setup_mmu(get_max_ram_size(), NULL); asce = stctg(1); lctlg(13, asce); mask = extract_psw_mask() | 0x0000C00000000000UL; From patchwork Tue Jun 22 21:00:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338621 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC5E4C2B9F4 for ; Tue, 22 Jun 2021 21:01:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AD8446108E for ; Tue, 22 Jun 2021 21:01:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230180AbhFVVDa (ORCPT ); Tue, 22 Jun 2021 17:03:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229769AbhFVVDa (ORCPT ); Tue, 22 Jun 2021 17:03:30 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CB78C061756 for ; Tue, 22 Jun 2021 14:01:14 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id o14-20020a05620a0d4eb02903a5eee61155so1375296qkl.9 for ; Tue, 22 Jun 2021 14:01:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=ogeXtkj2c8Izcn67ls62PAxamc9dXkTYzjrZvENMaR0=; b=UtTzOY0YvHYKtJxtzIMDVTX7kd2UkBs1wIPT06m89yGKJjL+sVD2CY+76fcWDqW14R aLRGntimUGOevIlGfbZvejeNkVF93xv0obeI9lw3xqEyEKFtkdhKcHpRRsnTW4qYNwHw /FWLh21Y8zZRaMcOSDJFW9fzqv+R+QIITE8DVc1cQfy8X3Mjy9boD3wtlG+JMJKmEZHt 9FeyGl70CSrFCph4LfG7M3QWpHl9jnYR7ajPbU/TCtHUCWeO5SGGzx4QMXfiS0hvwiTP z7kjNsd04l4P/1FPWTlNDUG9PX57Xdi2a5hji0pkHhBavzj2Xxn/AD+OVL5yKf9/YfAT /MVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=ogeXtkj2c8Izcn67ls62PAxamc9dXkTYzjrZvENMaR0=; b=BW5FZPeAJodliiYBPXvi46gaKwDcBC4TRtF7M8fWwts52NPUanBZ3S98UnZKdpARIy N3XAvUn4IeS2Qnpwz4TFtvjZWIqlCieev5MyUonpElslaZM0/sBpBNsV0q3wFBiQGjya rm0DW5wfUcSTD/4byAk5c7vbwW0Qb+GHU6+dDfa9Mg9CfxKmG57qKpb8WIWBN4weP1WR 9uMXRTSuRE0vhhOxRQQ6gDj+z9iDWKpu2XZSrJC+0o5y3gWbS9aMzQpUQ/hPTUV7biyA JjJ0Copqp1HZ4jyorBXE7Bn3k0XdX+Qk9agnwouPUarzSJ+R2tNKU5GPyGHWWpdzUfMf RTJQ== X-Gm-Message-State: AOAM532R3qYtuxDJAy+RQvZUifeICEowHoLTpcA1qvU9CbS5rgBF5klk al5QvnUb0/ATUF8IjeFCJciLDrSsanU= X-Google-Smtp-Source: ABdhPJyOt0RI/DQSmCteDKDwduuAWJBod5bgmda4GKKDU6XMDp5KSAxSOIghBuJ9RxVHZjEO1AZFxkr8nLI= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a5b:601:: with SMTP id d1mr6880048ybq.189.1624395673199; Tue, 22 Jun 2021 14:01:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:45 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-11-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 10/12] x86: Let tests omit PT_USER_MASK when configuring virtual memory From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Let tests opt out of setting PT_USER_MASK so that they can set CR4.SMEP and/or CR4.SMAP without having to manually modify all PTEs, which is beyond painful. Keep user pages the default to avoid having to update existing tests. Signed-off-by: Sean Christopherson --- lib/x86/vm.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/x86/vm.c b/lib/x86/vm.c index 221d427..5cd2ee4 100644 --- a/lib/x86/vm.c +++ b/lib/x86/vm.c @@ -4,6 +4,8 @@ #include "alloc_page.h" #include "smp.h" +static pteval_t pte_opt_mask; + pteval_t *install_pte(pgd_t *cr3, int pte_level, void *virt, @@ -23,7 +25,7 @@ pteval_t *install_pte(pgd_t *cr3, else pt_page = 0; memset(new_pt, 0, PAGE_SIZE); - pt[offset] = virt_to_phys(new_pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK; + pt[offset] = virt_to_phys(new_pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK | pte_opt_mask; } pt = phys_to_virt(pt[offset] & PT_ADDR_MASK); } @@ -93,12 +95,12 @@ pteval_t *get_pte_level(pgd_t *cr3, void *virt, int pte_level) pteval_t *install_large_page(pgd_t *cr3, phys_addr_t phys, void *virt) { return install_pte(cr3, 2, virt, - phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK | PT_PAGE_SIZE_MASK, 0); + phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | pte_opt_mask | PT_PAGE_SIZE_MASK, 0); } pteval_t *install_page(pgd_t *cr3, phys_addr_t phys, void *virt) { - return install_pte(cr3, 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK, 0); + return install_pte(cr3, 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | pte_opt_mask, 0); } void install_pages(pgd_t *cr3, phys_addr_t phys, size_t len, void *virt) @@ -147,12 +149,17 @@ static void set_additional_vcpu_vmregs(struct vm_vcpu_info *info) write_cr0(info->cr0); } -void *setup_mmu(phys_addr_t end_of_memory, void *unused) +void *setup_mmu(phys_addr_t end_of_memory, void *opt_mask) { pgd_t *cr3 = alloc_page(); struct vm_vcpu_info info; int i; + if (opt_mask) + pte_opt_mask = *(pteval_t *)opt_mask; + else + pte_opt_mask = PT_USER_MASK; + memset(cr3, 0, PAGE_SIZE); #ifdef __x86_64__ From patchwork Tue Jun 22 21:00:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338623 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 068F9C2B9F4 for ; Tue, 22 Jun 2021 21:01:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E2B4F60FF4 for ; Tue, 22 Jun 2021 21:01:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230206AbhFVVDd (ORCPT ); Tue, 22 Jun 2021 17:03:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230122AbhFVVDc (ORCPT ); Tue, 22 Jun 2021 17:03:32 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B1F8C061756 for ; Tue, 22 Jun 2021 14:01:16 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id q207-20020a3743d80000b02903ab34f7ef76so19655167qka.5 for ; Tue, 22 Jun 2021 14:01:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=haFo17eReeDWA+IklGU6ghGSlouWNmR/tQ+kfJMYFHo=; b=rI1jga/NemXCjZrjvi73czNB91eMrXpgNcLnmA7XHKcJiUGkzECXjWvFVE0qeLkZct tQa+9vB2haIFD3XcSENumjqac27nfm1LFZVqektxyi4tSyPsUHMv1bw4KSQ1fNE4m1/0 iA3HejfuZaLmLpi4zQFxC1c2gdpHVtgN3bQmuSxsjGltmhHZSVYgEoEI3+jXUYp/mhJ2 fReWSwrnp1ciBuVOEnIBi70M59DrZ5CP9kuRIa4PRuhT/IsCZn+C8rmHjM43H6HUxgKG 0z2uIE1oja9P3pGFmJzlTMyUyt7m4iMhK4iMYQFXNIWlRA/2OeRw0Eg1edPHiiSh5G4X 4NUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=haFo17eReeDWA+IklGU6ghGSlouWNmR/tQ+kfJMYFHo=; b=rF28BSnWj+zmrkrfoUHZZNP1DXvOO9RE8M7KMXI/QGuCd9kFi9xjiMWFAEytmfO/SK QW0J+6XjP7NWcdAMP5fdNWjuA7DV2PIbG/uYIcP983OVEeWJerL+gm1XSCIJd8QI0OPl VwQJN2LZaLjYAB6CRffd7oa9Muxj3L2QofHVfmdQf2J2WJMsIwB695tGamgHhGGwp/lk 8MeJLuHdcnVCE3lMpihjuw1u2AlhG2vZHyhMYiD46bKyoKR5GGhcUUFWCRiy6WSyFuur ibTjDiZNS2upPXk4dDBsVPpHiFnZ/AAH7Z1kKfAFAjd9CJN2si3bYmK944D6jyItZ/hf TgUA== X-Gm-Message-State: AOAM533u+J6qOJS1hIMG/8PPdiZR89QpCSdtJNY/1IynG9vx2+7PBxOT TE3x/n7xbLVXM4aCbFDa2lhuDH2km7E= X-Google-Smtp-Source: ABdhPJzgkyL0zhnRTtAL60+xp+IXPRddXBF+9GyrHrpr77CU4t7ZAGZkveZYS61UVSaNjAJWyHh46Wn0Wss= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a5b:58e:: with SMTP id l14mr7626762ybp.303.1624395675608; Tue, 22 Jun 2021 14:01:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:46 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-12-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 11/12] x86: Add GBPAGES CPUID macro, clean up CPUID comments From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Add a GBPAGES CPUID macro for a future NPT test and reorganize the entries to be explicitly Basic vs. Extended, with a hint that Basic leafs come from Intel and Extended leafs come from AMD. Organizing by Intel vs. AMD is at best misleading, e.g. if both support a feature, and at worst flat out wrong, e.g. AMD defined NX and LM (not sure about RDPRU, but avoiding such questions is the whole point of organizing by type). Signed-off-by: Sean Christopherson --- lib/x86/processor.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/x86/processor.h b/lib/x86/processor.h index 8db13e9..173520f 100644 --- a/lib/x86/processor.h +++ b/lib/x86/processor.h @@ -141,7 +141,7 @@ static inline bool is_intel(void) */ /* - * Intel CPUID features + * Basic Leafs, a.k.a. Intel defined */ #define X86_FEATURE_MWAIT (CPUID(0x1, 0, ECX, 3)) #define X86_FEATURE_VMX (CPUID(0x1, 0, ECX, 5)) @@ -174,15 +174,16 @@ static inline bool is_intel(void) #define X86_FEATURE_SPEC_CTRL (CPUID(0x7, 0, EDX, 26)) #define X86_FEATURE_ARCH_CAPABILITIES (CPUID(0x7, 0, EDX, 29)) #define X86_FEATURE_PKS (CPUID(0x7, 0, ECX, 31)) + +/* + * Extended Leafs, a.k.a. AMD defined + */ +#define X86_FEATURE_SVM (CPUID(0x80000001, 0, ECX, 2)) #define X86_FEATURE_NX (CPUID(0x80000001, 0, EDX, 20)) +#define X86_FEATURE_GBPAGES (CPUID(0x80000001, 0, EDX, 26)) +#define X86_FEATURE_RDTSCP (CPUID(0x80000001, 0, EDX, 27)) #define X86_FEATURE_LM (CPUID(0x80000001, 0, EDX, 29)) #define X86_FEATURE_RDPRU (CPUID(0x80000008, 0, EBX, 4)) - -/* - * AMD CPUID features - */ -#define X86_FEATURE_SVM (CPUID(0x80000001, 0, ECX, 2)) -#define X86_FEATURE_RDTSCP (CPUID(0x80000001, 0, EDX, 27)) #define X86_FEATURE_AMD_IBPB (CPUID(0x80000008, 0, EBX, 12)) #define X86_FEATURE_NPT (CPUID(0x8000000A, 0, EDX, 0)) #define X86_FEATURE_NRIPS (CPUID(0x8000000A, 0, EDX, 3)) From patchwork Tue Jun 22 21:00:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 12338625 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 253B1C2B9F4 for ; Tue, 22 Jun 2021 21:01:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 09FC961001 for ; Tue, 22 Jun 2021 21:01:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230300AbhFVVDj (ORCPT ); Tue, 22 Jun 2021 17:03:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229769AbhFVVDf (ORCPT ); Tue, 22 Jun 2021 17:03:35 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71BA9C061574 for ; Tue, 22 Jun 2021 14:01:18 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id u11-20020a05622a010bb029024ec154fa8bso485822qtw.20 for ; Tue, 22 Jun 2021 14:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=3P8WFMk29fXQiBoRqtWNr/iSF/dXwga8+A/3IePGOxA=; b=OX3ruCf78UnEldp7t76FZHDd+qZdy5Cko3Q6aKUZoBg9X1BeibQXj7nTpSCNlJOxq3 pP6kNtwEIVgdVE07vWx9E0Pof91tlylMsLyJctwDc/KOtGAjJKoLZnWl3bxNYQZ6BIVd i/OxLGnM3uT7xZI3wZ2HDLiXkLm4hAW0pV/QiDSRA8ZeOYKyuwpHKMJ6wS5HE5UwkEXE qRq7vpLHKQIkoblrHJ59n8rjcB9QvGvD28MXTPi37UteXdVAanWDuSTS2n2I/JKyJEmn oIQnK7+SxiXkZ49/lrZHdf2mqV3tXf4slLu9fU64z10ZRh/wRRyAp4Uprq1C8ugBpk4P q2gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=3P8WFMk29fXQiBoRqtWNr/iSF/dXwga8+A/3IePGOxA=; b=OYCQ/q3WkHhUBqUvdrGgUu0als+5dGNzqd5BkskdwebPbZpg5d/VBw/AZQbFYQ/6Z2 9qJsVd3YbR9/kK5D3JBFTvsrVKlRrAm+j8tnBWxO8BxFLtsGy98vESbgTJIEcaLTgWq/ eqPTO0VnZctrtV8uV/FtyMBj1msF0QoqcEIzeiIXP/3mcLM8UnWIuvm+9WeyYzPyOaDT hZ0Hz+AS5TLdjOUsAEy7ViTUPjcx1qo29Aq9esA/6QkcOpkKAMUrGTlzpo7LepcxNnQu zxoRJS81/CknPF8yYgPxrVeHlaO15znU8zZ9uvWvmj85CY8ClYi8ZnSqES5ToyptQczg Jprw== X-Gm-Message-State: AOAM532uJRq0ylNIlOEzyk7xbuNwjYtULYKtCPKGHBxPVNdJozpHVANb LS6wLKTqIkIPFtODJZq5Pb9EfdvvROI= X-Google-Smtp-Source: ABdhPJwQXA3eXgNi6syIuW4k1Gl0POPdEboiHOlT/9vywS8670SZmaCI5d0EnMw2cOi3an6RDrNkKsm8kdE= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:7d90:4528:3c45:18fb]) (user=seanjc job=sendgmr) by 2002:a5b:649:: with SMTP id o9mr4356032ybq.399.1624395677591; Tue, 22 Jun 2021 14:01:17 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 22 Jun 2021 14:00:47 -0700 In-Reply-To: <20210622210047.3691840-1-seanjc@google.com> Message-Id: <20210622210047.3691840-13-seanjc@google.com> Mime-Version: 1.0 References: <20210622210047.3691840-1-seanjc@google.com> X-Mailer: git-send-email 2.32.0.288.g62a8d224e6-goog Subject: [kvm-unit-tests PATCH 12/12] nSVM: Add test for NPT reserved bit and #NPF error code behavior From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, Sean Christopherson Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Add a test to verify that KVM generates the correct #NPF and PFEC when host and guest EFER.NX and CR4.SMEP values diverge, and that KVM correctly detects reserved bits in the first place. Signed-off-by: Sean Christopherson --- x86/svm.c | 5 +- x86/svm_tests.c | 143 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 1 deletion(-) diff --git a/x86/svm.c b/x86/svm.c index 0959189..f185ca0 100644 --- a/x86/svm.c +++ b/x86/svm.c @@ -13,6 +13,7 @@ #include "alloc_page.h" #include "isr.h" #include "apic.h" +#include "vmalloc.h" /* for the nested page table*/ u64 *pte[2048]; @@ -397,12 +398,14 @@ test_wanted(const char *name, char *filters[], int filter_count) int main(int ac, char **av) { + /* Omit PT_USER_MASK to allow tested host.CR4.SMEP=1. */ + pteval_t opt_mask = 0; int i = 0; ac--; av++; - setup_vm(); + __setup_vm(&opt_mask); if (!this_cpu_has(X86_FEATURE_SVM)) { printf("SVM not availble\n"); diff --git a/x86/svm_tests.c b/x86/svm_tests.c index fdef620..1aaf983 100644 --- a/x86/svm_tests.c +++ b/x86/svm_tests.c @@ -2499,6 +2499,148 @@ static void svm_guest_state_test(void) test_vmrun_canonicalization(); } +static void __svm_npt_rsvd_bits_test(u64 *pxe, u64 rsvd_bits, u64 efer, + ulong cr4, u64 guest_efer, ulong guest_cr4) +{ + u64 pxe_orig = *pxe; + int exit_reason; + u64 pfec; + + wrmsr(MSR_EFER, efer); + write_cr4(cr4); + + vmcb->save.efer = guest_efer; + vmcb->save.cr4 = guest_cr4; + + *pxe |= rsvd_bits; + + exit_reason = svm_vmrun(); + + report(exit_reason == SVM_EXIT_NPF, + "Wanted #NPF on rsvd bits = 0x%lx, got exit = 0x%x", rsvd_bits, exit_reason); + + if (pxe == npt_get_pdpe() || pxe == npt_get_pml4e()) { + /* + * The guest's page tables will blow up on a bad PDPE/PML4E, + * before starting the final walk of the guest page. + */ + pfec = 0x20000000full; + } else { + /* RSVD #NPF on final walk of guest page. */ + pfec = 0x10000000dULL; + + /* PFEC.FETCH=1 if NX=1 *or* SMEP=1. */ + if ((cr4 & X86_CR4_SMEP) || (efer & EFER_NX)) + pfec |= 0x10; + + } + + report(vmcb->control.exit_info_1 == pfec, + "Wanted PFEC = 0x%lx, got PFEC = %lx, PxE = 0x%lx. " + "host.NX = %u, host.SMEP = %u, guest.NX = %u, guest.SMEP = %u", + pfec, vmcb->control.exit_info_1, *pxe, + !!(efer & EFER_NX), !!(cr4 & X86_CR4_SMEP), + !!(guest_efer & EFER_NX), !!(guest_cr4 & X86_CR4_SMEP)); + + *pxe = pxe_orig; +} + +static void _svm_npt_rsvd_bits_test(u64 *pxe, u64 pxe_rsvd_bits, u64 efer, + ulong cr4, u64 guest_efer, ulong guest_cr4) +{ + u64 rsvd_bits; + int i; + + /* + * Test all combinations of guest/host EFER.NX and CR4.SMEP. If host + * EFER.NX=0, use NX as the reserved bit, otherwise use the passed in + * @pxe_rsvd_bits. + */ + for (i = 0; i < 16; i++) { + if (i & 1) { + rsvd_bits = pxe_rsvd_bits; + efer |= EFER_NX; + } else { + rsvd_bits = PT64_NX_MASK; + efer &= ~EFER_NX; + } + if (i & 2) + cr4 |= X86_CR4_SMEP; + else + cr4 &= ~X86_CR4_SMEP; + if (i & 4) + guest_efer |= EFER_NX; + else + guest_efer &= ~EFER_NX; + if (i & 8) + guest_cr4 |= X86_CR4_SMEP; + else + guest_cr4 &= ~X86_CR4_SMEP; + + __svm_npt_rsvd_bits_test(pxe, rsvd_bits, efer, cr4, + guest_efer, guest_cr4); + } +} + +static u64 get_random_bits(u64 hi, u64 low) +{ + u64 rsvd_bits; + + do { + rsvd_bits = (rdtsc() << low) & GENMASK_ULL(hi, low); + } while (!rsvd_bits); + + return rsvd_bits; +} + + +static void svm_npt_rsvd_bits_test(void) +{ + u64 saved_efer, host_efer, sg_efer, guest_efer; + ulong saved_cr4, host_cr4, sg_cr4, guest_cr4; + + if (!npt_supported()) { + report_skip("NPT not supported"); + return; + } + + saved_efer = host_efer = rdmsr(MSR_EFER); + saved_cr4 = host_cr4 = read_cr4(); + sg_efer = guest_efer = vmcb->save.efer; + sg_cr4 = guest_cr4 = vmcb->save.cr4; + + test_set_guest(basic_guest_main); + + /* + * 4k PTEs don't have reserved bits if MAXPHYADDR >= 52, just skip the + * sub-test. The NX test is still valid, but the extra bit of coverage + * isn't worth the extra complexity. + */ + if (cpuid_maxphyaddr() >= 52) + goto skip_pte_test; + + _svm_npt_rsvd_bits_test(npt_get_pte((u64)basic_guest_main), + get_random_bits(51, cpuid_maxphyaddr()), + host_efer, host_cr4, guest_efer, guest_cr4); + +skip_pte_test: + _svm_npt_rsvd_bits_test(npt_get_pde((u64)basic_guest_main), + get_random_bits(20, 13) | PT_PAGE_SIZE_MASK, + host_efer, host_cr4, guest_efer, guest_cr4); + + _svm_npt_rsvd_bits_test(npt_get_pdpe(), + PT_PAGE_SIZE_MASK | + (this_cpu_has(X86_FEATURE_GBPAGES) ? get_random_bits(29, 13) : 0), + host_efer, host_cr4, guest_efer, guest_cr4); + + _svm_npt_rsvd_bits_test(npt_get_pml4e(), BIT_ULL(8), + host_efer, host_cr4, guest_efer, guest_cr4); + + wrmsr(MSR_EFER, saved_efer); + write_cr4(saved_cr4); + vmcb->save.efer = sg_efer; + vmcb->save.cr4 = sg_cr4; +} static bool volatile svm_errata_reproduced = false; static unsigned long volatile physical = 0; @@ -2741,6 +2883,7 @@ struct svm_test svm_tests[] = { host_rflags_finished, host_rflags_check }, TEST(svm_cr4_osxsave_test), TEST(svm_guest_state_test), + TEST(svm_npt_rsvd_bits_test), TEST(svm_vmrun_errata_test), TEST(svm_vmload_vmsave), { NULL, NULL, NULL, NULL, NULL, NULL, NULL }