From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86658C43334 for ; Tue, 14 Jun 2022 06:53:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0E66E6B00A8; Tue, 14 Jun 2022 02:53:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 096EC8D020F; Tue, 14 Jun 2022 02:53:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E78DA6B00AB; Tue, 14 Jun 2022 02:53:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D2D026B00A8 for ; Tue, 14 Jun 2022 02:53:58 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay11.hostedemail.com (Postfix) with ESMTP id A406081246 for ; Tue, 14 Jun 2022 06:53:58 +0000 (UTC) X-FDA: 79575926556.27.6921093 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by imf09.hostedemail.com (Postfix) with ESMTP id 4CB81140097 for ; Tue, 14 Jun 2022 06:53:58 +0000 (UTC) Received: by mail-pg1-f179.google.com with SMTP id q140so7702711pgq.6 for ; Mon, 13 Jun 2022 23:53:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=6gbp+f0ha7/MEBYEwDsGGkTu9GRRA0Ql+zk2faGMi5s=; b=Um5QBKLZk4raoWAs0Uj4dc6+/G0bJOncLCRi/HnPqHRtkK700eobw3gOvhQpYOkNNX 3rGdQKC1DWZs9hwkLY0urCDtJXvW8WiJt271tvom8dXDEo/mu0P2sJYDn6MjbANi9E82 QF72M9xW4FZ6MLsjZPFPrfzPVgMrr+t3sF/miai49ySaDWjWctOqRNDnaCyXKuOYwFGG qLjgosYqFuacQlRg+rCfSk9s5hv4LsEl8bN3Qe7g+hULY/F4ZMR1eyIM4D0ji/exhqb1 3FysqQB3+1ekIf36a6iXur7llnYNGxomjTOi+BlUdiYdd+i37sTeSIlw0RPMDdZFHM7b 4nxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=6gbp+f0ha7/MEBYEwDsGGkTu9GRRA0Ql+zk2faGMi5s=; b=HrM3lD2gq6Ciyx4e6v3JpGPblOxo/TZeQobX6bRnwxwzqYMMbd6XYrh1RfJUQ4dylB C/3j1F5xhkGuBf4WxStRpH7lphrVl1fZZdx8VHo9as0MBsdP+VN/btrNgrRylCe2wVBl MOFDNSolbLQwCY6uuyCOsOFVqqM6mtRaoP+urEotsnMYDtIO9vXfw4gs5P1Q87BVkndp dw4jrotx3C3VE3IuoDgKoe/er0jpVIRUfdNoUw8O+yaoPFgLRi3pkMm9UBWV9TqC+8Lh +fKk6125PaI5Y6cTr4HtkXeHj4w8KisYJ1g5KwDo2XTog/2sYIzwuM4wgaJfc0JeqL1T ti6Q== X-Gm-Message-State: AOAM532qMEGazcp+QXSfNBxzhZzeEGSgMr1KE2LaxBSVhoADYdeUhKQL wO1Ldxc3E6b26GZAQxnTekw= X-Google-Smtp-Source: ABdhPJx6tMdmG+ygTVqQlFYBWBF/TGucO/imQGhOa6blDPlONkVsduvDiRbj+Pj+jBDiw0Sx7xCZhQ== X-Received: by 2002:a63:4418:0:b0:3fd:af26:a795 with SMTP id r24-20020a634418000000b003fdaf26a795mr3173597pga.331.1655189637150; Mon, 13 Jun 2022 23:53:57 -0700 (PDT) Received: from hyeyoo ([114.29.24.243]) by smtp.gmail.com with ESMTPSA id g21-20020aa796b5000000b0051c147eee7bsm6652682pfk.110.2022.06.13.23.53.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 23:53:56 -0700 (PDT) Date: Tue, 14 Jun 2022 15:53:42 +0900 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Dan Williams , Paolo Bonzini , Jane Chu , "Aneesh Kumar K . V" , Sean Christopherson , Tianyu Lan , Mike Rapoport , Rick Edgecombe , linux-mm@kvack.org Cc: Borislav Petkov , x86@kernel.org, Andrea Arcangeli Subject: Re: [RFC 2/2] x86/mm/cpa: drop pgprot_clear_protnone_bits() Message-ID: References: <20220614063933.13030-1-42.hyeyoo@gmail.com> <20220614063933.13030-3-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220614063933.13030-3-42.hyeyoo@gmail.com> ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655189638; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6gbp+f0ha7/MEBYEwDsGGkTu9GRRA0Ql+zk2faGMi5s=; b=isrVI4DuWTuSI4gwr2pVDxdobjmJYZ9yCOtN4OZ3YX9mHrS6eRytuXRVpqXen8G3rih+MP l7S+fKafIPW2MKbacN/0ueRyDPs1CQ7jCn9FuIyFago2KVIHFOH0yBv9lI4b/ldn8amvtr hiV6nsxe0bU7XFvi+UiIeyj14FcvzIU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655189638; a=rsa-sha256; cv=none; b=LJZd7fJcCvC/Pu3//2TjfukwSl9lThalfoxQtSkrWkkZIm+N0WGbk0WAhm16rgQ+urrx8H 8bIyIP2TDkyGsSWvLQP9M7i9z7+9YpxOj4Aygz4w2TP3wZVwzl9ZkFjP8Dqvb28PExEXcK aMilDI53BoI4CXP0sQN4ukgBWTG5wEU= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=Um5QBKLZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf09.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.215.179 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=Um5QBKLZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf09.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.215.179 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com X-Rspamd-Server: rspam12 X-Rspam-User: X-Stat-Signature: fw91g61doo7uw5h78gw37x8cnh77qnur X-Rspamd-Queue-Id: 4CB81140097 X-HE-Tag: 1655189638-745246 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Jun 14, 2022 at 03:39:33PM +0900, Hyeonggon Yoo wrote: > commit a8aed3e0752b4 ("x86/mm/pageattr: Prevent PSE and GLOABL leftovers > to confuse pmd/pte_present and pmd_huge") made CPA clear _PAGE_GLOBAL when > _PAGE_PRESENT is not set. This prevents kernel crashing when kernel reads > a page with !_PAGE_PRESENT and _PAGE_PROTNONE (_PAGE_GLOBAL). And then it > set _PAGE_GLOBAL back when setting _PAGE_PRESENT again. > > After commit d1440b23c922d ("x86/mm: Factor out pageattr _PAGE_GLOBAL > setting") made kernel not set unconditionally _PAGE_GLOBAL, pages lose > global flag after _set_pages_np() and _set_pages_p() are called. > > But after commit 3166851142411 ("x86: skip check for spurious faults for > non-present faults"), spurious_kernel_fault() does not confuse > pte/pmd entries with _PAGE_PROTNONE as present anymore. So simply > drop pgprot_clear_protnone_bits(). Looks like I forgot to Cc: Andrea Arcangeli Plus I did check that kernel does not crash when reading from/writing to non-present pages with this patch applied. > Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> > --- > arch/x86/mm/pat/set_memory.c | 24 ------------------------ > 1 file changed, 24 deletions(-) > > diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c > index 67cf969fed0d..8a8ce8d78694 100644 > --- a/arch/x86/mm/pat/set_memory.c > +++ b/arch/x86/mm/pat/set_memory.c > @@ -746,23 +746,6 @@ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) > #endif > } > > -static pgprot_t pgprot_clear_protnone_bits(pgprot_t prot) > -{ > - /* > - * _PAGE_GLOBAL means "global page" for present PTEs. > - * But, it is also used to indicate _PAGE_PROTNONE > - * for non-present PTEs. > - * > - * This ensures that a _PAGE_GLOBAL PTE going from > - * present to non-present is not confused as > - * _PAGE_PROTNONE. > - */ > - if (!(pgprot_val(prot) & _PAGE_PRESENT)) > - pgprot_val(prot) &= ~_PAGE_GLOBAL; > - > - return prot; > -} > - > static int __should_split_large_page(pte_t *kpte, unsigned long address, > struct cpa_data *cpa) > { > @@ -824,7 +807,6 @@ static int __should_split_large_page(pte_t *kpte, unsigned long address, > * different bit positions in the two formats. > */ > req_prot = pgprot_4k_2_large(req_prot); > - req_prot = pgprot_clear_protnone_bits(req_prot); > if (pgprot_val(req_prot) & _PAGE_PRESENT) > pgprot_val(req_prot) |= _PAGE_PSE; > > @@ -1013,8 +995,6 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address, > return 1; > } > > - ref_prot = pgprot_clear_protnone_bits(ref_prot); > - > /* > * Get the target pfn from the original entry: > */ > @@ -1246,8 +1226,6 @@ static void populate_pte(struct cpa_data *cpa, > > pte = pte_offset_kernel(pmd, start); > > - pgprot = pgprot_clear_protnone_bits(pgprot); > - > while (num_pages-- && start < end) { > set_pte(pte, pfn_pte(cpa->pfn, pgprot)); > > @@ -1542,8 +1520,6 @@ static int __change_page_attr(struct cpa_data *cpa, int primary) > new_prot = static_protections(new_prot, address, pfn, 1, 0, > CPA_PROTECT); > > - new_prot = pgprot_clear_protnone_bits(new_prot); > - > /* > * We need to keep the pfn from the existing PTE, > * after all we're only going to change it's attributes > -- > 2.32.0 > -- Thanks, Hyeonggon