 29000caecb
			
		
	
	
	29000caecb
	
	
	
		
			
			crtools uses a parasite code for dumping processes. The parasite code is injected into a process with help PTRACE_SEIZE. Currently crtools blocks signals from a parasite code. If a process has pending signals, crtools wait while a process handles these signals. This method is not suitable for stopped tasks. A stopped task can have a few pending signals, when we will try to execute a parasite code, we will need to drop SIGSTOP, but all other signals must remain pending, because a state of processes must not be changed during checkpointing. This patch adds two ptrace commands to set/get signal-blocked mask. I think gdb can use this commands too. [akpm@linux-foundation.org: be consistent with brace layout] Signed-off-by: Andrey Vagin <avagin@openvz.org> Reviewed-by: Oleg Nesterov <oleg@redhat.com> Cc: Roland McGrath <roland@redhat.com> Cc: Michael Kerrisk <mtk.manpages@gmail.com> Cc: Pavel Emelyanov <xemul@parallels.com> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _UAPI_LINUX_PTRACE_H
 | |
| #define _UAPI_LINUX_PTRACE_H
 | |
| /* ptrace.h */
 | |
| /* structs and defines to help the user use the ptrace system call. */
 | |
| 
 | |
| /* has the defines to get at the registers. */
 | |
| 
 | |
| #include <linux/types.h>
 | |
| 
 | |
| #define PTRACE_TRACEME		   0
 | |
| #define PTRACE_PEEKTEXT		   1
 | |
| #define PTRACE_PEEKDATA		   2
 | |
| #define PTRACE_PEEKUSR		   3
 | |
| #define PTRACE_POKETEXT		   4
 | |
| #define PTRACE_POKEDATA		   5
 | |
| #define PTRACE_POKEUSR		   6
 | |
| #define PTRACE_CONT		   7
 | |
| #define PTRACE_KILL		   8
 | |
| #define PTRACE_SINGLESTEP	   9
 | |
| 
 | |
| #define PTRACE_ATTACH		  16
 | |
| #define PTRACE_DETACH		  17
 | |
| 
 | |
| #define PTRACE_SYSCALL		  24
 | |
| 
 | |
| /* 0x4200-0x4300 are reserved for architecture-independent additions.  */
 | |
| #define PTRACE_SETOPTIONS	0x4200
 | |
| #define PTRACE_GETEVENTMSG	0x4201
 | |
| #define PTRACE_GETSIGINFO	0x4202
 | |
| #define PTRACE_SETSIGINFO	0x4203
 | |
| 
 | |
| /*
 | |
|  * Generic ptrace interface that exports the architecture specific regsets
 | |
|  * using the corresponding NT_* types (which are also used in the core dump).
 | |
|  * Please note that the NT_PRSTATUS note type in a core dump contains a full
 | |
|  * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the
 | |
|  * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the
 | |
|  * other user_regset flavors, the user_regset layout and the ELF core dump note
 | |
|  * payload are exactly the same layout.
 | |
|  *
 | |
|  * This interface usage is as follows:
 | |
|  *	struct iovec iov = { buf, len};
 | |
|  *
 | |
|  *	ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov);
 | |
|  *
 | |
|  * On the successful completion, iov.len will be updated by the kernel,
 | |
|  * specifying how much the kernel has written/read to/from the user's iov.buf.
 | |
|  */
 | |
| #define PTRACE_GETREGSET	0x4204
 | |
| #define PTRACE_SETREGSET	0x4205
 | |
| 
 | |
| #define PTRACE_SEIZE		0x4206
 | |
| #define PTRACE_INTERRUPT	0x4207
 | |
| #define PTRACE_LISTEN		0x4208
 | |
| 
 | |
| #define PTRACE_PEEKSIGINFO	0x4209
 | |
| 
 | |
| struct ptrace_peeksiginfo_args {
 | |
| 	__u64 off;	/* from which siginfo to start */
 | |
| 	__u32 flags;
 | |
| 	__s32 nr;	/* how may siginfos to take */
 | |
| };
 | |
| 
 | |
| #define PTRACE_GETSIGMASK	0x420a
 | |
| #define PTRACE_SETSIGMASK	0x420b
 | |
| 
 | |
| /* Read signals from a shared (process wide) queue */
 | |
| #define PTRACE_PEEKSIGINFO_SHARED	(1 << 0)
 | |
| 
 | |
| /* Wait extended result codes for the above trace options.  */
 | |
| #define PTRACE_EVENT_FORK	1
 | |
| #define PTRACE_EVENT_VFORK	2
 | |
| #define PTRACE_EVENT_CLONE	3
 | |
| #define PTRACE_EVENT_EXEC	4
 | |
| #define PTRACE_EVENT_VFORK_DONE	5
 | |
| #define PTRACE_EVENT_EXIT	6
 | |
| #define PTRACE_EVENT_SECCOMP	7
 | |
| /* Extended result codes which enabled by means other than options.  */
 | |
| #define PTRACE_EVENT_STOP	128
 | |
| 
 | |
| /* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */
 | |
| #define PTRACE_O_TRACESYSGOOD	1
 | |
| #define PTRACE_O_TRACEFORK	(1 << PTRACE_EVENT_FORK)
 | |
| #define PTRACE_O_TRACEVFORK	(1 << PTRACE_EVENT_VFORK)
 | |
| #define PTRACE_O_TRACECLONE	(1 << PTRACE_EVENT_CLONE)
 | |
| #define PTRACE_O_TRACEEXEC	(1 << PTRACE_EVENT_EXEC)
 | |
| #define PTRACE_O_TRACEVFORKDONE	(1 << PTRACE_EVENT_VFORK_DONE)
 | |
| #define PTRACE_O_TRACEEXIT	(1 << PTRACE_EVENT_EXIT)
 | |
| #define PTRACE_O_TRACESECCOMP	(1 << PTRACE_EVENT_SECCOMP)
 | |
| 
 | |
| /* eventless options */
 | |
| #define PTRACE_O_EXITKILL	(1 << 20)
 | |
| 
 | |
| #define PTRACE_O_MASK		(0x000000ff | PTRACE_O_EXITKILL)
 | |
| 
 | |
| #include <asm/ptrace.h>
 | |
| 
 | |
| 
 | |
| #endif /* _UAPI_LINUX_PTRACE_H */
 |