From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <1450656209-2676-1-git-send-email-mic@digikod.net> <1450656209-2676-2-git-send-email-mic@digikod.net> <567745E3.1030509@nod.at> <5677BD23.4060602@digikod.net> From: Richard Weinberger Message-ID: <5677BEC3.4000802@nod.at> Date: Mon, 21 Dec 2015 09:56:35 +0100 MIME-Version: 1.0 In-Reply-To: <5677BD23.4060602@digikod.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Sender: linux-kernel-owner@vger.kernel.org Subject: Re: [PATCH v1 1/4] um: Fix ptrace GETREGS/SETREGS bugs To: =?UTF-8?Q?Micka=c3=abl_Sala=c3=bcn?= , linux-kernel@vger.kernel.org Cc: Jonathan Corbet , Jeff Dike , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , x86@kernel.org, Kees Cook , Andy Lutomirski , Will Drewry , Shuah Khan , Chris Metcalf , Michael Ellerman , Andrew Morton , James Hogan , Thomas Meyer , Nicolas Iooss , Anton Ivanov , linux-doc@vger.kernel.org, user-mode-linux-devel@lists.sourceforge.net, user-mode-linux-user@lists.sourceforge.net, linux-api@vger.kernel.org, Meredydd Luff , David Drysdale List-ID: Hi! Am 21.12.2015 um 09:49 schrieb Micka=C3=ABl Sala=C3=BCn: >=20 > On 21/12/2015 01:20, Richard Weinberger wrote: >> Am 21.12.2015 um 01:03 schrieb Micka=C3=ABl Sala=C3=BCn: >>> diff --git a/arch/um/kernel/skas/syscall.c b/arch/um/kernel/skas/sy= scall.c >>> index 1683b8e..65f0d1a 100644 >>> --- a/arch/um/kernel/skas/syscall.c >>> +++ b/arch/um/kernel/skas/syscall.c >>> @@ -7,6 +7,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> #include >>> #include >>> =20 >>> @@ -16,12 +17,16 @@ void handle_syscall(struct uml_pt_regs *r) >>> long result; >>> int syscall; >>> =20 >>> + /* Save the syscall register. */ >>> + UPT_SYSCALL_NR(r) =3D PT_SYSCALL_NR(r->gp); >>> + >>> if (syscall_trace_enter(regs)) { >>> result =3D -ENOSYS; >>> goto out; >>> } >>> =20 >>> - syscall =3D get_syscall(r); >>> + /* Get the syscall after being potentially updated with ptrace. *= / >>> + syscall =3D UPT_SYSCALL_NR(r); >> >> Doesn't this break the support for changing syscall numbers using PT= RACE_SETREGS? >=20 > The logic is unchanged except updating the UPT_SYSCALL_NR before sysc= all_trace_enter(). I did my last tests with the x86_32 subarchitecture = and all tests (from selftest/seccomp), including PTRACE_SETREGS for sys= call numbers tests, passed. However, 2 of this tests still fail for x86= _64 (only). No, you chagned the logic. syscall_trace_enter() enters the ptrace() path, and here EAX/RAX can be= changed. Hence, "syscall =3D UPT_SYSCALL_NR(r)" will still see the old syscall n= umber. --> changing syscall numbers got broken by you. :-) Thanks, //richard -- To unsubscribe from this list: send the line "unsubscribe linux-kernel"= in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/