From patchwork Thu Jun 17 10:15:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nadav Amit X-Patchwork-Id: 12329035 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=-14.2 required=3.0 tests=BAYES_00,DATE_IN_PAST_06_12, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 59187C2B9F4 for ; Thu, 17 Jun 2021 17:45:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 309E9613CB for ; Thu, 17 Jun 2021 17:45:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232590AbhFQRrT (ORCPT ); Thu, 17 Jun 2021 13:47:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231249AbhFQRrS (ORCPT ); Thu, 17 Jun 2021 13:47:18 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6F2AC061574 for ; Thu, 17 Jun 2021 10:45:10 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id s17-20020a17090a8811b029016e89654f93so6550652pjn.1 for ; Thu, 17 Jun 2021 10:45:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6ijVHXkKuXOHj7SiqwpiZuOlv0qDP3mfw8fxeQE0vuQ=; b=jBlqQzBe1yDqTTYGiS0zBN/5XGfXSfcirNp81V4VIIktBOYHC1FiKN+QPQS1sj5ues nX7CPdDj2gzDk++WlvgmhbWnpDKbQkcpFsQt/3x2FEXBjuVUvJp2KxLW69DC9UE5oWhp QjBR+X6DwnEm4fxVJnXyWqmkzIUEI1kNNU9W/oSPOn2jec6YGhvUFBJwMpDl5+efbmZ6 uBhNrSpT0gVjgkPhgxy7c7xF91uVySAYGVMGBAJic+skdYoovgkRbG0A9OFs8GJcolwE HqtoRBo3n8ekle0PlHT672ZNM1k4rKYwNl14EptTf2xnEhvo0xRasFBXDNorKjYzukcp MBgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6ijVHXkKuXOHj7SiqwpiZuOlv0qDP3mfw8fxeQE0vuQ=; b=pP7Qa7Ycn+gMxdml60C/7xGgX5FWkFQ6dEhT8a1cSjoPEMYHdMTANpliJQvfjH+fcw nH66SI1/il4ipMak6LmWNOXYyIzVgJfFSRs0bNEt3ZApPb4zsRdXc8U78mn/j7kcGT7g hXQ5vVhueJjr1hSU0rQZByThAWjPN0+7XdUIs4kgE5zOxCV8eSDhLr9edQn6oRn9qaRI Lagu9z4FVQOzDvYTPjj7kf79Irk8FD5YgVOLEC1gHLd+Kw6HuSvLgFD6u6+612uNI8x2 +8mOPi2CBiNCYuX7i95PUG9uCk1+0GJdJVBrB+bDeo0ivb7MHyALlZ4WAc4o4dnTwxt8 yglw== X-Gm-Message-State: AOAM531TKUYGFWPtVVHPcpVkfz7YRqhvcxVr2V+QZvhWHz58VQeN+svG W8dE3zbJdh2tEX+wPe7snd8= X-Google-Smtp-Source: ABdhPJwGaZFssP3LYSorSFhqtsz9ElZPwYYqvJcPVAbVcX3fcHn1gs841etPuQGMMTPpAXyDI1NRWA== X-Received: by 2002:a17:902:748c:b029:103:267f:a2b3 with SMTP id h12-20020a170902748cb0290103267fa2b3mr920930pll.23.1623951910236; Thu, 17 Jun 2021 10:45:10 -0700 (PDT) Received: from sc2-haas01-esx0118.eng.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id v7sm5834880pfi.187.2021.06.17.10.45.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jun 2021 10:45:09 -0700 (PDT) From: Nadav Amit X-Google-Original-From: Nadav Amit To: Paolo Bonzini Cc: kvm@vger.kernel.org, Nadav Amit Subject: [kvm-unit-tests PATCH] x86: Flush the TLB after setting user-bit Date: Thu, 17 Jun 2021 03:15:43 -0700 Message-Id: <20210617101543.180792-1-namit@vmware.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org From: Nadav Amit According to Intel SDM 4.10.4.3 "Optional Invalidation": "If CR4.SMEP = 0 and a paging-structure entry is modified to change the U/S flag from 0 to 1, failure to perform an invalidation may result in a "spurious" page-fault exception (e.g., in response to an attempted user-mode access) but no other adverse behavior." The access test actually causes in certain environments a spurious page-fault. So invalidate the relevant PTE after setting the user bit. Signed-off-by: Nadav Amit --- x86/access.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/x86/access.c b/x86/access.c index 0ad677e..47807cc 100644 --- a/x86/access.c +++ b/x86/access.c @@ -216,8 +216,12 @@ static unsigned set_cr4_smep(int smep) if (smep) ptl2[2] &= ~PT_USER_MASK; r = write_cr4_checking(cr4); - if (r || !smep) + if (r || !smep) { ptl2[2] |= PT_USER_MASK; + + /* Flush to avoid spurious #PF */ + invlpg((void *)(2 << 21)); + } if (!r) shadow_cr4 = cr4; return r;