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 B0E27C433EF for ; Wed, 20 Jul 2022 12:54:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 271FC6B0072; Wed, 20 Jul 2022 08:54:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 205376B0073; Wed, 20 Jul 2022 08:54:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 076F16B0074; Wed, 20 Jul 2022 08:54:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id E9FC36B0072 for ; Wed, 20 Jul 2022 08:54:48 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id BB5FAAADA9 for ; Wed, 20 Jul 2022 12:54:48 +0000 (UTC) X-FDA: 79707472656.10.F4BEB32 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) by imf31.hostedemail.com (Postfix) with ESMTP id 701F420011 for ; Wed, 20 Jul 2022 12:54:48 +0000 (UTC) Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-2ef5380669cso172459457b3.9 for ; Wed, 20 Jul 2022 05:54:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=6MykNSDF0KUYwibjFBCq3b0ORJmu6ip9JuWhi6SSOJE=; b=eRXP3aCEx2lmpbN1KMjrNmfySXHDiGacVKvvkNNcObLw98s9l+ev1IvPSySX8BPEph bgh7pAfvWTSZy2HGa06DzFO6xjSnavfj/svQNfk5g7WSrOk+entTk2uuNq8ifxl9noYI 0tbNuJtSO2A/yfns2+zlOvOOFhcM6a1+ODv51UVstAnrcgxQQbPNE6aZRAxkVXSaUjTj zbKBGxCDdh3xvUMiHVcYMDJ3YzOzc/LKgPmpj8yx+lx8UwFIJRm5ARfGsS0UlFtxUIhN pKBf8geZpn1a8pe3VSb1eKl9YZv7P+Vs94ggCR9IZ0+HUHYF//44UcHZ1QtcVTMlhCoz Oydg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=6MykNSDF0KUYwibjFBCq3b0ORJmu6ip9JuWhi6SSOJE=; b=QCL6ekxk7wDadFkIy53wJ3RdCu92Rk4uWEWg71SsWi/YKzHKGgtOWn6FVlPECxWzYP bR7aceRQLtjTwxiS8Aaf/MvpCq65FZhVWLtGyQ+yHNmvYSoHly4JS1MAbUrGSSv8CnbE G7S9qu5hm+eB6Wqb2pqax94/Dy77YXhe181bTrMZODlA0PhCWPa/cFdfEFXdVRUGiUcz D+sYgr+IZkKwXLZlkZKzZXK0zh+yq7a1f4t3JIMGq3IN9Ioa964DVHWQjt/Kj7Vb+OEs JJfDxsJYbNrAnu4GAcPmd+0C9VVsPgHENKxs3OnPkWt3qBLGeLma9isuTQwlNhBxd//Z b5nQ== X-Gm-Message-State: AJIora9d+h7hbFI47cFXDN5iVMy9iG6Igf25NNs+7qHrulu6cyude16V R6EutVRTxqv4ZD6Dlz+Pq/gp1OnXEOONI1/dtdp0Rg== X-Google-Smtp-Source: AGRyM1tvgZw3TvNks8earHHPypZ3GgiwZagklNOYPg68FGcg5fLePl2BPJIBtYJ9gHR4yn5Bz65QeAXHP4uFcOAmFP0= X-Received: by 2002:a81:9148:0:b0:31e:6dd4:3efb with SMTP id i69-20020a819148000000b0031e6dd43efbmr2250686ywg.437.1658321687514; Wed, 20 Jul 2022 05:54:47 -0700 (PDT) MIME-Version: 1.0 References: <20220712231328.5294-1-kirill.shutemov@linux.intel.com> <20220712231328.5294-7-kirill.shutemov@linux.intel.com> <20220720005724.mwodxwm5r5gayqrm@black.fi.intel.com> <20220720124744.rpvns3nda7jfljgn@black.fi.intel.com> In-Reply-To: <20220720124744.rpvns3nda7jfljgn@black.fi.intel.com> From: Alexander Potapenko Date: Wed, 20 Jul 2022 14:54:11 +0200 Message-ID: Subject: Re: [PATCHv5 06/13] x86/mm: Provide ARCH_GET_UNTAG_MASK and ARCH_ENABLE_TAGGED_ADDR To: "Kirill A. Shutemov" Cc: Dave Hansen , Andy Lutomirski , Peter Zijlstra , "the arch/x86 maintainers" , Kostya Serebryany , Andrey Ryabinin , Andrey Konovalov , Taras Madan , Dmitry Vyukov , "H . J . Lu" , Andi Kleen , Rick Edgecombe , Linux Memory Management List , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable ARC-Authentication-Results: i=1; imf31.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=eRXP3aCE; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf31.hostedemail.com: domain of glider@google.com designates 209.85.128.169 as permitted sender) smtp.mailfrom=glider@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1658321688; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6MykNSDF0KUYwibjFBCq3b0ORJmu6ip9JuWhi6SSOJE=; b=SFZUywIk7Rufpuv6/qlkL7s1gjnWhBILJpHRURXkJlmmE2d13KgVejusF5uC2xujgeGfkA nOq2O+OKNYy4AARkSb+269siyUFmMXQccKA06DLTxuVHPjpxRRF7pxsQBAu5oHzFKXwz8i rrD2LbhFbuihyXub5U45Cm8LEYSy23Q= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1658321688; a=rsa-sha256; cv=none; b=ycavAsgSHvR+f/+3ujzny9FK3yAOT1kNZ+oGXch0P5sZTSNxbKKlnibHQJQw45LJhJCeJa QTTWGI2BLg2vSxU7l8xNl9C6cHt0yqRp8Wa7XGvhMfapEwjaNjCQliHG1DRJK5caGNPV8x FB3fVHImc5FYV1i8z8Hj8c3WEnK2XI4= X-Rspamd-Queue-Id: 701F420011 Authentication-Results: imf31.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=eRXP3aCE; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf31.hostedemail.com: domain of glider@google.com designates 209.85.128.169 as permitted sender) smtp.mailfrom=glider@google.com X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: bqjgaokg154m6i8fk738ibfhi1tjrhqc X-HE-Tag: 1658321688-524163 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, Jul 20, 2022 at 2:47 PM Kirill A. Shutemov wrote: > > On Wed, Jul 20, 2022 at 10:19:36AM +0200, Alexander Potapenko wrote: > > > > > long do_arch_prctl_64(struct task_struct *task, int option, unsi= gned long arg2) > > > > > { > > > > > int ret =3D 0; > > > > > @@ -829,7 +883,11 @@ long do_arch_prctl_64(struct task_struct *ta= sk, int option, unsigned long arg2) > > > > > case ARCH_MAP_VDSO_64: > > > > > return prctl_map_vdso(&vdso_image_64, arg2); > > > > > #endif > > > > > - > > > > > + case ARCH_GET_UNTAG_MASK: > > > > > + return put_user(task->mm->context.untag_mask, > > > > > + (unsigned long __user *)arg2); > > > > > > > > Can we have ARCH_GET_UNTAG_MASK return the same error value (ENODEV= or > > > > EINVAL) as ARCH_ENABLE_TAGGED_ADDR in the case the host doesn't > > > > support LAM? > > > > After all, the mask does not make much sense in this case. > > > > > > I'm not sure about this. > > > > > > As it is ARCH_GET_UNTAG_MASK returns -1UL mask if LAM is not present = or > > > not enabled. Applying this mask will give correct result for both. > > > > Is anyone going to use this mask if tagging is unsupported? > > Tools like HWASan won't even try to proceed in that case. > > I can imagine the code that tries to be indifferent to whether a pointer > has tags. It gets mask from ARCH_GET_UNTAG_MASK and applies it to the > pointer without any conditions. In that case there would still be just one call to ARCH_GET_UNTAG_MASK to get the mask that will probably be applied many times. So there's not a big difference with checking for -ENODEV and setting that mask manually. But your proposal with a special arch_prctl indeed looks cleaner. > > > Why is -ENODEV better here? Looks like just more work for userspace. > > > > This boils down to the question of detecting LAM support I raised previ= ously. > > It's nice to have a syscall without side effects to check whether LAM > > can be enabled at all (e.g. one can do the check in the parent process > > and conditionally enable LAM in certain, but not all, child processes) > > CPUID won't help here, because the presence of the LAM bit in CPUID > > doesn't guarantee its support in the kernel, and every other solution > > is more complicated than just issuing a system call. > > > > Note that TBI has PR_GET_TAGGED_ADDR_CTRL, which can be used to detect > > the presence of memory tagging support. > > I would rather make enumeration explicit: Ok, this would also work. Thanks! > diff --git a/arch/x86/include/uapi/asm/prctl.h b/arch/x86/include/uapi/as= m/prctl.h > index 38164a05c23c..a31e27b95b19 100644 > --- a/arch/x86/include/uapi/asm/prctl.h > +++ b/arch/x86/include/uapi/asm/prctl.h > @@ -22,5 +22,6 @@ > > #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_64.c b/arch/x86/kernel/process_64.c > index cfa2e42a135a..2e4df63b775f 100644 > --- a/arch/x86/kernel/process_64.c > +++ b/arch/x86/kernel/process_64.c > @@ -911,6 +911,13 @@ long do_arch_prctl_64(struct task_struct *task, int = option, unsigned long arg2) > (unsigned long __user *)arg2); > case ARCH_ENABLE_TAGGED_ADDR: > return prctl_enable_tagged_addr(task->mm, arg2); > + case ARCH_GET_MAX_TAG_BITS: > + if (!cpu_feature_enabled(X86_FEATURE_LAM)) > + return put_user(0, (unsigned long __user *)arg2); > + else if (lam_u48_allowed()) > + return put_user(15, (unsigned long __user *)arg2)= ; > + else > + return put_user(6, (unsigned long __user *)arg2); > default: > ret =3D -EINVAL; > break; > -- > Kirill A. Shutemov --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Liana Sebastian Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg