Re: [PATCH] arm64: Fix syscall restarting around signal suppressed by tracer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 07, 2018 at 12:32:05PM +0100, Dave P Martin wrote:
> Commit 17c2895 ("arm64: Abstract syscallno manipulation") abstracts
> out the pt_regs.syscallno value for a syscall cancelled by a tracer
> as NO_SYSCALL, and provides helpers to set and check for this
> condition.  However, the way this was implemented has the
> unintended side-effect of disabling part of the syscall restart
> logic.
> 
> This comes about because the second in_syscall() check in
> do_signal() re-evaluates the "in a syscall" condition based on the
> updated pt_regs instead of the original pt_regs.  forget_syscall()
> is explicitly called prior to the second check in order to prevent
> restart logic in the ret_to_user path being spuriously triggered,
> which means that the second in_syscall() check always yields false.
> 
> This triggers a failure in
> tools/testing/selftests/seccomp/seccomp_bpf.c, when using ptrace to
> suppress a signal that interrups a nanosleep() syscall.
> 
> Misbehaviour of this type is only expected in the case where a
> tracer suppresses a signal and the target process is either being
> single-stepped or the interrupted syscall attempts to restart via
> -ERESTARTBLOCK.
> 
> This patch restores the old behaviour by performing the
> in_syscall() check only once at the start of the function.
> 
> Fixes: 17c289586009 ("arm64: Abstract syscallno manipulation")
> Signed-off-by: Dave Martin <Dave.Martin@xxxxxxx>
> Reported-by: Sumit Semwal <sumit.semwal@xxxxxxxxxx>
> Cc: Will Deacon <will.deacon@xxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx> # 4.14.x-

Applied. Thanks.

-- 
Catalin



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux