[LTP] [PATCH v1 2/2] ptrace06: Refactor the test using new LTP API

Richard Palethorpe rpalethorpe@suse.de
Tue Nov 28 10:31:02 CET 2023


Hello,

Wei Gao via ltp <ltp@lists.linux.it> writes:

> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
>  testcases/kernel/syscalls/ptrace/ptrace06.c | 306 +++++++++++---------
>  1 file changed, 175 insertions(+), 131 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/ptrace/ptrace06.c b/testcases/kernel/syscalls/ptrace/ptrace06.c
> index c0cb3b9bd..5829faea4 100644
> --- a/testcases/kernel/syscalls/ptrace/ptrace06.c
> +++ b/testcases/kernel/syscalls/ptrace/ptrace06.c
> @@ -1,32 +1,31 @@
> +// SPDX-License-Identifier: GPL-2.0-only
>  /*
> + * Copyright (c) 2008 Analog Devices Inc.
> + * Copyright (c) 2023 Wei Gao <wegao@suse.com>
> + */
> +
> +/*\
> + * [Description]
> + *
>   * check out-of-bound/unaligned addresses given to
>   *  - {PEEK,POKE}{DATA,TEXT,USER}
>   *  - {GET,SET}{,FG}REGS
>   *  - {GET,SET}SIGINFO
>   *
> - * Copyright (c) 2008 Analog Devices Inc.
> - *
> - * Licensed under the GPL-2 or later
>   */
>  
>  #define _GNU_SOURCE
>  
> -#include <errno.h>
> -#include <stdbool.h>
> -#include <stdio.h>
>  #include <stdlib.h>
> -#include <unistd.h>
> -
>  #include <config.h>
> -#include "ptrace.h"
>  
> -#include "test.h"
> -#include "spawn_ptrace_child.h"
> -#include "config.h"
> +#include "ptrace.h"
> +#include "tst_test.h"
>  
>  /* this should be sizeof(struct user), but that info is only found
>   * in the kernel asm/user.h which is not exported to userspace.
>   */
> +
>  #if defined(__i386__)
>  #define SIZEOF_USER 284
>  #elif defined(__x86_64__)
> @@ -35,168 +34,213 @@
>  #define SIZEOF_USER 0x1000	/* just pick a big number */
>  #endif
>  
> -char *TCID = "ptrace06";
> -
>  struct test_case_t {
>  	int request;
>  	long addr;
>  	long data;
>  } test_cases[] = {
>  	{
> -	PTRACE_PEEKDATA,.addr = 0}, {
> -	PTRACE_PEEKDATA,.addr = 1}, {
> -	PTRACE_PEEKDATA,.addr = 2}, {
> -	PTRACE_PEEKDATA,.addr = 3}, {
> -	PTRACE_PEEKDATA,.addr = -1}, {
> -	PTRACE_PEEKDATA,.addr = -2}, {
> -	PTRACE_PEEKDATA,.addr = -3}, {
> -	PTRACE_PEEKDATA,.addr = -4}, {
> -	PTRACE_PEEKTEXT,.addr = 0}, {
> -	PTRACE_PEEKTEXT,.addr = 1}, {
> -	PTRACE_PEEKTEXT,.addr = 2}, {
> -	PTRACE_PEEKTEXT,.addr = 3}, {
> -	PTRACE_PEEKTEXT,.addr = -1}, {
> -	PTRACE_PEEKTEXT,.addr = -2}, {
> -	PTRACE_PEEKTEXT,.addr = -3}, {
> -	PTRACE_PEEKTEXT,.addr = -4}, {
> -	PTRACE_PEEKUSER,.addr = SIZEOF_USER + 1}, {
> -	PTRACE_PEEKUSER,.addr = SIZEOF_USER + 2}, {
> -	PTRACE_PEEKUSER,.addr = SIZEOF_USER + 3}, {
> -	PTRACE_PEEKUSER,.addr = SIZEOF_USER + 4}, {
> -	PTRACE_PEEKUSER,.addr = -1}, {
> -	PTRACE_PEEKUSER,.addr = -2}, {
> -	PTRACE_PEEKUSER,.addr = -3}, {
> -	PTRACE_PEEKUSER,.addr = -4}, {
> -	PTRACE_POKEDATA,.addr = 0}, {
> -	PTRACE_POKEDATA,.addr = 1}, {
> -	PTRACE_POKEDATA,.addr = 2}, {
> -	PTRACE_POKEDATA,.addr = 3}, {
> -	PTRACE_POKEDATA,.addr = -1}, {
> -	PTRACE_POKEDATA,.addr = -2}, {
> -	PTRACE_POKEDATA,.addr = -3}, {
> -	PTRACE_POKEDATA,.addr = -4}, {
> -	PTRACE_POKETEXT,.addr = 0}, {
> -	PTRACE_POKETEXT,.addr = 1}, {
> -	PTRACE_POKETEXT,.addr = 2}, {
> -	PTRACE_POKETEXT,.addr = 3}, {
> -	PTRACE_POKETEXT,.addr = -1}, {
> -	PTRACE_POKETEXT,.addr = -2}, {
> -	PTRACE_POKETEXT,.addr = -3}, {
> -	PTRACE_POKETEXT,.addr = -4}, {
> -	PTRACE_POKEUSER,.addr = SIZEOF_USER + 1}, {
> -	PTRACE_POKEUSER,.addr = SIZEOF_USER + 2}, {
> -	PTRACE_POKEUSER,.addr = SIZEOF_USER + 3}, {
> -	PTRACE_POKEUSER,.addr = SIZEOF_USER + 4}, {
> -	PTRACE_POKEUSER,.addr = -1}, {
> -	PTRACE_POKEUSER,.addr = -2}, {
> -	PTRACE_POKEUSER,.addr = -3}, {
> -	PTRACE_POKEUSER,.addr = -4},
> +	PTRACE_PEEKDATA, .addr = 0}, {
> +	PTRACE_PEEKDATA, .addr = 1}, {
> +	PTRACE_PEEKDATA, .addr = 2}, {
> +	PTRACE_PEEKDATA, .addr = 3}, {
> +	PTRACE_PEEKDATA, .addr = -1}, {
> +	PTRACE_PEEKDATA, .addr = -2}, {
> +	PTRACE_PEEKDATA, .addr = -3}, {
> +	PTRACE_PEEKDATA, .addr = -4}, {
> +	PTRACE_PEEKTEXT, .addr = 0}, {
> +	PTRACE_PEEKTEXT, .addr = 1}, {
> +	PTRACE_PEEKTEXT, .addr = 2}, {
> +	PTRACE_PEEKTEXT, .addr = 3}, {
> +	PTRACE_PEEKTEXT, .addr = -1}, {
> +	PTRACE_PEEKTEXT, .addr = -2}, {
> +	PTRACE_PEEKTEXT, .addr = -3}, {
> +	PTRACE_PEEKTEXT, .addr = -4}, {
> +	PTRACE_PEEKUSER, .addr = SIZEOF_USER + 1}, {
> +	PTRACE_PEEKUSER, .addr = SIZEOF_USER + 2}, {
> +	PTRACE_PEEKUSER, .addr = SIZEOF_USER + 3}, {
> +	PTRACE_PEEKUSER, .addr = SIZEOF_USER + 4}, {
> +	PTRACE_PEEKUSER, .addr = -1}, {
> +	PTRACE_PEEKUSER, .addr = -2}, {
> +	PTRACE_PEEKUSER, .addr = -3}, {
> +	PTRACE_PEEKUSER, .addr = -4}, {
> +	PTRACE_POKEDATA, .addr = 0}, {
> +	PTRACE_POKEDATA, .addr = 1}, {
> +	PTRACE_POKEDATA, .addr = 2}, {
> +	PTRACE_POKEDATA, .addr = 3}, {
> +	PTRACE_POKEDATA, .addr = -1}, {
> +	PTRACE_POKEDATA, .addr = -2}, {
> +	PTRACE_POKEDATA, .addr = -3}, {
> +	PTRACE_POKEDATA, .addr = -4}, {
> +	PTRACE_POKETEXT, .addr = 0}, {
> +	PTRACE_POKETEXT, .addr = 1}, {
> +	PTRACE_POKETEXT, .addr = 2}, {
> +	PTRACE_POKETEXT, .addr = 3}, {
> +	PTRACE_POKETEXT, .addr = -1}, {
> +	PTRACE_POKETEXT, .addr = -2}, {
> +	PTRACE_POKETEXT, .addr = -3}, {
> +	PTRACE_POKETEXT, .addr = -4}, {
> +	PTRACE_POKEUSER, .addr = SIZEOF_USER + 1}, {
> +	PTRACE_POKEUSER, .addr = SIZEOF_USER + 2}, {
> +	PTRACE_POKEUSER, .addr = SIZEOF_USER + 3}, {
> +	PTRACE_POKEUSER, .addr = SIZEOF_USER + 4}, {
> +	PTRACE_POKEUSER, .addr = -1}, {
> +	PTRACE_POKEUSER, .addr = -2}, {
> +	PTRACE_POKEUSER, .addr = -3}, {
> +	PTRACE_POKEUSER, .addr = -4},
>  #ifdef PTRACE_GETREGS
>  	{
> -	PTRACE_GETREGS,.data = 0}, {
> -	PTRACE_GETREGS,.data = 1}, {
> -	PTRACE_GETREGS,.data = 2}, {
> -	PTRACE_GETREGS,.data = 3}, {
> -	PTRACE_GETREGS,.data = -1}, {
> -	PTRACE_GETREGS,.data = -2}, {
> -	PTRACE_GETREGS,.data = -3}, {
> -	PTRACE_GETREGS,.data = -4},
> +	PTRACE_GETREGS, .data = 0}, {
> +	PTRACE_GETREGS, .data = 1}, {
> +	PTRACE_GETREGS, .data = 2}, {
> +	PTRACE_GETREGS, .data = 3}, {
> +	PTRACE_GETREGS, .data = -1}, {
> +	PTRACE_GETREGS, .data = -2}, {
> +	PTRACE_GETREGS, .data = -3}, {
> +	PTRACE_GETREGS, .data = -4},
>  #endif
>  #ifdef PTRACE_GETFGREGS
>  	{
> -	PTRACE_GETFGREGS,.data = 0}, {
> -	PTRACE_GETFGREGS,.data = 1}, {
> -	PTRACE_GETFGREGS,.data = 2}, {
> -	PTRACE_GETFGREGS,.data = 3}, {
> -	PTRACE_GETFGREGS,.data = -1}, {
> -	PTRACE_GETFGREGS,.data = -2}, {
> -	PTRACE_GETFGREGS,.data = -3}, {
> -	PTRACE_GETFGREGS,.data = -4},
> +	PTRACE_GETFGREGS, .data = 0}, {
> +	PTRACE_GETFGREGS, .data = 1}, {
> +	PTRACE_GETFGREGS, .data = 2}, {
> +	PTRACE_GETFGREGS, .data = 3}, {
> +	PTRACE_GETFGREGS, .data = -1}, {
> +	PTRACE_GETFGREGS, .data = -2}, {
> +	PTRACE_GETFGREGS, .data = -3}, {
> +	PTRACE_GETFGREGS, .data = -4},
>  #endif
>  #ifdef PTRACE_SETREGS
>  	{
> -	PTRACE_SETREGS,.data = 0}, {
> -	PTRACE_SETREGS,.data = 1}, {
> -	PTRACE_SETREGS,.data = 2}, {
> -	PTRACE_SETREGS,.data = 3}, {
> -	PTRACE_SETREGS,.data = -1}, {
> -	PTRACE_SETREGS,.data = -2}, {
> -	PTRACE_SETREGS,.data = -3}, {
> -	PTRACE_SETREGS,.data = -4},
> +	PTRACE_SETREGS, .data = 0}, {
> +	PTRACE_SETREGS, .data = 1}, {
> +	PTRACE_SETREGS, .data = 2}, {
> +	PTRACE_SETREGS, .data = 3}, {
> +	PTRACE_SETREGS, .data = -1}, {
> +	PTRACE_SETREGS, .data = -2}, {
> +	PTRACE_SETREGS, .data = -3}, {
> +	PTRACE_SETREGS, .data = -4},
>  #endif
>  #ifdef PTRACE_SETFGREGS
>  	{
> -	PTRACE_SETFGREGS,.data = 0}, {
> -	PTRACE_SETFGREGS,.data = 1}, {
> -	PTRACE_SETFGREGS,.data = 2}, {
> -	PTRACE_SETFGREGS,.data = 3}, {
> -	PTRACE_SETFGREGS,.data = -1}, {
> -	PTRACE_SETFGREGS,.data = -2}, {
> -	PTRACE_SETFGREGS,.data = -3}, {
> -	PTRACE_SETFGREGS,.data = -4},
> +	PTRACE_SETFGREGS, .data = 0}, {
> +	PTRACE_SETFGREGS, .data = 1}, {
> +	PTRACE_SETFGREGS, .data = 2}, {
> +	PTRACE_SETFGREGS, .data = 3}, {
> +	PTRACE_SETFGREGS, .data = -1}, {
> +	PTRACE_SETFGREGS, .data = -2}, {
> +	PTRACE_SETFGREGS, .data = -3}, {
> +	PTRACE_SETFGREGS, .data = -4},
>  #endif
>  #if HAVE_DECL_PTRACE_GETSIGINFO
>  	{
> -	PTRACE_GETSIGINFO,.data = 0}, {
> -	PTRACE_GETSIGINFO,.data = 1}, {
> -	PTRACE_GETSIGINFO,.data = 2}, {
> -	PTRACE_GETSIGINFO,.data = 3}, {
> -	PTRACE_GETSIGINFO,.data = -1}, {
> -	PTRACE_GETSIGINFO,.data = -2}, {
> -	PTRACE_GETSIGINFO,.data = -3}, {
> -	PTRACE_GETSIGINFO,.data = -4},
> +	PTRACE_GETSIGINFO, .data = 0}, {
> +	PTRACE_GETSIGINFO, .data = 1}, {
> +	PTRACE_GETSIGINFO, .data = 2}, {
> +	PTRACE_GETSIGINFO, .data = 3}, {
> +	PTRACE_GETSIGINFO, .data = -1}, {
> +	PTRACE_GETSIGINFO, .data = -2}, {
> +	PTRACE_GETSIGINFO, .data = -3}, {
> +	PTRACE_GETSIGINFO, .data = -4},
>  #endif
>  #if HAVE_DECL_PTRACE_SETSIGINFO
>  	{
> -	PTRACE_SETSIGINFO,.data = 0}, {
> -	PTRACE_SETSIGINFO,.data = 1}, {
> -	PTRACE_SETSIGINFO,.data = 2}, {
> -	PTRACE_SETSIGINFO,.data = 3}, {
> -	PTRACE_SETSIGINFO,.data = -1}, {
> -	PTRACE_SETSIGINFO,.data = -2}, {
> -	PTRACE_SETSIGINFO,.data = -3}, {
> -	PTRACE_SETSIGINFO,.data = -4},
> +	PTRACE_SETSIGINFO, .data = 0}, {
> +	PTRACE_SETSIGINFO, .data = 1}, {
> +	PTRACE_SETSIGINFO, .data = 2}, {
> +	PTRACE_SETSIGINFO, .data = 3}, {
> +	PTRACE_SETSIGINFO, .data = -1}, {
> +	PTRACE_SETSIGINFO, .data = -2}, {
> +	PTRACE_SETSIGINFO, .data = -3}, {
> +	PTRACE_SETSIGINFO, .data = -4},
> +#endif
> +};
> +
> +#define SPT(x) [PTRACE_##x] = #x,
> +static char *strings[] = {
> +	SPT(TRACEME)
> +	SPT(PEEKTEXT)
> +	SPT(PEEKDATA)
> +	SPT(PEEKUSER)
> +	SPT(POKETEXT)
> +	SPT(POKEDATA)
> +	SPT(POKEUSER)
> +#ifdef PTRACE_GETREGS
> +	SPT(GETREGS)
> +#endif
> +#ifdef PTRACE_SETREGS
> +	SPT(SETREGS)
> +#endif
> +#ifdef PTRACE_GETSIGINFO
> +	SPT(GETSIGINFO)
> +#endif
> +#ifdef PTRACE_SETSIGINFO
> +	SPT(SETSIGINFO)
> +#endif
> +#ifdef PTRACE_GETFGREGS
> +	SPT(GETFGREGS)
> +#endif
> +#ifdef PTRACE_SETFGREGS
> +	SPT(SETFGREGS)
>  #endif
> +	SPT(KILL)
> +	SPT(SINGLESTEP)
>  };
>  
> -int TST_TOTAL = ARRAY_SIZE(test_cases);
> +static inline char *strptrace(int request)
> +{
> +	return strings[request];
> +}
> +
> +static void child(void)
> +{
> +	SAFE_PTRACE(PTRACE_TRACEME, 0, NULL, NULL);
> +	execl("/bin/echo", "/bin/echo", NULL);

This isn't guaranteed to exist.

-- 
Thank you,
Richard.


More information about the ltp mailing list