From: Catalin Marinas <catalin.marinas@arm.com> To: Mike Rapoport <rppt@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org>, Alexander Viro <viro@zeniv.linux.org.uk>, Andy Lutomirski <luto@kernel.org>, Arnd Bergmann <arnd@arndb.de>, Borislav Petkov <bp@alien8.de>, Christopher Lameter <cl@linux.com>, Dan Williams <dan.j.williams@intel.com>, Dave Hansen <dave.hansen@linux.intel.com>, David Hildenbrand <david@redhat.com>, Elena Reshetova <elena.reshetova@intel.com>, "H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>, James Bottomley <jejb@linux.ibm.com>, "Kirill A. Shutemov" <kirill@shutemov.name>, Matthew Wilcox <willy@infradead.org>, Mark Rutland <mark.rutland@arm.com>, Mike Rapoport <rppt@linux.ibm.com>, Michael Kerrisk <mtk.manpages@gmail.com>, Palmer Dabbelt <palmer@dabbelt.com>, Paul Walmsley <paul.walmsley@sifive.com>, Peter Zijlstra <peterz@infradead.org>, Rick Edgecombe <rick.p.edgecombe@intel.com>, Roman Gushchin <guro@fb.com>, Shuah Khan <shuah@kernel.org>, Thomas Gleixner <tglx@linutronix.de>, Tycho Andersen <tycho@tycho.ws>, Will Deacon <will@kernel.org>, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-nvdimm@lists.01.org, linux-riscv@lists.infradead.org, x86@kernel.org, Hagen Paul Pfeifer <hagen@jauu.net> Subject: Re: [PATCH v11 4/9] mm: introduce memfd_secret system call to create "secret" memory areas Date: Tue, 24 Nov 2020 10:59:48 +0000 [thread overview] Message-ID: <20201124105947.GA5527@gaia> (raw) In-Reply-To: <20201124092556.12009-5-rppt@kernel.org> Hi Mike, On Tue, Nov 24, 2020 at 11:25:51AM +0200, Mike Rapoport wrote: > +static vm_fault_t secretmem_fault(struct vm_fault *vmf) > +{ > + struct address_space *mapping = vmf->vma->vm_file->f_mapping; > + struct inode *inode = file_inode(vmf->vma->vm_file); > + pgoff_t offset = vmf->pgoff; > + vm_fault_t ret = 0; > + unsigned long addr; > + struct page *page; > + int err; > + > + if (((loff_t)vmf->pgoff << PAGE_SHIFT) >= i_size_read(inode)) > + return vmf_error(-EINVAL); > + > + page = find_get_page(mapping, offset); > + if (!page) { > + > + page = secretmem_alloc_page(vmf->gfp_mask); > + if (!page) > + return vmf_error(-ENOMEM); > + > + err = add_to_page_cache(page, mapping, offset, vmf->gfp_mask); > + if (unlikely(err)) > + goto err_put_page; > + > + err = set_direct_map_invalid_noflush(page, 1); > + if (err) > + goto err_del_page_cache; On arm64, set_direct_map_default_noflush() returns 0 if !rodata_full but no pgtable changes happen since the linear map can be a mix of small and huge pages. The arm64 implementation doesn't break large mappings. I presume we don't want to tell the user that the designated memory is "secret" but the kernel silently ignored it. We could change the arm64 set_direct_map* to return an error, however, I think it would be pretty unexpected for the user to get a fault when trying to access it. It may be better to return a -ENOSYS or something on the actual syscall if the fault-in wouldn't be allowed later. Alternatively, we could make the linear map always use pages on arm64, irrespective of other config or cmdline options (maybe not justified unless we have clear memsecret users). Yet another idea is to get set_direct_map* to break pmd/pud mappings into pte but that's not always possible without a stop_machine() and potentially disabling the MMU. > + > + addr = (unsigned long)page_address(page); > + flush_tlb_kernel_range(addr, addr + PAGE_SIZE); > + > + __SetPageUptodate(page); > + > + ret = VM_FAULT_LOCKED; > + } > + > + vmf->page = page; > + return ret; > + > +err_del_page_cache: > + delete_from_page_cache(page); > +err_put_page: > + put_page(page); > + return vmf_error(err); > +} -- Catalin
next prev parent reply other threads:[~2020-11-24 11:00 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-24 9:25 [PATCH v11 0/9] " Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 1/9] mm: add definition of PMD_PAGE_ORDER Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 2/9] mmap: make mlock_future_check() global Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 3/9] set_memory: allow set_direct_map_*_noflush() for multiple pages Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 4/9] mm: introduce memfd_secret system call to create "secret" memory areas Mike Rapoport 2020-11-24 10:59 ` Catalin Marinas [this message] 2020-11-24 16:49 ` Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 5/9] secretmem: use PMD-size pages to amortize direct map fragmentation Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 6/9] secretmem: add memcg accounting Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 7/9] PM: hibernate: disable when there are active secretmem users Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 8/9] arch, mm: wire up memfd_secret system call were relevant Mike Rapoport 2020-11-24 9:25 ` [PATCH v11 9/9] secretmem: test: add basic selftest for memfd_secret(2) Mike Rapoport
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201124105947.GA5527@gaia \ --to=catalin.marinas@arm.com \ --cc=akpm@linux-foundation.org \ --cc=arnd@arndb.de \ --cc=bp@alien8.de \ --cc=cl@linux.com \ --cc=dan.j.williams@intel.com \ --cc=dave.hansen@linux.intel.com \ --cc=david@redhat.com \ --cc=elena.reshetova@intel.com \ --cc=guro@fb.com \ --cc=hagen@jauu.net \ --cc=hpa@zytor.com \ --cc=jejb@linux.ibm.com \ --cc=kirill@shutemov.name \ --cc=linux-api@vger.kernel.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-kselftest@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-riscv@lists.infradead.org \ --cc=luto@kernel.org \ --cc=mark.rutland@arm.com \ --cc=mingo@redhat.com \ --cc=mtk.manpages@gmail.com \ --cc=palmer@dabbelt.com \ --cc=paul.walmsley@sifive.com \ --cc=peterz@infradead.org \ --cc=rick.p.edgecombe@intel.com \ --cc=rppt@kernel.org \ --cc=rppt@linux.ibm.com \ --cc=shuah@kernel.org \ --cc=tglx@linutronix.de \ --cc=tycho@tycho.ws \ --cc=viro@zeniv.linux.org.uk \ --cc=will@kernel.org \ --cc=willy@infradead.org \ --cc=x86@kernel.org \ --subject='Re: [PATCH v11 4/9] mm: introduce memfd_secret system call to create "secret" memory areas' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).