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 66F53C54EBE for ; Tue, 10 Jan 2023 06:17:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A8C678E0002; Tue, 10 Jan 2023 01:17:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A3C3A8E0001; Tue, 10 Jan 2023 01:17:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8DCBB8E0002; Tue, 10 Jan 2023 01:17:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 7FFA88E0001 for ; Tue, 10 Jan 2023 01:17:28 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 475BA40507 for ; Tue, 10 Jan 2023 06:17:28 +0000 (UTC) X-FDA: 80337882576.05.C83B828 Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) by imf13.hostedemail.com (Postfix) with ESMTP id 35FD220006 for ; Tue, 10 Jan 2023 06:17:24 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=shutemov.name header.s=fm1 header.b=ZlDbZsL6; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=QoYvydhj; dmarc=none; spf=pass (imf13.hostedemail.com: domain of kirill@shutemov.name designates 64.147.123.21 as permitted sender) smtp.mailfrom=kirill@shutemov.name ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673331445; 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=hYlkSoI0PLF6Nkqz+NXXc2oNHQRDgQQ+vdlc/JfCbRk=; b=5gDNntIWB2CsySi8T0yG8TeLKzUrqJ8o3CqGPrLieOeuF4jRunTAQUialWCko/sa0wrEnL Uqgu0ajFkwWhU4DB5UNL32XF9HmdosLmOaE4cVH+wmhRyC+LUglQDVeBfQV9JYTU0d3pKx AsXg4Vevf3hsnwoahrJyLpqR2Iadfyc= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=shutemov.name header.s=fm1 header.b=ZlDbZsL6; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=QoYvydhj; dmarc=none; spf=pass (imf13.hostedemail.com: domain of kirill@shutemov.name designates 64.147.123.21 as permitted sender) smtp.mailfrom=kirill@shutemov.name ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673331445; a=rsa-sha256; cv=none; b=wEf6ma54BVCt26ZJRGHdz+Hjm1IVtSqXkydfcc0LasscfItAsi417900FZXnSsUy141+8w cdvbedsz92zox0fl32m3AzrEqPkq7IkoguUDikBFvys+tquEj8luvbRp+Un6ZuMO7SFB2e npt6VFTyseeRdHhKJESpDB0xFuxgmUA= Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id F290A3200994; Tue, 10 Jan 2023 01:17:21 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 10 Jan 2023 01:17:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shutemov.name; h=cc:cc:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:sender :subject:subject:to:to; s=fm1; t=1673331441; x=1673417841; bh=hY lkSoI0PLF6Nkqz+NXXc2oNHQRDgQQ+vdlc/JfCbRk=; b=ZlDbZsL6BOeb+mlKoe LRFnbf6UtVeuiz6uru5aYDJXbWpAAV5HxbzNGFXZZvUVVB7op9dmdWGNgBwlz0RO 7mzoXnsVCa+x06bYcjkmm5d5fu90+KcKjrD6UHyqVx5IMcQRgHkoLw9pfu+j8AaC 71bU+vlIyyhAYS0SyZnCSMXWUhKROT5zwvaefY+YFhlBBXn8qIlaZGNd5N8VWRQj 14caZPumJLeM7WTPGeWHUn7USScx32RVd36Eiuc+F2c3dmYWb+kiFUpYkcN69e0C VEd6W6B1F2Xfbj4Mc/R47woVkgN1Gl9voyR2A3Hkzx+qzlrBATWKGjeAaeqAhhFV +Tvg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1673331441; x=1673417841; bh=hYlkSoI0PLF6Nkqz+NXXc2oNHQRD gQQ+vdlc/JfCbRk=; b=QoYvydhjdX9cioNRmCS+exDCwvp2G5j597G/4smDqhFp c4YcX0DZymKSEcPQRR1DeAp4yw+27wgwh/nzNMA9XH7nx6mFNAAA0TAD+Twv3fnP PtUuJ3w74R/o0QowodK8Do9dm9VrYM6/o/l0WfY8xhXkCQgObGUNpPh05t+Y4Lh+ pWoOrlZIJSeYno/e2uoZq5AOQPM4q84Vl+UQI50W50JLEypaLYYYAtdxv+QUYXnE LEgfZAvYfFdo5wDQfmi5hsdN+OSVdWVDxkaVE3XrRrtwBnjKhj5yZzYElWRJ/Cdr 5t9hjj0mbaM6utnJR7+Q/Lh+dFFdO0mW2HwUnuxhhw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrkeejgdelhecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpeffhffvvefukfhfgggtuggjsehttddttddttddvnecuhfhrohhmpedfmfhirhhi lhhlucetrdcuufhhuhhtvghmohhvfdcuoehkihhrihhllhesshhhuhhtvghmohhvrdhnrg hmvgeqnecuggftrfgrthhtvghrnhephfeigefhtdefhedtfedthefghedutddvueehtedt tdehjeeukeejgeeuiedvkedtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpe hmrghilhhfrhhomhepkhhirhhilhhlsehshhhuthgvmhhovhdrnhgrmhgv X-ME-Proxy: Feedback-ID: ie3994620:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 10 Jan 2023 01:17:20 -0500 (EST) Received: by box.shutemov.name (Postfix, from userid 1000) id C9FFB109BD2; Tue, 10 Jan 2023 09:17:16 +0300 (+03) Date: Tue, 10 Jan 2023 09:17:16 +0300 From: "Kirill A. Shutemov" To: "Edgecombe, Rick P" Cc: "kirill.shutemov@linux.intel.com" , "peterz@infradead.org" , "Lutomirski, Andy" , "dave.hansen@linux.intel.com" , "linux-kernel@vger.kernel.org" , "Raj, Ashok" , "hjl.tools@gmail.com" , "Torvalds, Linus" , "linux-mm@kvack.org" , "kcc@google.com" , "andreyknvl@gmail.com" , "ak@linux.intel.com" , "dvyukov@google.com" , "x86@kernel.org" , "jacob.jun.pan@linux.intel.com" , "tarasmadan@google.com" , "bharata@amd.com" , "ryabinin.a.a@gmail.com" , "glider@google.com" Subject: Re: [PATCHv13 06/16] x86/mm: Provide arch_prctl() interface for LAM Message-ID: <20230110061716.tcy74yseydbaeqjo@box.shutemov.name> References: <20221227030829.12508-1-kirill.shutemov@linux.intel.com> <20221227030829.12508-7-kirill.shutemov@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 35FD220006 X-Stat-Signature: wzrinha3t8wy6e877g1hbzot7a6391b7 X-HE-Tag: 1673331444-144047 X-HE-Meta: U2FsdGVkX19wIOApjjHypLJfpjnleqJx4HMqaef2KjMsfLoc73kbC5moCM3z7FaRbKWSFP+bUgRDKO1a44dO6qSs9OzZHlzJL0/UGASJQ9lBYbOb79qQhSlH+W8I86nnaSKqsf66mixS5MJWeG82ZdU9+PNGGhquen5I42qj71UsIGKQPtB5940yUYz5AeTYipmiUF4sWa5Dii0dGHyLVcXVgVP0DGO97qUIHJl0JToGIzkZ4kqjG6ht7OooBle/g+dgCbFNv+HJSvsq7u+uMG2r2Z0oQvHuUZxNjBIzjuNk/PtftqdQj0h7wkXmxPAbQs++R7I0pLYGi/rS69Kszf3FPqPJF7M2+aH8Vy1FDDL2TgVcCR9HQoEe7RNGNiETNbwaoaAvjofMck+pQ99A04uO69ZiOjJJ+Vwv7Y2ZurSVNmexK77gcbjiWh2i78HAgW68UyPD0GmKY02SzFJShiWDF+wdCHCwwUoKV5pU2fMfI5oX+BVN92eN0+0QiOwR6Mj9TmHFuddTfLCOHCcllLel8H0uNgKNZdcpxi7L2NvIvVkdjVUgtJP2K3JSBaIMRvBrq9vaiNTx+feRyA+nMrVueXpiyF7WnOyU0WwVHCqauemaLAU5Mel03vLntKXHraCiKaA4DY+I0tCVQcSTFSBfo/JMchRUF7XYgm1SaEcvxRck9xDXpnOyjsXIzlR/zTyGH5Xs9CUaIcsoTT3/Bt8UeNWD238gowxZ9SypvH8UEWrjFpI263EZmDpAdE6QfXSUZudWKGFmwwUpGDZucygY8NYLb0oFMuHyrwzx05TM8cJ/0Vr+Eq1nMHMKyMcBAQkiu5HOKqsmxIKLS9CUapeGj/8IxY4O3um4mEZ0RwFSKHWGOqEC7/zSdIFXQdQiKwxjAuRJu7s522PW2Xf1LxdjoxelasPULY/m5YcA8xdIQVs2ukj3yy4SJknHRcTvfZsf6S76Jvn+6Y+zRSa M9ixCLeD AAl+gjlKTnM4aUR9gkhbExNlkP70klxBCslaKNNLvfzp/yAyBBnsRz/LVnldqocvtlzOlasMaFH4vTo9gB7BC3FVe5qPY1vTUw44HVauavXhRZDCFFpbvSS4QzXROX/rcIEX1k8AhtlrMu2s= 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 Wed, Jan 04, 2023 at 07:55:45PM +0000, Edgecombe, Rick P wrote: > On Tue, 2022-12-27 at 06:08 +0300, Kirill A. Shutemov wrote: > > Add a couple of arch_prctl() handles: > > > > - ARCH_ENABLE_TAGGED_ADDR enabled LAM. The argument is required > > number > > of tag bits. It is rounded up to the nearest LAM mode that can > > provide it. For now only LAM_U57 is supported, with 6 tag bits. > > > > - ARCH_GET_UNTAG_MASK returns untag mask. It can indicates where tag > > bits located in the address. > > > > - ARCH_GET_MAX_TAG_BITS returns the maximum tag bits user can > > request. > > Zero if LAM is not supported. > > > > Signed-off-by: Kirill A. Shutemov > > --- > > arch/x86/include/asm/mmu.h | 2 ++ > > arch/x86/include/uapi/asm/prctl.h | 4 +++ > > arch/x86/kernel/process.c | 3 +++ > > arch/x86/kernel/process_64.c | 44 > > ++++++++++++++++++++++++++++++- > > 4 files changed, 52 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h > > index ed72fcd2292d..54e4a3e9b5c5 100644 > > --- a/arch/x86/include/asm/mmu.h > > +++ b/arch/x86/include/asm/mmu.h > > @@ -12,6 +12,8 @@ > > #define MM_CONTEXT_UPROBE_IA32 0 > > /* vsyscall page is accessible on this MM */ > > #define MM_CONTEXT_HAS_VSYSCALL 1 > > +/* Do not allow changing LAM mode */ > > +#define MM_CONTEXT_LOCK_LAM 2 > > > > /* > > * x86 has arch-specific MMU state beyond what lives in mm_struct. > > diff --git a/arch/x86/include/uapi/asm/prctl.h > > b/arch/x86/include/uapi/asm/prctl.h > > index 500b96e71f18..a31e27b95b19 100644 > > --- a/arch/x86/include/uapi/asm/prctl.h > > +++ b/arch/x86/include/uapi/asm/prctl.h > > @@ -20,4 +20,8 @@ > > #define ARCH_MAP_VDSO_32 0x2002 > > #define ARCH_MAP_VDSO_64 0x2003 > > > > +#define ARCH_GET_UNTAG_MASK 0x4001 > > +#define ARCH_ENABLE_TAGGED_ADDR 0x4002 > > +#define ARCH_GET_MAX_TAG_BITS 0x4003 > > + > > #endif /* _ASM_X86_PRCTL_H */ > > diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c > > index ef6bde1d40d8..cc0677f58f42 100644 > > --- a/arch/x86/kernel/process.c > > +++ b/arch/x86/kernel/process.c > > @@ -162,6 +162,9 @@ int copy_thread(struct task_struct *p, const > > struct kernel_clone_args *args) > > > > savesegment(es, p->thread.es); > > savesegment(ds, p->thread.ds); > > + > > + if (p->mm && (clone_flags & (CLONE_VM | CLONE_VFORK)) == > > CLONE_VM) > > + set_bit(MM_CONTEXT_LOCK_LAM, &p->mm->context.flags); > > #else > > p->thread.sp0 = (unsigned long) (childregs + 1); > > savesegment(gs, p->thread.gs); > > diff --git a/arch/x86/kernel/process_64.c > > b/arch/x86/kernel/process_64.c > > index 8b06034e8c70..fef127ed79b6 100644 > > --- a/arch/x86/kernel/process_64.c > > +++ b/arch/x86/kernel/process_64.c > > @@ -743,6 +743,39 @@ static long prctl_map_vdso(const struct > > vdso_image *image, unsigned long addr) > > } > > #endif > > > > +#define LAM_U57_BITS 6 > > + > > +static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned > > long nr_bits) > > +{ > > + if (!cpu_feature_enabled(X86_FEATURE_LAM)) > > + return -ENODEV; > > + > > + if (test_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags)) > > + return -EBUSY; > > Since this bit doesn't get set on vfork, you might be able to work > around this by enabling LAM in a vforked task, then enabling it again > after returning to the parent. I don't think so. Yes, child can enable LAM after vfork(), but it will set the flag, so parent won't be able to enable it again. And there's no cuncurency between parent and child due to vfork() semantics. Anyway, I will move the check inside mmap lock. It may clarify situation for a reader. > > + > > + if (mmap_write_lock_killable(mm)) > > + return -EINTR; > > + > > + if (!nr_bits) { > > + mmap_write_unlock(mm); > > + return -EINVAL; > > + } else if (nr_bits <= LAM_U57_BITS) { > > + mm->context.lam_cr3_mask = X86_CR3_LAM_U57; > > + mm->context.untag_mask = ~GENMASK(62, 57); > > + } else { > > + mmap_write_unlock(mm); > > + return -EINVAL; > > + } > > + > > + write_cr3(__read_cr3() | mm->context.lam_cr3_mask); > > mm might not be from the current task if it came from > PTRACE_ARCH_PRCTL, so then this would write to the wrong CR3. Maybe for > simplicity just return an error if task != current. Oh. Forgot about PTRACE_ARCH_PRCTL. Yes, will add the check. -- Kiryl Shutsemau / Kirill A. Shutemov