On 19 Jan 2016 16:08, Helge Deller wrote: > Mike Frysinger reported that his ptrace testcase showed strange > behaviour on parisc: It was not possible to avoid a syscall and the > return value of a syscall couldn't be changed. > > To modify a syscall number, we were missing to save the new syscall > number to gr20 which is then picked up later in assembly again. > > The effect that the return value couldn't be changed is a side-effect of > another bug in the assembly code. When a process is ptraced, userspace > expects each syscall to report entrance and exit of a syscall. If a > syscall number was given which doesn't exist, we jumped to the normal > syscall exit code instead of informing userspace that the (non-existant) > syscall exits. This unexpected behaviour confuses userspace and thus the > bug was misinterpreted as if we can't change the return value. > > This patch fixes both problems and was tested on 64bit kernel with > 32bit userspace. thanks, i'll give it a spin on my box too on a related note, can you check if arg reloading works too ? i.e. i should also be able to mung syscall args on the fly. e.g. if the tracee does open("/foo", O_RDWR), the tracer should be able to munge it to do open("/foo", O_RDONLY). -mike
Attachment:
signature.asc
Description: Digital signature