From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2EEF1DD9AB for ; Sat, 25 Jan 2025 12:18:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=150.107.74.76 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737807482; cv=none; b=C4ypBQs2UlRYCoB8buEYzslI4dzq/mpbGUonLafdcuocnjOQU6+e7VlNBIRxBRa8ZxJEw8n0J0fMMIkDtqBNzsdH9s57dogitDIU2acpf1usvbWOUrkOU7jTh8/sy5iZ1buRBcQDXtLL+xQ+4/yBJepR9Vwnrn441bB4jQmb6bk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737807482; c=relaxed/simple; bh=Fz49CXpABwvA12vw0qnNiqIyA9EOQLXwZP8aJJ0TvFc=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=nC8VYJyNayzGZ5gcrxkc3EMUCYNtjRE5Wfcgztn5CHGVbWo/5g1zuIgdf7F4z+d+pN5kjpQbPnTrBa9BD23daYYGaxk4kIzPBkIB0Ur3WBOo8TVATPS9COe4eIP0Voq/JbZrg363rfrxkNa3M6PHXdAfXEk+3WF82xYiDJz/IP0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ellerman.id.au; spf=pass smtp.mailfrom=ellerman.id.au; dkim=pass (2048-bit key) header.d=ellerman.id.au header.i=@ellerman.id.au header.b=izW/obeB; arc=none smtp.client-ip=150.107.74.76 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ellerman.id.au Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ellerman.id.au Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ellerman.id.au header.i=@ellerman.id.au header.b="izW/obeB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ellerman.id.au; s=201909; t=1737807470; bh=Xlf8eY1Vm7on4m0M7BiRKmMXoxjLeDxW5n/WQFwdKOc=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=izW/obeBdf4luPhTPxkNvj5TD2g3lyoh2pf9cULi+W+zcpdC6tL7lRLJQXIUwk+t/ CZtIXKaBQaq8biHYPwotESScPfEkBJy7JapuyjaPuvxXnxc8COTcdHr4VXYpFPxo+T 3FrhpNwCJtEOhNpr3d+Hx515ujMojfe0St26+ZABPUaH85VB9+EojXAvBIBE3aVscw pGfyNoASy6Zwd9cyHfEGYg4kaizMS/q4rbYpty+BmJPCpu6F9i7XCnN5qm8I5Gg84C he0dHyyooMJU6VzEgORAOSk/2MrAlrGyAZDEmnG3j3bY2DcPIXs4llq4SiM1Nur+9L h3+m94xLKSlpQ== Received: from authenticated.ozlabs.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.ozlabs.org (Postfix) with ESMTPSA id 4YgDGQ2X77z4wy9; Sat, 25 Jan 2025 23:17:50 +1100 (AEDT) From: Michael Ellerman To: "Dmitry V. Levin" , Christophe Leroy Cc: Alexey Gladkov , Oleg Nesterov , Eugene Syromyatnikov , Mike Frysinger , Renzo Davoli , Davide Berardi , strace-devel@lists.strace.io, Madhavan Srinivasan , Nicholas Piggin , Naveen N Rao , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/7] powerpc: properly negate error in syscall_set_return_value() In-Reply-To: <20250123234321.GA23582@strace.io> References: <20250113171054.GA589@strace.io> <6558110c-c2cb-4aa3-9472-b3496f71ebb8@csgroup.eu> <20250114170400.GB11820@strace.io> <20250123182815.GA20994@strace.io> <20250123234321.GA23582@strace.io> Date: Sat, 25 Jan 2025 23:17:58 +1100 Message-ID: <87jzajjde1.fsf@mpe.ellerman.id.au> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain "Dmitry V. Levin" writes: > On Thu, Jan 23, 2025 at 08:28:15PM +0200, Dmitry V. Levin wrote: ... >> After looking at system_call_exception() I doubt this inconsistency can be >> easily avoided, so I don't see how this patch could be enhanced further, >> and what else could I do with the patch besides dropping it and letting >> !trap_is_scv case be unsupported by PTRACE_SET_SYSCALL_INFO API, which >> would be unfortunate. > > If you say this would bring some consistency, I can extend the patch with > something like this: Yes that would improve things IMHO, with one caveat .... > diff --git a/arch/powerpc/kernel/ptrace/ptrace.c b/arch/powerpc/kernel/ptrace/ptrace.c > index 727ed4a14545..dda276a934fd 100644 > --- a/arch/powerpc/kernel/ptrace/ptrace.c > +++ b/arch/powerpc/kernel/ptrace/ptrace.c > @@ -207,7 +207,7 @@ static int do_seccomp(struct pt_regs *regs) > * syscall parameter. This is different to the ptrace ABI where > * both r3 and orig_gpr3 contain the first syscall parameter. > */ > - regs->gpr[3] = -ENOSYS; > + syscall_set_return_value(current, regs, -ENOSYS, 0); > > /* > * We use the __ version here because we have already checked > @@ -225,7 +225,7 @@ static int do_seccomp(struct pt_regs *regs) > * modify the first syscall parameter (in orig_gpr3) and also > * allow the syscall to proceed. > */ > - regs->gpr[3] = regs->orig_gpr3; > + syscall_set_return_value(current, regs, 0, regs->orig_gpr3); This case should remain as-is. The orig_gpr3 value here is not a syscall error code, it's the original r3 value, which is a syscall parameter. If the tracer wants to fail the syscall it should have set something in r3, not orig_gpr3. > return 0; > } > @@ -315,7 +315,7 @@ long do_syscall_trace_enter(struct pt_regs *regs) > * If we are aborting explicitly, or if the syscall number is > * now invalid, set the return value to -ENOSYS. > */ > - regs->gpr[3] = -ENOSYS; > + syscall_set_return_value(current, regs, -ENOSYS, 0); > return -1; > } > > diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c > index aa17e62f3754..c921e0cb54b8 100644 > --- a/arch/powerpc/kernel/signal.c > +++ b/arch/powerpc/kernel/signal.c > @@ -229,14 +229,8 @@ static void check_syscall_restart(struct pt_regs *regs, struct k_sigaction *ka, > regs_add_return_ip(regs, -4); > regs->result = 0; > } else { > - if (trap_is_scv(regs)) { > - regs->result = -EINTR; > - regs->gpr[3] = -EINTR; > - } else { > - regs->result = -EINTR; > - regs->gpr[3] = EINTR; > - regs->ccr |= 0x10000000; > - } > + regs->result = -EINTR; > + syscall_set_return_value(current, regs, -EINTR, 0); > } > } cheers