lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Sat, 13 Feb 2021 10:05:22 +0100
From:   Thomas Bogendoerfer <tsbogend@...ha.franken.de>
To:     Tiezhu Yang <kernelpatch@....com>
Cc:     Oleg Nesterov <oleg@...hat.com>, linux-mips@...r.kernel.org,
        linux-kernel@...r.kernel.org, Xuefeng Li <lixuefeng@...ngson.cn>,
        kernel test robot <lkp@...el.com>,
        Xingxing Su <suxingxing@...ngson.cn>
Subject: Re: [PATCH v2 RESEND] MIPS: Add basic support for ptrace single step

On Sat, Feb 13, 2021 at 02:20:46AM +0800, Tiezhu Yang wrote:
> From: Tiezhu Yang <yangtiezhu@...ngson.cn>
> 
> In the current code, arch_has_single_step() is not defined on MIPS,
> that means MIPS does not support instruction single-step for user mode.
> 
> Delve is a debugger for the Go programming language, the ptrace syscall
> PtraceSingleStep() failed [1] on MIPS and then the single step function
> can not work well, we can see that PtraceSingleStep() definition returns
> ptrace(PTRACE_SINGLESTEP) [2].
> 
> So it is necessary to support ptrace single step on MIPS.
> 
> At the beginning, we try to use the Debug Single Step exception on the
> Loongson 3A4000 platform, but it has no effect when set CP0_DEBUG SSt
> bit, this is because CP0_DEBUG NoSSt bit is 1 which indicates no
> single-step feature available [3], so this way which is dependent on the
> hardware is almost impossible.
> 
> With further research, we find out there exists a common way used with
> break instruction in arch/alpha/kernel/ptrace.c, it is workable.
> 
> For the above analysis, define arch_has_single_step(), add the common
> function user_enable_single_step() and user_disable_single_step(), set
> flag TIF_SINGLESTEP for child process, use break instruction to set
> breakpoint.
> 
> We can use the following testcase to test it:
> tools/testing/selftests/breakpoints/step_after_suspend_test.c
> 
>  $ make -C tools/testing/selftests TARGETS=breakpoints
>  $ cd tools/testing/selftests/breakpoints
> 
> Without this patch:
> 
>  $ ./step_after_suspend_test -n
>  TAP version 13
>  1..4
>  # ptrace(PTRACE_SINGLESTEP) not supported on this architecture: Input/output error
>  ok 1 # SKIP CPU 0
>  # ptrace(PTRACE_SINGLESTEP) not supported on this architecture: Input/output error
>  ok 2 # SKIP CPU 1
>  # ptrace(PTRACE_SINGLESTEP) not supported on this architecture: Input/output error
>  ok 3 # SKIP CPU 2
>  # ptrace(PTRACE_SINGLESTEP) not supported on this architecture: Input/output error
>  ok 4 # SKIP CPU 3
>  # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:4 error:0
> 
> With this patch:
> 
>  $ ./step_after_suspend_test -n
>  TAP version 13
>  1..4
>  ok 1 CPU 0
>  ok 2 CPU 1
>  ok 3 CPU 2
>  ok 4 CPU 3
>  # Totals: pass:4 fail:0 xfail:0 xpass:0 skip:0 error:0
> 
> [1] https://github.com/go-delve/delve/blob/master/pkg/proc/native/threads_linux.go#L50
> [2] https://github.com/go-delve/delve/blob/master/vendor/golang.org/x/sys/unix/syscall_linux.go#L1573
> [3] http://www.t-es-t.hu/download/mips/md00047f.pdf
> 
> Reported-by: Guoqi Chen <chenguoqi@...ngson.cn>
> Signed-off-by: Xingxing Su <suxingxing@...ngson.cn>
> Signed-off-by: Tiezhu Yang <yangtiezhu@...ngson.cn>
> Reported-by: kernel test robot <lkp@...el.com>
> ---
> 
> RESEND due to send to mail list failed, sorry for that.
> 
> v2: make union mips_instruction mips_insn = { 0 };
>     to fix uninitialized build warning used with clang
>     reported by kernel test robot.
> 
>  arch/mips/include/asm/ptrace.h      |   2 +
>  arch/mips/include/asm/thread_info.h |   5 ++
>  arch/mips/kernel/ptrace.c           | 108 ++++++++++++++++++++++++++++++++++++
>  arch/mips/kernel/signal.c           |   2 +-
>  4 files changed, 116 insertions(+), 1 deletion(-)

applied to mips-next.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

Powered by blists - more mailing lists