2 * Ptrace user space interface.
4 * Copyright IBM Corp. 1999,2010
5 * Author(s): Denis Joseph Barrow
6 * Martin Schwidefsky (schwidefsky@de.ibm.com)
9 #include <linux/kernel.h>
10 #include <linux/sched.h>
12 #include <linux/smp.h>
13 #include <linux/errno.h>
14 #include <linux/ptrace.h>
15 #include <linux/user.h>
16 #include <linux/security.h>
17 #include <linux/audit.h>
18 #include <linux/signal.h>
19 #include <linux/elf.h>
20 #include <linux/regset.h>
21 #include <linux/tracehook.h>
22 #include <linux/seccomp.h>
23 #include <trace/syscall.h>
24 #include <asm/compat.h>
25 #include <asm/segment.h>
27 #include <asm/pgtable.h>
28 #include <asm/pgalloc.h>
29 #include <asm/system.h>
30 #include <asm/uaccess.h>
31 #include <asm/unistd.h>
35 #include "compat_ptrace.h"
38 #define CREATE_TRACE_POINTS
39 #include <trace/events/syscalls.h>
45 REGSET_GENERAL_EXTENDED
,
48 void update_per_regs(struct task_struct
*task
)
50 static const struct per_regs per_single_step
= {
51 .control
= PER_EVENT_IFETCH
,
55 struct pt_regs
*regs
= task_pt_regs(task
);
56 struct thread_struct
*thread
= &task
->thread
;
57 const struct per_regs
*new;
60 /* TIF_SINGLE_STEP overrides the user specified PER registers. */
61 new = test_tsk_thread_flag(task
, TIF_SINGLE_STEP
) ?
62 &per_single_step
: &thread
->per_user
;
64 /* Take care of the PER enablement bit in the PSW. */
65 if (!(new->control
& PER_EVENT_MASK
)) {
66 regs
->psw
.mask
&= ~PSW_MASK_PER
;
69 regs
->psw
.mask
|= PSW_MASK_PER
;
70 __ctl_store(old
, 9, 11);
71 if (memcmp(new, &old
, sizeof(struct per_regs
)) != 0)
72 __ctl_load(*new, 9, 11);
75 void user_enable_single_step(struct task_struct
*task
)
77 set_tsk_thread_flag(task
, TIF_SINGLE_STEP
);
79 update_per_regs(task
);
82 void user_disable_single_step(struct task_struct
*task
)
84 clear_tsk_thread_flag(task
, TIF_SINGLE_STEP
);
86 update_per_regs(task
);
90 * Called by kernel/ptrace.c when detaching..
92 * Clear all debugging related fields.
94 void ptrace_disable(struct task_struct
*task
)
96 memset(&task
->thread
.per_user
, 0, sizeof(task
->thread
.per_user
));
97 memset(&task
->thread
.per_event
, 0, sizeof(task
->thread
.per_event
));
98 clear_tsk_thread_flag(task
, TIF_SINGLE_STEP
);
99 clear_tsk_thread_flag(task
, TIF_PER_TRAP
);
103 # define __ADDR_MASK 3
105 # define __ADDR_MASK 7
108 static inline unsigned long __peek_user_per(struct task_struct
*child
,
111 struct per_struct_kernel
*dummy
= NULL
;
113 if (addr
== (addr_t
) &dummy
->cr9
)
114 /* Control bits of the active per set. */
115 return test_thread_flag(TIF_SINGLE_STEP
) ?
116 PER_EVENT_IFETCH
: child
->thread
.per_user
.control
;
117 else if (addr
== (addr_t
) &dummy
->cr10
)
118 /* Start address of the active per set. */
119 return test_thread_flag(TIF_SINGLE_STEP
) ?
120 0 : child
->thread
.per_user
.start
;
121 else if (addr
== (addr_t
) &dummy
->cr11
)
122 /* End address of the active per set. */
123 return test_thread_flag(TIF_SINGLE_STEP
) ?
124 PSW_ADDR_INSN
: child
->thread
.per_user
.end
;
125 else if (addr
== (addr_t
) &dummy
->bits
)
126 /* Single-step bit. */
127 return test_thread_flag(TIF_SINGLE_STEP
) ?
128 (1UL << (BITS_PER_LONG
- 1)) : 0;
129 else if (addr
== (addr_t
) &dummy
->starting_addr
)
130 /* Start address of the user specified per set. */
131 return child
->thread
.per_user
.start
;
132 else if (addr
== (addr_t
) &dummy
->ending_addr
)
133 /* End address of the user specified per set. */
134 return child
->thread
.per_user
.end
;
135 else if (addr
== (addr_t
) &dummy
->perc_atmid
)
136 /* PER code, ATMID and AI of the last PER trap */
137 return (unsigned long)
138 child
->thread
.per_event
.cause
<< (BITS_PER_LONG
- 16);
139 else if (addr
== (addr_t
) &dummy
->address
)
140 /* Address of the last PER trap */
141 return child
->thread
.per_event
.address
;
142 else if (addr
== (addr_t
) &dummy
->access_id
)
143 /* Access id of the last PER trap */
144 return (unsigned long)
145 child
->thread
.per_event
.paid
<< (BITS_PER_LONG
- 8);
150 * Read the word at offset addr from the user area of a process. The
151 * trouble here is that the information is littered over different
152 * locations. The process registers are found on the kernel stack,
153 * the floating point stuff and the trace settings are stored in
154 * the task structure. In addition the different structures in
155 * struct user contain pad bytes that should be read as zeroes.
158 static unsigned long __peek_user(struct task_struct
*child
, addr_t addr
)
160 struct user
*dummy
= NULL
;
163 if (addr
< (addr_t
) &dummy
->regs
.acrs
) {
165 * psw and gprs are stored on the stack
167 tmp
= *(addr_t
*)((addr_t
) &task_pt_regs(child
)->psw
+ addr
);
168 if (addr
== (addr_t
) &dummy
->regs
.psw
.mask
)
169 /* Remove per bit from user psw. */
170 tmp
&= ~PSW_MASK_PER
;
172 } else if (addr
< (addr_t
) &dummy
->regs
.orig_gpr2
) {
174 * access registers are stored in the thread structure
176 offset
= addr
- (addr_t
) &dummy
->regs
.acrs
;
179 * Very special case: old & broken 64 bit gdb reading
180 * from acrs[15]. Result is a 64 bit value. Read the
181 * 32 bit acrs[15] value and shift it by 32. Sick...
183 if (addr
== (addr_t
) &dummy
->regs
.acrs
[15])
184 tmp
= ((unsigned long) child
->thread
.acrs
[15]) << 32;
187 tmp
= *(addr_t
*)((addr_t
) &child
->thread
.acrs
+ offset
);
189 } else if (addr
== (addr_t
) &dummy
->regs
.orig_gpr2
) {
191 * orig_gpr2 is stored on the kernel stack
193 tmp
= (addr_t
) task_pt_regs(child
)->orig_gpr2
;
195 } else if (addr
< (addr_t
) &dummy
->regs
.fp_regs
) {
197 * prevent reads of padding hole between
198 * orig_gpr2 and fp_regs on s390.
202 } else if (addr
< (addr_t
) (&dummy
->regs
.fp_regs
+ 1)) {
204 * floating point regs. are stored in the thread structure
206 offset
= addr
- (addr_t
) &dummy
->regs
.fp_regs
;
207 tmp
= *(addr_t
*)((addr_t
) &child
->thread
.fp_regs
+ offset
);
208 if (addr
== (addr_t
) &dummy
->regs
.fp_regs
.fpc
)
209 tmp
&= (unsigned long) FPC_VALID_MASK
210 << (BITS_PER_LONG
- 32);
212 } else if (addr
< (addr_t
) (&dummy
->regs
.per_info
+ 1)) {
214 * Handle access to the per_info structure.
216 addr
-= (addr_t
) &dummy
->regs
.per_info
;
217 tmp
= __peek_user_per(child
, addr
);
226 peek_user(struct task_struct
*child
, addr_t addr
, addr_t data
)
231 * Stupid gdb peeks/pokes the access registers in 64 bit with
232 * an alignment of 4. Programmers from hell...
236 if (addr
>= (addr_t
) &((struct user
*) NULL
)->regs
.acrs
&&
237 addr
< (addr_t
) &((struct user
*) NULL
)->regs
.orig_gpr2
)
240 if ((addr
& mask
) || addr
> sizeof(struct user
) - __ADDR_MASK
)
243 tmp
= __peek_user(child
, addr
);
244 return put_user(tmp
, (addr_t __user
*) data
);
247 static inline void __poke_user_per(struct task_struct
*child
,
248 addr_t addr
, addr_t data
)
250 struct per_struct_kernel
*dummy
= NULL
;
253 * There are only three fields in the per_info struct that the
254 * debugger user can write to.
255 * 1) cr9: the debugger wants to set a new PER event mask
256 * 2) starting_addr: the debugger wants to set a new starting
257 * address to use with the PER event mask.
258 * 3) ending_addr: the debugger wants to set a new ending
259 * address to use with the PER event mask.
260 * The user specified PER event mask and the start and end
261 * addresses are used only if single stepping is not in effect.
262 * Writes to any other field in per_info are ignored.
264 if (addr
== (addr_t
) &dummy
->cr9
)
265 /* PER event mask of the user specified per set. */
266 child
->thread
.per_user
.control
=
267 data
& (PER_EVENT_MASK
| PER_CONTROL_MASK
);
268 else if (addr
== (addr_t
) &dummy
->starting_addr
)
269 /* Starting address of the user specified per set. */
270 child
->thread
.per_user
.start
= data
;
271 else if (addr
== (addr_t
) &dummy
->ending_addr
)
272 /* Ending address of the user specified per set. */
273 child
->thread
.per_user
.end
= data
;
277 * Write a word to the user area of a process at location addr. This
278 * operation does have an additional problem compared to peek_user.
279 * Stores to the program status word and on the floating point
280 * control register needs to get checked for validity.
282 static int __poke_user(struct task_struct
*child
, addr_t addr
, addr_t data
)
284 struct user
*dummy
= NULL
;
287 if (addr
< (addr_t
) &dummy
->regs
.acrs
) {
289 * psw and gprs are stored on the stack
291 if (addr
== (addr_t
) &dummy
->regs
.psw
.mask
&&
293 data
!= PSW_MASK_MERGE(psw_user32_bits
, data
) &&
295 data
!= PSW_MASK_MERGE(psw_user_bits
, data
))
296 /* Invalid psw mask. */
299 if (addr
== (addr_t
) &dummy
->regs
.psw
.addr
)
300 /* I'd like to reject addresses without the
301 high order bit but older gdb's rely on it */
302 data
|= PSW_ADDR_AMODE
;
304 *(addr_t
*)((addr_t
) &task_pt_regs(child
)->psw
+ addr
) = data
;
306 } else if (addr
< (addr_t
) (&dummy
->regs
.orig_gpr2
)) {
308 * access registers are stored in the thread structure
310 offset
= addr
- (addr_t
) &dummy
->regs
.acrs
;
313 * Very special case: old & broken 64 bit gdb writing
314 * to acrs[15] with a 64 bit value. Ignore the lower
315 * half of the value and write the upper 32 bit to
318 if (addr
== (addr_t
) &dummy
->regs
.acrs
[15])
319 child
->thread
.acrs
[15] = (unsigned int) (data
>> 32);
322 *(addr_t
*)((addr_t
) &child
->thread
.acrs
+ offset
) = data
;
324 } else if (addr
== (addr_t
) &dummy
->regs
.orig_gpr2
) {
326 * orig_gpr2 is stored on the kernel stack
328 task_pt_regs(child
)->orig_gpr2
= data
;
330 } else if (addr
< (addr_t
) &dummy
->regs
.fp_regs
) {
332 * prevent writes of padding hole between
333 * orig_gpr2 and fp_regs on s390.
337 } else if (addr
< (addr_t
) (&dummy
->regs
.fp_regs
+ 1)) {
339 * floating point regs. are stored in the thread structure
341 if (addr
== (addr_t
) &dummy
->regs
.fp_regs
.fpc
&&
342 (data
& ~((unsigned long) FPC_VALID_MASK
343 << (BITS_PER_LONG
- 32))) != 0)
345 offset
= addr
- (addr_t
) &dummy
->regs
.fp_regs
;
346 *(addr_t
*)((addr_t
) &child
->thread
.fp_regs
+ offset
) = data
;
348 } else if (addr
< (addr_t
) (&dummy
->regs
.per_info
+ 1)) {
350 * Handle access to the per_info structure.
352 addr
-= (addr_t
) &dummy
->regs
.per_info
;
353 __poke_user_per(child
, addr
, data
);
360 static int poke_user(struct task_struct
*child
, addr_t addr
, addr_t data
)
365 * Stupid gdb peeks/pokes the access registers in 64 bit with
366 * an alignment of 4. Programmers from hell indeed...
370 if (addr
>= (addr_t
) &((struct user
*) NULL
)->regs
.acrs
&&
371 addr
< (addr_t
) &((struct user
*) NULL
)->regs
.orig_gpr2
)
374 if ((addr
& mask
) || addr
> sizeof(struct user
) - __ADDR_MASK
)
377 return __poke_user(child
, addr
, data
);
380 long arch_ptrace(struct task_struct
*child
, long request
,
381 unsigned long addr
, unsigned long data
)
388 /* read the word at location addr in the USER area. */
389 return peek_user(child
, addr
, data
);
392 /* write the word at location addr in the USER area */
393 return poke_user(child
, addr
, data
);
395 case PTRACE_PEEKUSR_AREA
:
396 case PTRACE_POKEUSR_AREA
:
397 if (copy_from_user(&parea
, (void __force __user
*) addr
,
400 addr
= parea
.kernel_addr
;
401 data
= parea
.process_addr
;
403 while (copied
< parea
.len
) {
404 if (request
== PTRACE_PEEKUSR_AREA
)
405 ret
= peek_user(child
, addr
, data
);
409 (addr_t __force __user
*) data
))
411 ret
= poke_user(child
, addr
, utmp
);
415 addr
+= sizeof(unsigned long);
416 data
+= sizeof(unsigned long);
417 copied
+= sizeof(unsigned long);
420 case PTRACE_GET_LAST_BREAK
:
421 put_user(task_thread_info(child
)->last_break
,
422 (unsigned long __user
*) data
);
425 /* Removing high order bit from addr (only for 31 bit). */
426 addr
&= PSW_ADDR_INSN
;
427 return ptrace_request(child
, request
, addr
, data
);
433 * Now the fun part starts... a 31 bit program running in the
434 * 31 bit emulation tracing another program. PTRACE_PEEKTEXT,
435 * PTRACE_PEEKDATA, PTRACE_POKETEXT and PTRACE_POKEDATA are easy
436 * to handle, the difference to the 64 bit versions of the requests
437 * is that the access is done in multiples of 4 byte instead of
438 * 8 bytes (sizeof(unsigned long) on 31/64 bit).
439 * The ugly part are PTRACE_PEEKUSR, PTRACE_PEEKUSR_AREA,
440 * PTRACE_POKEUSR and PTRACE_POKEUSR_AREA. If the traced program
441 * is a 31 bit program too, the content of struct user can be
442 * emulated. A 31 bit program peeking into the struct user of
443 * a 64 bit program is a no-no.
447 * Same as peek_user_per but for a 31 bit program.
449 static inline __u32
__peek_user_per_compat(struct task_struct
*child
,
452 struct compat_per_struct_kernel
*dummy32
= NULL
;
454 if (addr
== (addr_t
) &dummy32
->cr9
)
455 /* Control bits of the active per set. */
456 return (__u32
) test_thread_flag(TIF_SINGLE_STEP
) ?
457 PER_EVENT_IFETCH
: child
->thread
.per_user
.control
;
458 else if (addr
== (addr_t
) &dummy32
->cr10
)
459 /* Start address of the active per set. */
460 return (__u32
) test_thread_flag(TIF_SINGLE_STEP
) ?
461 0 : child
->thread
.per_user
.start
;
462 else if (addr
== (addr_t
) &dummy32
->cr11
)
463 /* End address of the active per set. */
464 return test_thread_flag(TIF_SINGLE_STEP
) ?
465 PSW32_ADDR_INSN
: child
->thread
.per_user
.end
;
466 else if (addr
== (addr_t
) &dummy32
->bits
)
467 /* Single-step bit. */
468 return (__u32
) test_thread_flag(TIF_SINGLE_STEP
) ?
470 else if (addr
== (addr_t
) &dummy32
->starting_addr
)
471 /* Start address of the user specified per set. */
472 return (__u32
) child
->thread
.per_user
.start
;
473 else if (addr
== (addr_t
) &dummy32
->ending_addr
)
474 /* End address of the user specified per set. */
475 return (__u32
) child
->thread
.per_user
.end
;
476 else if (addr
== (addr_t
) &dummy32
->perc_atmid
)
477 /* PER code, ATMID and AI of the last PER trap */
478 return (__u32
) child
->thread
.per_event
.cause
<< 16;
479 else if (addr
== (addr_t
) &dummy32
->address
)
480 /* Address of the last PER trap */
481 return (__u32
) child
->thread
.per_event
.address
;
482 else if (addr
== (addr_t
) &dummy32
->access_id
)
483 /* Access id of the last PER trap */
484 return (__u32
) child
->thread
.per_event
.paid
<< 24;
489 * Same as peek_user but for a 31 bit program.
491 static u32
__peek_user_compat(struct task_struct
*child
, addr_t addr
)
493 struct compat_user
*dummy32
= NULL
;
497 if (addr
< (addr_t
) &dummy32
->regs
.acrs
) {
499 * psw and gprs are stored on the stack
501 if (addr
== (addr_t
) &dummy32
->regs
.psw
.mask
) {
502 /* Fake a 31 bit psw mask. */
503 tmp
= (__u32
)(task_pt_regs(child
)->psw
.mask
>> 32);
504 tmp
= PSW32_MASK_MERGE(psw32_user_bits
, tmp
);
505 } else if (addr
== (addr_t
) &dummy32
->regs
.psw
.addr
) {
506 /* Fake a 31 bit psw address. */
507 tmp
= (__u32
) task_pt_regs(child
)->psw
.addr
|
511 tmp
= *(__u32
*)((addr_t
) &task_pt_regs(child
)->psw
+
514 } else if (addr
< (addr_t
) (&dummy32
->regs
.orig_gpr2
)) {
516 * access registers are stored in the thread structure
518 offset
= addr
- (addr_t
) &dummy32
->regs
.acrs
;
519 tmp
= *(__u32
*)((addr_t
) &child
->thread
.acrs
+ offset
);
521 } else if (addr
== (addr_t
) (&dummy32
->regs
.orig_gpr2
)) {
523 * orig_gpr2 is stored on the kernel stack
525 tmp
= *(__u32
*)((addr_t
) &task_pt_regs(child
)->orig_gpr2
+ 4);
527 } else if (addr
< (addr_t
) &dummy32
->regs
.fp_regs
) {
529 * prevent reads of padding hole between
530 * orig_gpr2 and fp_regs on s390.
534 } else if (addr
< (addr_t
) (&dummy32
->regs
.fp_regs
+ 1)) {
536 * floating point regs. are stored in the thread structure
538 offset
= addr
- (addr_t
) &dummy32
->regs
.fp_regs
;
539 tmp
= *(__u32
*)((addr_t
) &child
->thread
.fp_regs
+ offset
);
541 } else if (addr
< (addr_t
) (&dummy32
->regs
.per_info
+ 1)) {
543 * Handle access to the per_info structure.
545 addr
-= (addr_t
) &dummy32
->regs
.per_info
;
546 tmp
= __peek_user_per_compat(child
, addr
);
554 static int peek_user_compat(struct task_struct
*child
,
555 addr_t addr
, addr_t data
)
559 if (!is_compat_task() || (addr
& 3) || addr
> sizeof(struct user
) - 3)
562 tmp
= __peek_user_compat(child
, addr
);
563 return put_user(tmp
, (__u32 __user
*) data
);
567 * Same as poke_user_per but for a 31 bit program.
569 static inline void __poke_user_per_compat(struct task_struct
*child
,
570 addr_t addr
, __u32 data
)
572 struct compat_per_struct_kernel
*dummy32
= NULL
;
574 if (addr
== (addr_t
) &dummy32
->cr9
)
575 /* PER event mask of the user specified per set. */
576 child
->thread
.per_user
.control
=
577 data
& (PER_EVENT_MASK
| PER_CONTROL_MASK
);
578 else if (addr
== (addr_t
) &dummy32
->starting_addr
)
579 /* Starting address of the user specified per set. */
580 child
->thread
.per_user
.start
= data
;
581 else if (addr
== (addr_t
) &dummy32
->ending_addr
)
582 /* Ending address of the user specified per set. */
583 child
->thread
.per_user
.end
= data
;
587 * Same as poke_user but for a 31 bit program.
589 static int __poke_user_compat(struct task_struct
*child
,
590 addr_t addr
, addr_t data
)
592 struct compat_user
*dummy32
= NULL
;
593 __u32 tmp
= (__u32
) data
;
596 if (addr
< (addr_t
) &dummy32
->regs
.acrs
) {
598 * psw, gprs, acrs and orig_gpr2 are stored on the stack
600 if (addr
== (addr_t
) &dummy32
->regs
.psw
.mask
) {
601 /* Build a 64 bit psw mask from 31 bit mask. */
602 if (tmp
!= PSW32_MASK_MERGE(psw32_user_bits
, tmp
))
603 /* Invalid psw mask. */
605 task_pt_regs(child
)->psw
.mask
=
606 PSW_MASK_MERGE(psw_user32_bits
, (__u64
) tmp
<< 32);
607 } else if (addr
== (addr_t
) &dummy32
->regs
.psw
.addr
) {
608 /* Build a 64 bit psw address from 31 bit address. */
609 task_pt_regs(child
)->psw
.addr
=
610 (__u64
) tmp
& PSW32_ADDR_INSN
;
613 *(__u32
*)((addr_t
) &task_pt_regs(child
)->psw
616 } else if (addr
< (addr_t
) (&dummy32
->regs
.orig_gpr2
)) {
618 * access registers are stored in the thread structure
620 offset
= addr
- (addr_t
) &dummy32
->regs
.acrs
;
621 *(__u32
*)((addr_t
) &child
->thread
.acrs
+ offset
) = tmp
;
623 } else if (addr
== (addr_t
) (&dummy32
->regs
.orig_gpr2
)) {
625 * orig_gpr2 is stored on the kernel stack
627 *(__u32
*)((addr_t
) &task_pt_regs(child
)->orig_gpr2
+ 4) = tmp
;
629 } else if (addr
< (addr_t
) &dummy32
->regs
.fp_regs
) {
631 * prevent writess of padding hole between
632 * orig_gpr2 and fp_regs on s390.
636 } else if (addr
< (addr_t
) (&dummy32
->regs
.fp_regs
+ 1)) {
638 * floating point regs. are stored in the thread structure
640 if (addr
== (addr_t
) &dummy32
->regs
.fp_regs
.fpc
&&
641 (tmp
& ~FPC_VALID_MASK
) != 0)
642 /* Invalid floating point control. */
644 offset
= addr
- (addr_t
) &dummy32
->regs
.fp_regs
;
645 *(__u32
*)((addr_t
) &child
->thread
.fp_regs
+ offset
) = tmp
;
647 } else if (addr
< (addr_t
) (&dummy32
->regs
.per_info
+ 1)) {
649 * Handle access to the per_info structure.
651 addr
-= (addr_t
) &dummy32
->regs
.per_info
;
652 __poke_user_per_compat(child
, addr
, data
);
658 static int poke_user_compat(struct task_struct
*child
,
659 addr_t addr
, addr_t data
)
661 if (!is_compat_task() || (addr
& 3) ||
662 addr
> sizeof(struct compat_user
) - 3)
665 return __poke_user_compat(child
, addr
, data
);
668 long compat_arch_ptrace(struct task_struct
*child
, compat_long_t request
,
669 compat_ulong_t caddr
, compat_ulong_t cdata
)
671 unsigned long addr
= caddr
;
672 unsigned long data
= cdata
;
673 compat_ptrace_area parea
;
678 /* read the word at location addr in the USER area. */
679 return peek_user_compat(child
, addr
, data
);
682 /* write the word at location addr in the USER area */
683 return poke_user_compat(child
, addr
, data
);
685 case PTRACE_PEEKUSR_AREA
:
686 case PTRACE_POKEUSR_AREA
:
687 if (copy_from_user(&parea
, (void __force __user
*) addr
,
690 addr
= parea
.kernel_addr
;
691 data
= parea
.process_addr
;
693 while (copied
< parea
.len
) {
694 if (request
== PTRACE_PEEKUSR_AREA
)
695 ret
= peek_user_compat(child
, addr
, data
);
699 (__u32 __force __user
*) data
))
701 ret
= poke_user_compat(child
, addr
, utmp
);
705 addr
+= sizeof(unsigned int);
706 data
+= sizeof(unsigned int);
707 copied
+= sizeof(unsigned int);
710 case PTRACE_GET_LAST_BREAK
:
711 put_user(task_thread_info(child
)->last_break
,
712 (unsigned int __user
*) data
);
715 return compat_ptrace_request(child
, request
, addr
, data
);
719 asmlinkage
long do_syscall_trace_enter(struct pt_regs
*regs
)
723 /* Do the secure computing check first. */
724 secure_computing(regs
->gprs
[2]);
727 * The sysc_tracesys code in entry.S stored the system
728 * call number to gprs[2].
730 if (test_thread_flag(TIF_SYSCALL_TRACE
) &&
731 (tracehook_report_syscall_entry(regs
) ||
732 regs
->gprs
[2] >= NR_syscalls
)) {
734 * Tracing decided this syscall should not happen or the
735 * debugger stored an invalid system call number. Skip
736 * the system call and the system call restart handling.
742 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT
)))
743 trace_sys_enter(regs
, regs
->gprs
[2]);
745 if (unlikely(current
->audit_context
))
746 audit_syscall_entry(is_compat_task() ?
747 AUDIT_ARCH_S390
: AUDIT_ARCH_S390X
,
748 regs
->gprs
[2], regs
->orig_gpr2
,
749 regs
->gprs
[3], regs
->gprs
[4],
751 return ret
?: regs
->gprs
[2];
754 asmlinkage
void do_syscall_trace_exit(struct pt_regs
*regs
)
756 if (unlikely(current
->audit_context
))
757 audit_syscall_exit(AUDITSC_RESULT(regs
->gprs
[2]),
760 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT
)))
761 trace_sys_exit(regs
, regs
->gprs
[2]);
763 if (test_thread_flag(TIF_SYSCALL_TRACE
))
764 tracehook_report_syscall_exit(regs
, 0);
768 * user_regset definitions.
771 static int s390_regs_get(struct task_struct
*target
,
772 const struct user_regset
*regset
,
773 unsigned int pos
, unsigned int count
,
774 void *kbuf
, void __user
*ubuf
)
776 if (target
== current
)
777 save_access_regs(target
->thread
.acrs
);
780 unsigned long *k
= kbuf
;
782 *k
++ = __peek_user(target
, pos
);
787 unsigned long __user
*u
= ubuf
;
789 if (__put_user(__peek_user(target
, pos
), u
++))
798 static int s390_regs_set(struct task_struct
*target
,
799 const struct user_regset
*regset
,
800 unsigned int pos
, unsigned int count
,
801 const void *kbuf
, const void __user
*ubuf
)
805 if (target
== current
)
806 save_access_regs(target
->thread
.acrs
);
809 const unsigned long *k
= kbuf
;
810 while (count
> 0 && !rc
) {
811 rc
= __poke_user(target
, pos
, *k
++);
816 const unsigned long __user
*u
= ubuf
;
817 while (count
> 0 && !rc
) {
819 rc
= __get_user(word
, u
++);
822 rc
= __poke_user(target
, pos
, word
);
828 if (rc
== 0 && target
== current
)
829 restore_access_regs(target
->thread
.acrs
);
834 static int s390_fpregs_get(struct task_struct
*target
,
835 const struct user_regset
*regset
, unsigned int pos
,
836 unsigned int count
, void *kbuf
, void __user
*ubuf
)
838 if (target
== current
)
839 save_fp_regs(&target
->thread
.fp_regs
);
841 return user_regset_copyout(&pos
, &count
, &kbuf
, &ubuf
,
842 &target
->thread
.fp_regs
, 0, -1);
845 static int s390_fpregs_set(struct task_struct
*target
,
846 const struct user_regset
*regset
, unsigned int pos
,
847 unsigned int count
, const void *kbuf
,
848 const void __user
*ubuf
)
852 if (target
== current
)
853 save_fp_regs(&target
->thread
.fp_regs
);
855 /* If setting FPC, must validate it first. */
856 if (count
> 0 && pos
< offsetof(s390_fp_regs
, fprs
)) {
857 u32 fpc
[2] = { target
->thread
.fp_regs
.fpc
, 0 };
858 rc
= user_regset_copyin(&pos
, &count
, &kbuf
, &ubuf
, &fpc
,
859 0, offsetof(s390_fp_regs
, fprs
));
862 if ((fpc
[0] & ~FPC_VALID_MASK
) != 0 || fpc
[1] != 0)
864 target
->thread
.fp_regs
.fpc
= fpc
[0];
867 if (rc
== 0 && count
> 0)
868 rc
= user_regset_copyin(&pos
, &count
, &kbuf
, &ubuf
,
869 target
->thread
.fp_regs
.fprs
,
870 offsetof(s390_fp_regs
, fprs
), -1);
872 if (rc
== 0 && target
== current
)
873 restore_fp_regs(&target
->thread
.fp_regs
);
880 static int s390_last_break_get(struct task_struct
*target
,
881 const struct user_regset
*regset
,
882 unsigned int pos
, unsigned int count
,
883 void *kbuf
, void __user
*ubuf
)
887 unsigned long *k
= kbuf
;
888 *k
= task_thread_info(target
)->last_break
;
890 unsigned long __user
*u
= ubuf
;
891 if (__put_user(task_thread_info(target
)->last_break
, u
))
900 static const struct user_regset s390_regsets
[] = {
902 .core_note_type
= NT_PRSTATUS
,
903 .n
= sizeof(s390_regs
) / sizeof(long),
904 .size
= sizeof(long),
905 .align
= sizeof(long),
906 .get
= s390_regs_get
,
907 .set
= s390_regs_set
,
910 .core_note_type
= NT_PRFPREG
,
911 .n
= sizeof(s390_fp_regs
) / sizeof(long),
912 .size
= sizeof(long),
913 .align
= sizeof(long),
914 .get
= s390_fpregs_get
,
915 .set
= s390_fpregs_set
,
918 [REGSET_LAST_BREAK
] = {
919 .core_note_type
= NT_S390_LAST_BREAK
,
921 .size
= sizeof(long),
922 .align
= sizeof(long),
923 .get
= s390_last_break_get
,
928 static const struct user_regset_view user_s390_view
= {
930 .e_machine
= EM_S390
,
931 .regsets
= s390_regsets
,
932 .n
= ARRAY_SIZE(s390_regsets
)
936 static int s390_compat_regs_get(struct task_struct
*target
,
937 const struct user_regset
*regset
,
938 unsigned int pos
, unsigned int count
,
939 void *kbuf
, void __user
*ubuf
)
941 if (target
== current
)
942 save_access_regs(target
->thread
.acrs
);
945 compat_ulong_t
*k
= kbuf
;
947 *k
++ = __peek_user_compat(target
, pos
);
952 compat_ulong_t __user
*u
= ubuf
;
954 if (__put_user(__peek_user_compat(target
, pos
), u
++))
963 static int s390_compat_regs_set(struct task_struct
*target
,
964 const struct user_regset
*regset
,
965 unsigned int pos
, unsigned int count
,
966 const void *kbuf
, const void __user
*ubuf
)
970 if (target
== current
)
971 save_access_regs(target
->thread
.acrs
);
974 const compat_ulong_t
*k
= kbuf
;
975 while (count
> 0 && !rc
) {
976 rc
= __poke_user_compat(target
, pos
, *k
++);
981 const compat_ulong_t __user
*u
= ubuf
;
982 while (count
> 0 && !rc
) {
984 rc
= __get_user(word
, u
++);
987 rc
= __poke_user_compat(target
, pos
, word
);
993 if (rc
== 0 && target
== current
)
994 restore_access_regs(target
->thread
.acrs
);
999 static int s390_compat_regs_high_get(struct task_struct
*target
,
1000 const struct user_regset
*regset
,
1001 unsigned int pos
, unsigned int count
,
1002 void *kbuf
, void __user
*ubuf
)
1004 compat_ulong_t
*gprs_high
;
1006 gprs_high
= (compat_ulong_t
*)
1007 &task_pt_regs(target
)->gprs
[pos
/ sizeof(compat_ulong_t
)];
1009 compat_ulong_t
*k
= kbuf
;
1013 count
-= sizeof(*k
);
1016 compat_ulong_t __user
*u
= ubuf
;
1018 if (__put_user(*gprs_high
, u
++))
1021 count
-= sizeof(*u
);
1027 static int s390_compat_regs_high_set(struct task_struct
*target
,
1028 const struct user_regset
*regset
,
1029 unsigned int pos
, unsigned int count
,
1030 const void *kbuf
, const void __user
*ubuf
)
1032 compat_ulong_t
*gprs_high
;
1035 gprs_high
= (compat_ulong_t
*)
1036 &task_pt_regs(target
)->gprs
[pos
/ sizeof(compat_ulong_t
)];
1038 const compat_ulong_t
*k
= kbuf
;
1042 count
-= sizeof(*k
);
1045 const compat_ulong_t __user
*u
= ubuf
;
1046 while (count
> 0 && !rc
) {
1048 rc
= __get_user(word
, u
++);
1053 count
-= sizeof(*u
);
1060 static int s390_compat_last_break_get(struct task_struct
*target
,
1061 const struct user_regset
*regset
,
1062 unsigned int pos
, unsigned int count
,
1063 void *kbuf
, void __user
*ubuf
)
1065 compat_ulong_t last_break
;
1068 last_break
= task_thread_info(target
)->last_break
;
1070 unsigned long *k
= kbuf
;
1073 unsigned long __user
*u
= ubuf
;
1074 if (__put_user(last_break
, u
))
1081 static const struct user_regset s390_compat_regsets
[] = {
1082 [REGSET_GENERAL
] = {
1083 .core_note_type
= NT_PRSTATUS
,
1084 .n
= sizeof(s390_compat_regs
) / sizeof(compat_long_t
),
1085 .size
= sizeof(compat_long_t
),
1086 .align
= sizeof(compat_long_t
),
1087 .get
= s390_compat_regs_get
,
1088 .set
= s390_compat_regs_set
,
1091 .core_note_type
= NT_PRFPREG
,
1092 .n
= sizeof(s390_fp_regs
) / sizeof(compat_long_t
),
1093 .size
= sizeof(compat_long_t
),
1094 .align
= sizeof(compat_long_t
),
1095 .get
= s390_fpregs_get
,
1096 .set
= s390_fpregs_set
,
1098 [REGSET_LAST_BREAK
] = {
1099 .core_note_type
= NT_S390_LAST_BREAK
,
1101 .size
= sizeof(long),
1102 .align
= sizeof(long),
1103 .get
= s390_compat_last_break_get
,
1105 [REGSET_GENERAL_EXTENDED
] = {
1106 .core_note_type
= NT_S390_HIGH_GPRS
,
1107 .n
= sizeof(s390_compat_regs_high
) / sizeof(compat_long_t
),
1108 .size
= sizeof(compat_long_t
),
1109 .align
= sizeof(compat_long_t
),
1110 .get
= s390_compat_regs_high_get
,
1111 .set
= s390_compat_regs_high_set
,
1115 static const struct user_regset_view user_s390_compat_view
= {
1117 .e_machine
= EM_S390
,
1118 .regsets
= s390_compat_regsets
,
1119 .n
= ARRAY_SIZE(s390_compat_regsets
)
1123 const struct user_regset_view
*task_user_regset_view(struct task_struct
*task
)
1125 #ifdef CONFIG_COMPAT
1126 if (test_tsk_thread_flag(task
, TIF_31BIT
))
1127 return &user_s390_compat_view
;
1129 return &user_s390_view
;
1132 static const char *gpr_names
[NUM_GPRS
] = {
1133 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
1134 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
1137 unsigned long regs_get_register(struct pt_regs
*regs
, unsigned int offset
)
1139 if (offset
>= NUM_GPRS
)
1141 return regs
->gprs
[offset
];
1144 int regs_query_register_offset(const char *name
)
1146 unsigned long offset
;
1148 if (!name
|| *name
!= 'r')
1150 if (strict_strtoul(name
+ 1, 10, &offset
))
1152 if (offset
>= NUM_GPRS
)
1157 const char *regs_query_register_name(unsigned int offset
)
1159 if (offset
>= NUM_GPRS
)
1161 return gpr_names
[offset
];
1164 static int regs_within_kernel_stack(struct pt_regs
*regs
, unsigned long addr
)
1166 unsigned long ksp
= kernel_stack_pointer(regs
);
1168 return (addr
& ~(THREAD_SIZE
- 1)) == (ksp
& ~(THREAD_SIZE
- 1));
1172 * regs_get_kernel_stack_nth() - get Nth entry of the stack
1173 * @regs:pt_regs which contains kernel stack pointer.
1174 * @n:stack entry number.
1176 * regs_get_kernel_stack_nth() returns @n th entry of the kernel stack which
1177 * is specifined by @regs. If the @n th entry is NOT in the kernel stack,
1180 unsigned long regs_get_kernel_stack_nth(struct pt_regs
*regs
, unsigned int n
)
1184 addr
= kernel_stack_pointer(regs
) + n
* sizeof(long);
1185 if (!regs_within_kernel_stack(regs
, addr
))
1187 return *(unsigned long *)addr
;