From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 B6CEF2CCB9 for ; Fri, 22 May 2026 18:56:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779476163; cv=none; b=gPAKBcCZBqOcYLEzvBdGg9V0S9CGrjhjXqO9dEe0od3A9d50bopFxQNpQKgnDhpETRiUKjetrWsmu8VUCayrDJBMWy1kTsxLrZ/KelWah/nOd1Dd/sFQ8tQLGdnvMCSVya8h4R9KY3XNACImKd3yTZYTU6PekB/Z0muemKRHkzI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779476163; c=relaxed/simple; bh=gyipwnnxS0mkd/TaQMwQCL15Cz81eqez+GYJJMV1h6k=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=A/SbpdAUtDLYj4h59k2qGBIQyHjx3DO7EHDs2blrHfo9UHfkpziLMCruxcVFiuHU4ydI6qVA9Up3LTYAxfaQPqQuv4bFqXPkxZ8veNFfpHUCInrfrBv7upw8nB2pGFN0lJw8cuNOlO2jOamcOS4p4PoO0B9itGR4jxZz+lJRf+I= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SqpX2mcQ; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SqpX2mcQ" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-44509921fbcso4963140f8f.3 for ; Fri, 22 May 2026 11:56:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779476160; x=1780080960; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=+wf/uINnwCK8WbvZvaLDBEegzhnbhM29i2MF7q8Btmc=; b=SqpX2mcQzGNqQbSx7dJWIF+26v8zNEH3jgDhtFwjZcPnARmBR/SogLllS3mQxF6zrG Zi/cP1LnEu5hi+zpGPanDRGJXR9xaaINHstJEAuHsDDAs/FMDGGK+++L1TCuUSYsCzRk pFSh96YMY/fv/d7UWa/r9MdWyqoWJzRrv3+IvOPxeQnnjU4brX15lvJ4hsF9t81JeJzV 3GZVHy8jBYXjcMxtG7Depra1QGSl+76cLF6TxMHsW0XyqPMPO70rSZLPbnAQqDv5XyjR tLT7PaymAv2Kj3SIK/3qPslZenS95NRWc6SHWb98tXAY/Qz5UVMVfbYoZ+P15JhTru1v SE6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779476160; x=1780080960; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+wf/uINnwCK8WbvZvaLDBEegzhnbhM29i2MF7q8Btmc=; b=FPc7ChXFJNP0dGZukmlCFaQ4n8tegiipT046USZHZIgZ37EFF+HebAdYE9cMNd4/If SyaM5frvti8tGW7kdb8xrAkE7GguCDoJL93vH7UWGOc8aqpMt6QvHgl3z4sJFopJYEBK I/6l/7y+RP1c9eNSJiSY0OWYnKW1bEDYhOoU9bdioMtYoUZq+a8Nj/UK1F5k/DCedik1 jzuVbq0VuYRKgNC6MAvLUitpQwsd7Ccu7YhH87bAkrPVTmoTKjhbK2ab4b6PA/xWtLJh Wnu5xSAAlBDAxdEubBeHf7p6aJFMz5RDwT15poXb4Bsze9z1RWzHI54mBKJll6/EOBmB SKXA== X-Forwarded-Encrypted: i=1; AFNElJ+rD66PjPn6+pp6sUamRshNktWJVKr21RsfnbsOTA8pyiVOTl5zn57PFIOP3BAumTPmjESZ8UHb7UcE0qM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0dfnHc5lYqgKWVXJ0zoWusigIGyboUYB+SiYUWgLHGBXJOp6J A6Ppia+C6iKo1XDg2S2Ti/6/nJPkreHKLNlBB1FhRoy/cCD9rUzUUvsV X-Gm-Gg: Acq92OGLmrGsJWprBzMV5OIPq+jGgs2kdXSsuC8mw/oOWOUjTEtklFW5GfZrligGgIi 4e1+35E5cvpN6GJxGSB3Mtqu43dHoVPnDuC0AFGoB857DwlY7bTX1GcD9iAOGRITJn/of9FXKLg w+zO2Ww0zmFc/Y5r93ysE34hUWrPwVev+5a9mN17pXJX3+aNFdxkhEmCJkB+mdZJ7dEiBp5k4R8 X6pYlBT0lVDqHp0B1WsnBJfS5zalG61zFVf/XBtsHyvIxSx8JOAlXm/7vLW8Ie37icP7GEv5p9H mnHYsSIzjVfn7Ed0A+xQoxKFysT3mn9aIIe7hiQ6mozjHpHJeGUVlSYADWHPI8ozshZF/bRWVX8 4KloyCwOhueO1dhTh8imelr7MPj+Hc+DbaXMTRRRun/WaqERvpgS7rccFqSNxlsP+KWTY/YJEnb AtzN3wmlw8XFwWEWk2Ff8gaWJKy0OFLDOFY3bOq2FuhhJ+jKG0ELWOz5JNZtu8t3vg X-Received: by 2002:a05:6000:2488:b0:43d:c95c:4259 with SMTP id ffacd0b85a97d-45eb38a18e0mr7563614f8f.30.1779476159924; Fri, 22 May 2026 11:55:59 -0700 (PDT) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45eb6d5cb76sm5239833f8f.25.2026.05.22.11.55.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:55:59 -0700 (PDT) Date: Fri, 22 May 2026 19:55:57 +0100 From: David Laight To: "Christophe Leroy (CS GROUP)" Cc: Michael Ellerman , Nicholas Piggin , Madhavan Srinivasan , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH v1 2/8] powerpc/signal64: Untangle setup_tm_sigcontexts() and user_access_begin() Message-ID: <20260522195557.5fd73f80@pumpkin> In-Reply-To: <28a7b0b9-3c17-4f76-af80-f17f4869f854@kernel.org> References: <7c83fe5a596514a02fde37da987a48d638d0d097.1779441786.git.chleroy@kernel.org> <20260522121237.3089276f@pumpkin> <69bd69b1-97f7-41e2-934b-bed28dc2fef7@kernel.org> <28a7b0b9-3c17-4f76-af80-f17f4869f854@kernel.org> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Fri, 22 May 2026 14:44:55 +0200 "Christophe Leroy (CS GROUP)" wrote: > Le 22/05/2026 =C3=A0 14:06, Christophe Leroy (CS GROUP) a =C3=A9crit=C2= =A0: > >=20 > >=20 > > Le 22/05/2026 =C3=A0 13:12, David Laight a =C3=A9crit=C2=A0: =20 > >> On Fri, 22 May 2026 11:56:02 +0200 > >> "Christophe Leroy (CS GROUP)" wrote: > >> =20 > >>> Call setup_tm_sigcontexts() before opening user access to avoid > >>> having to close and open again. > >>> > >>> Signed-off-by: Christophe Leroy (CS GROUP) > >>> --- > >>> =C2=A0 arch/powerpc/kernel/signal_64.c | 22 +++++++++------------- > >>> =C2=A0 1 file changed, 9 insertions(+), 13 deletions(-) > >>> > >>> diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/=20 > >>> signal_64.c > >>> index 86bb5bb4c143..3849af21e1d8 100644 > >>> --- a/arch/powerpc/kernel/signal_64.c > >>> +++ b/arch/powerpc/kernel/signal_64.c > >>> @@ -873,6 +873,15 @@ int handle_rt_signal64(struct ksignal *ksig,=20 > >>> sigset_t *set, > >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!MSR_TM_ACTIVE(msr)) > >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 prepare_setup_= sigcontext(tsk); > >>> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM > >>> +=C2=A0=C2=A0=C2=A0 if (MSR_TM_ACTIVE(msr)) =20 > >> > >> Can't that be done without the ugly #ifdef? > >> I assume MSR_TM_ACTIVE() will be zero - so it will all get optimised=20 > >> away. =20 > >=20 > > Yes but struct rt_sigframe field uc_transact only exists when=20 > > CONFIG_PPC_TRANSACTIONAL_MEM is defined. > >=20 > > And that would also require a stub setup_tm_sigcontexts() =20 >=20 > After thinking once more, I think we can do the following, is it better=20 > for you ? Certainly more like the expected style. setup_tm_sigcontexts() will get inlined, so it doesn't matter what values are passed as the arguments. -- David >=20 > diff --git a/arch/powerpc/kernel/signal_64.c=20 > b/arch/powerpc/kernel/signal_64.c > index 86bb5bb4c143..c70732e8002d 100644 > --- a/arch/powerpc/kernel/signal_64.c > +++ b/arch/powerpc/kernel/signal_64.c > @@ -203,8 +203,7 @@ static long notrace __unsafe_setup_sigcontext(struct= =20 > sigcontext __user *sc, > * examine the transactional registers in the 2nd sigcontext to=20 > determine the > * real origin of the signal. > */ > -static long setup_tm_sigcontexts(struct sigcontext __user *sc, > - struct sigcontext __user *tm_sc, > +static long setup_tm_sigcontexts(struct rt_sigframe __user *frame, > struct task_struct *tsk, > int signr, sigset_t *set, unsigned long handler, > unsigned long msr) > @@ -217,6 +216,8 @@ static long setup_tm_sigcontexts(struct sigcontext=20 > __user *sc, > * Userland shall check AT_HWCAP to know wether it can rely on the > * v_regs pointer or not. > */ > + struct sigcontext __user *sc =3D &frame->uc.uc_mcontext; > + struct sigcontext __user *tm_sc =3D &frame->uc_transact.uc_mcontext; > #ifdef CONFIG_ALTIVEC > elf_vrreg_t __user *v_regs =3D sigcontext_vmx_regs(sc); > elf_vrreg_t __user *tm_v_regs =3D sigcontext_vmx_regs(tm_sc); > @@ -325,6 +326,14 @@ static long setup_tm_sigcontexts(struct sigcontext=20 > __user *sc, >=20 > return err; > } > +#else > +static long setup_tm_sigcontexts(struct rt_sigframe __user *frame, > + struct task_struct *tsk, > + int signr, sigset_t *set, unsigned long handler, > + unsigned long msr) > +{ > + return -EINVAL; > +} > #endif >=20 > /* > @@ -872,6 +881,9 @@ int handle_rt_signal64(struct ksignal *ksig,=20 > sigset_t *set, > */ > if (!MSR_TM_ACTIVE(msr)) > prepare_setup_sigcontext(tsk); > + else > + err |=3D setup_tm_sigcontexts(frame, tsk, ksig->sig, NULL, > + (unsigned long)ksig->ka.sa.sa_handler, msr); >=20 > if (!user_write_access_begin(frame, sizeof(*frame))) > goto badframe; > @@ -889,19 +901,6 @@ int handle_rt_signal64(struct ksignal *ksig,=20 > sigset_t *set, > * ucontext_t (for transactional state) with its uc_link ptr. > */ > unsafe_put_user(&frame->uc_transact, &frame->uc.uc_link,=20 > badframe_block); > - > - user_write_access_end(); > - > - err |=3D setup_tm_sigcontexts(&frame->uc.uc_mcontext, > - &frame->uc_transact.uc_mcontext, > - tsk, ksig->sig, NULL, > - (unsigned long)ksig->ka.sa.sa_handler, > - msr); > - > - if (!user_write_access_begin(&frame->uc.uc_sigmask, > - sizeof(frame->uc.uc_sigmask))) > - goto badframe; > - > #endif > } else { > unsafe_put_user(0, &frame->uc.uc_link, badframe_block); >=20 >=20 > Christophe