From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk1-f176.google.com (mail-vk1-f176.google.com [209.85.221.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7B402F8BEE for ; Mon, 23 Mar 2026 18:43:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.221.176 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774291417; cv=pass; b=GAoRTQbgYqPyLM37uxvT+qg7OD9u+kPM6ssUveztYx0rX8LUR/zGWveS/7Gc+bBRUwT9DUomiNvKYLj3OUf7ouybVPjab2Q3zSIEKxrlyslpoSBqWfcofJH7+HmAzbqMZfbYQ3fKw1B9QbgaOUUm4znIAPLWXj38aC0DamRid+M= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774291417; c=relaxed/simple; bh=8iR09lTQ4Edfh1UQkmolcFNIjMuLzSLKVF5JEj/9nwQ=; h=From:In-Reply-To:References:MIME-Version:Date:Message-ID:Subject: To:Cc:Content-Type; b=dDsUcV+gC9uzigz5SCp5haT1Fq4HNxvkqoubxdRskctKo1LwUHgUQt5p/94Qx8x0ZcJZHSp73PUvQmOxR70778nLcSpwCJkxfcapl/VfjmfRdDNHZC4er1hTWwhr7HAotNvXZhfBjXEJcMOH5Ji7kJ2x6BD3FqwKsdsL4xr6a8o= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=BFE/MqnH; arc=pass smtp.client-ip=209.85.221.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="BFE/MqnH" Received: by mail-vk1-f176.google.com with SMTP id 71dfb90a1353d-56cde28a9b6so1282297e0c.3 for ; Mon, 23 Mar 2026 11:43:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774291413; cv=none; d=google.com; s=arc-20240605; b=hMWl3kpUGa4Vwnwl/W9iqpdjgNzE735tLJUSm/wwmf1dVxQBSFt6WyIh0K2MkAW5e5 7E7Px9LH/Ezk1h1A/5U3lSTLirDRBtuQ3c6TKCsPOGmomVZCfkLngWp1LSB7zF/N/36R jvdPD+2jUSh74euoc+jiNFPc6ucX71T2ISU0RDiHFBinSnCV3abXpL3qzV3IAQqOVCX9 5nlx+oSRrxn0c/8f5Sy14Cu/rR+s/6q3wIBjKe1YpclIRgNijlLK3EJyhwv1eiLCYYXA MlFTQOg27+twDvLaTaWeJw9YkLiZXLM6yhRnXCT0D7cZXHQ5lCwa/9TarDJcmorOFBCh nPNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:dkim-signature; bh=jJ1uKbr2A9AcnUKDcibCUYQIsuprIaoAVD4N5Jh2tIQ=; fh=nk7MHJTLC5jODDVW2U0MG/Q00UMhhyHBZ/Ps1JNBpzI=; b=Tfo2fjLRmsOvPcbCfS7nhz8cIlg0k++IuDGS8QL9paPHFtn2zigb/YHczkXcVLKFDM ooeQGD20DfDbzu/l5Mj3mMOstYBXJ+iPh/fu9xMLK7m74Z21Pu/nMpJc11UdvP7I3MML ySxyqUbQASKnAyCy7zLytuy4TS0QGu9iZGqTV6kuD5X77mEMbmSVL4NnWI+v16OHUdNJ hKyxikETweJy5jSSUIPklO++IDVaaowVt0j0UsEDi72jLQxIG6PpHqRjT4HkGgL+3rA4 nzxFdqK6p1kx7aSGgt5M4RXwf83tj3gKVQXYhqnjeuw1hEcYWAwLFhL50QJCQHmMx2AB Ytpg==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774291413; x=1774896213; darn=vger.kernel.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=jJ1uKbr2A9AcnUKDcibCUYQIsuprIaoAVD4N5Jh2tIQ=; b=BFE/MqnHyJEb2bXhOAAC42up0lIIBMrfoEaUX8sgL/fCQ+OsWy9jEUrxjg9bcJmPoy fFh8bXLK5ID3vOGVhKEVc7GAF51PL1t9OKV3RWP9X5s8vEosDUsRJlD3uvkHsm8gQJq2 yLHP8cRadcr3bXcEbThsxn/zkicUhrGIYaE6OdJ72LqX74hGBAw25CKruf7r9f4qNORH sjBANVlN4x99JT3IOFRxsfjxUDwhL7j/ysJO/DTg5EQHHCWh0q2njy/Tk2gB0a9h0PTK 0OzzbUqBAFPI16UIfWf3j6fxHMwr0c5rjIDHEfL9KU6Ipera8Z+VPiV3ARshGnuLrl83 3Plw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774291413; x=1774896213; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jJ1uKbr2A9AcnUKDcibCUYQIsuprIaoAVD4N5Jh2tIQ=; b=kXOU63eBrlbSOZQGNhNIuBYqF06h5FgFqdzX+c0q2DdH530EU0UpXva0A8bltTaz6z ysbsPjq+xTJJGEq+HrCDf1jQOM8O/qIjQGbjaVXGH5WkFwCCNfLgBI5Nx5+N0IVVrH8M 9z9bZwoL+3vCX2BvUweetBRO4TbQQ2Hq1gO6liIMlix19kel7lQTZOIlHdvcTGw9/Tae jbJJmnGRptxHp8nbzJWRTv66YC/x+C1guCe9jxldb6qF2Un7KoUQIWdZ3JvvBIaGTrL2 h6DPgxHLHhnPR7FHFblQamWvvQA8cBmCa5OrvPUPLXEk4wEK6bU3rvpvGE6CLBfyedib pOrg== X-Forwarded-Encrypted: i=1; AJvYcCXUDdN9OT4t8QvJuzibB4RHvDg8XoFH0DghAHyTTYPRcELsXxfz/P2RR6vjUd1ghK2+dwCCnfW5ij1+/zI=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9SAviMCrBhcz+HHqlXCx7Ka7J6Zg61xPb8YK+Re61yrqGuOQi OdxFRgoKPZONW4iil4ScMMf8DvUrAESfCkqndnXE/WiLLVA9nYSN9KliT1Cwp/eL4HeJjb4c7yU DZXwseYlCCw8zizT1E2uJykJyYAwSy7tT9Vq3e4mp X-Gm-Gg: ATEYQzz6YLhUmL2cgKDN1Yw1PoQ/DE/puNvuidSjVY8PfaaeDKBreYfUqqqTetKXQjy O7LLleAgnpkc3xpozk0jcM7wpILSQcM1IjUujZ1YiGqbk9ij9ZGKL/mNF9I7RXJh2Ch/efWjqZJ DtICk7pUwsju771Yrdq2JZuPp4zXlbeDpcpJU9C7eTWlRaZYY9tL+aeOW7dTp6c2Ct5cOLA3PFz LnomJVlyothZmZRExTmmd1vasvABafa6h/jr3swfzhqfn16ESfYBaQy5hus/o0uMBcuK0DMD3g9 ydfjttH6fPwwXYgLJ3AV2BW9o1067Ag0syfUusJWEwROQTCZKrsOmkJjwxd2has20brSRQ== X-Received: by 2002:a05:6122:3c54:b0:566:2711:d8ab with SMTP id 71dfb90a1353d-56cde344094mr6273796e0c.6.1774291412097; Mon, 23 Mar 2026 11:43:32 -0700 (PDT) Received: from 176938342045 named unknown by gmailapi.google.com with HTTPREST; Mon, 23 Mar 2026 11:43:31 -0700 Received: from 176938342045 named unknown by gmailapi.google.com with HTTPREST; Mon, 23 Mar 2026 11:43:31 -0700 From: Ackerley Tng In-Reply-To: <20260317141031.514-3-kalyazin@amazon.com> References: <20260317141031.514-1-kalyazin@amazon.com> <20260317141031.514-3-kalyazin@amazon.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Mon, 23 Mar 2026 11:43:31 -0700 X-Gm-Features: AQROBzAKG1Xpk4hVDWY3sqqSXNvIKws3qrAExzeSImrnNlU_ii0wYSbiIV_SQDw Message-ID: Subject: Re: [PATCH v11 02/16] set_memory: add folio_{zap,restore}_direct_map helpers To: "Kalyazin, Nikita" , "kvm@vger.kernel.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.linux.dev" , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" , "bpf@vger.kernel.org" , "linux-kselftest@vger.kernel.org" , "kernel@xen0n.name" , "linux-riscv@lists.infradead.org" , "linux-s390@vger.kernel.org" , "loongarch@lists.linux.dev" , "linux-pm@vger.kernel.org" Cc: "pbonzini@redhat.com" , "corbet@lwn.net" , "maz@kernel.org" , "oupton@kernel.org" , "joey.gouly@arm.com" , "suzuki.poulose@arm.com" , "yuzenghui@huawei.com" , "catalin.marinas@arm.com" , "will@kernel.org" , "seanjc@google.com" , "tglx@kernel.org" , "mingo@redhat.com" , "bp@alien8.de" , "dave.hansen@linux.intel.com" , "x86@kernel.org" , "hpa@zytor.com" , "luto@kernel.org" , "peterz@infradead.org" , "willy@infradead.org" , "akpm@linux-foundation.org" , "david@kernel.org" , "lorenzo.stoakes@oracle.com" , "vbabka@kernel.org" , "rppt@kernel.org" , "surenb@google.com" , "mhocko@suse.com" , "ast@kernel.org" , "daniel@iogearbox.net" , "andrii@kernel.org" , "martin.lau@linux.dev" , "eddyz87@gmail.com" , "song@kernel.org" , "yonghong.song@linux.dev" , "john.fastabend@gmail.com" , "kpsingh@kernel.org" , "sdf@fomichev.me" , "haoluo@google.com" , "jolsa@kernel.org" , "jgg@ziepe.ca" , "jhubbard@nvidia.com" , "peterx@redhat.com" , "jannh@google.com" , "pfalcato@suse.de" , "skhan@linuxfoundation.org" , "riel@surriel.com" , "ryan.roberts@arm.com" , "jgross@suse.com" , "yu-cheng.yu@intel.com" , "kas@kernel.org" , "coxu@redhat.com" , "kevin.brodsky@arm.com" , "yosry@kernel.org" , "ajones@ventanamicro.com" , "maobibo@loongson.cn" , "tabba@google.com" , "prsampat@amd.com" , "wu.fei9@sanechips.com.cn" , "mlevitsk@redhat.com" , "jmattson@google.com" , "jthoughton@google.com" , "agordeev@linux.ibm.com" , "alex@ghiti.fr" , "aou@eecs.berkeley.edu" , "borntraeger@linux.ibm.com" , "chenhuacai@kernel.org" , "dev.jain@arm.com" , "gor@linux.ibm.com" , "hca@linux.ibm.com" , "palmer@dabbelt.com" , "pjw@kernel.org" , "shijie@os.amperecomputing.com" , "svens@linux.ibm.com" , "thuth@redhat.com" , "wyihan@google.com" , "yang@os.amperecomputing.com" , "Jonathan.Cameron@huawei.com" , "Liam.Howlett@oracle.com" , "urezki@gmail.com" , "zhengqi.arch@bytedance.com" , "gerald.schaefer@linux.ibm.com" , "jiayuan.chen@shopee.com" , "lenb@kernel.org" , "osalvador@suse.de" , "pavel@kernel.org" , "rafael@kernel.org" , "vannapurve@google.com" , "jackmanb@google.com" , "aneesh.kumar@kernel.org" , "patrick.roy@linux.dev" , "Thomson, Jack" , "Itazuri, Takahiro" , "Manwaring, Derek" Content-Type: text/plain; charset="UTF-8" "Kalyazin, Nikita" writes: > From: Nikita Kalyazin > > Let's provide folio_{zap,restore}_direct_map helpers as preparation for > supporting removal of the direct map for guest_memfd folios. > In folio_zap_direct_map(), flush TLB to make sure the data is not > accessible. > > The new helpers need to be accessible to KVM on architectures that > support guest_memfd (x86 and arm64). > > Direct map removal gives guest_memfd the same protection that > memfd_secret does, such as hardening against Spectre-like attacks > through in-kernel gadgets. > > Signed-off-by: Nikita Kalyazin > --- > include/linux/set_memory.h | 13 ++++++++++++ > mm/memory.c | 42 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 55 insertions(+) > > diff --git a/include/linux/set_memory.h b/include/linux/set_memory.h > index 1a2563f525fc..24caea2931f9 100644 > --- a/include/linux/set_memory.h > +++ b/include/linux/set_memory.h > @@ -41,6 +41,15 @@ static inline int set_direct_map_valid_noflush(const void *addr, > return 0; > } > > +static inline int folio_zap_direct_map(struct folio *folio) > +{ > + return 0; > +} > + > +static inline void folio_restore_direct_map(struct folio *folio) > +{ > +} > + > static inline bool kernel_page_present(struct page *page) > { > return true; > @@ -57,6 +66,10 @@ static inline bool can_set_direct_map(void) > } > #define can_set_direct_map can_set_direct_map > #endif > + > +int folio_zap_direct_map(struct folio *folio); > +void folio_restore_direct_map(struct folio *folio); > + > #endif /* CONFIG_ARCH_HAS_SET_DIRECT_MAP */ > > #ifdef CONFIG_X86_64 > diff --git a/mm/memory.c b/mm/memory.c > index 07778814b4a8..cab6bb237fc0 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -78,6 +78,7 @@ > #include > #include > #include > +#include > > #include > > @@ -7478,3 +7479,44 @@ void vma_pgtable_walk_end(struct vm_area_struct *vma) > if (is_vm_hugetlb_page(vma)) > hugetlb_vma_unlock_read(vma); > } > + > +#ifdef CONFIG_ARCH_HAS_SET_DIRECT_MAP > +/** > + * folio_zap_direct_map - remove a folio from the kernel direct map > + * @folio: folio to remove from the direct map > + * > + * Removes the folio from the kernel direct map and flushes the TLB. This may > + * require splitting huge pages in the direct map, which can fail due to memory > + * allocation. > + * > + * Return: 0 on success, or a negative error code on failure. > + */ > +int folio_zap_direct_map(struct folio *folio) > +{ > + const void *addr = folio_address(folio); > + int ret; > + > + ret = set_direct_map_valid_noflush(addr, folio_nr_pages(folio), false); > + flush_tlb_kernel_range((unsigned long)addr, > + (unsigned long)addr + folio_size(folio)); > + > + return ret; > +} > +EXPORT_SYMBOL_FOR_MODULES(folio_zap_direct_map, "kvm"); > + > +/** > + * folio_restore_direct_map - restore the kernel direct map entry for a folio > + * @folio: folio whose direct map entry is to be restored > + * > + * This may only be called after a prior successful folio_zap_direct_map() on > + * the same folio. Because the zap will have already split any huge pages in > + * the direct map, restoration here only updates protection bits and cannot > + * fail. > + */ > +void folio_restore_direct_map(struct folio *folio) > +{ > + WARN_ON_ONCE(set_direct_map_valid_noflush(folio_address(folio), > + folio_nr_pages(folio), true)); > +} > +EXPORT_SYMBOL_FOR_MODULES(folio_restore_direct_map, "kvm"); > +#endif /* CONFIG_ARCH_HAS_SET_DIRECT_MAP */ > -- > 2.50.1 Reviewed-by: Ackerley Tng I also took a look at Sashiko's [1] comments and I think that the highmem folio issues should be the responsibility of the caller to check. [1] https://sashiko.dev/#/patchset/20260317141031.514-1-kalyazin%40amazon.com