1/*
2 *  Ptrace user space interface.
3 *
4 *    Copyright IBM Corp. 1999, 2010
5 *    Author(s): Denis Joseph Barrow
6 *               Martin Schwidefsky (schwidefsky@de.ibm.com)
7 */
8
9#include <linux/kernel.h>
10#include <linux/sched.h>
11#include <linux/mm.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 <linux/compat.h>
24#include <trace/syscall.h>
25#include <asm/segment.h>
26#include <asm/page.h>
27#include <asm/pgtable.h>
28#include <asm/pgalloc.h>
29#include <asm/uaccess.h>
30#include <asm/unistd.h>
31#include <asm/switch_to.h>
32#include "entry.h"
33
34#ifdef CONFIG_COMPAT
35#include "compat_ptrace.h"
36#endif
37
38#define CREATE_TRACE_POINTS
39#include <trace/events/syscalls.h>
40
41void update_cr_regs(struct task_struct *task)
42{
43	struct pt_regs *regs = task_pt_regs(task);
44	struct thread_struct *thread = &task->thread;
45	struct per_regs old, new;
46
47	/* Take care of the enable/disable of transactional execution. */
48	if (MACHINE_HAS_TE) {
49		unsigned long cr, cr_new;
50
51		__ctl_store(cr, 0, 0);
52		/* Set or clear transaction execution TXC bit 8. */
53		cr_new = cr | (1UL << 55);
54		if (task->thread.per_flags & PER_FLAG_NO_TE)
55			cr_new &= ~(1UL << 55);
56		if (cr_new != cr)
57			__ctl_load(cr_new, 0, 0);
58		/* Set or clear transaction execution TDC bits 62 and 63. */
59		__ctl_store(cr, 2, 2);
60		cr_new = cr & ~3UL;
61		if (task->thread.per_flags & PER_FLAG_TE_ABORT_RAND) {
62			if (task->thread.per_flags & PER_FLAG_TE_ABORT_RAND_TEND)
63				cr_new |= 1UL;
64			else
65				cr_new |= 2UL;
66		}
67		if (cr_new != cr)
68			__ctl_load(cr_new, 2, 2);
69	}
70	/* Copy user specified PER registers */
71	new.control = thread->per_user.control;
72	new.start = thread->per_user.start;
73	new.end = thread->per_user.end;
74
75	/* merge TIF_SINGLE_STEP into user specified PER registers. */
76	if (test_tsk_thread_flag(task, TIF_SINGLE_STEP) ||
77	    test_tsk_thread_flag(task, TIF_UPROBE_SINGLESTEP)) {
78		if (test_tsk_thread_flag(task, TIF_BLOCK_STEP))
79			new.control |= PER_EVENT_BRANCH;
80		else
81			new.control |= PER_EVENT_IFETCH;
82		new.control |= PER_CONTROL_SUSPENSION;
83		new.control |= PER_EVENT_TRANSACTION_END;
84		if (test_tsk_thread_flag(task, TIF_UPROBE_SINGLESTEP))
85			new.control |= PER_EVENT_IFETCH;
86		new.start = 0;
87		new.end = PSW_ADDR_INSN;
88	}
89
90	/* Take care of the PER enablement bit in the PSW. */
91	if (!(new.control & PER_EVENT_MASK)) {
92		regs->psw.mask &= ~PSW_MASK_PER;
93		return;
94	}
95	regs->psw.mask |= PSW_MASK_PER;
96	__ctl_store(old, 9, 11);
97	if (memcmp(&new, &old, sizeof(struct per_regs)) != 0)
98		__ctl_load(new, 9, 11);
99}
100
101void user_enable_single_step(struct task_struct *task)
102{
103	clear_tsk_thread_flag(task, TIF_BLOCK_STEP);
104	set_tsk_thread_flag(task, TIF_SINGLE_STEP);
105}
106
107void user_disable_single_step(struct task_struct *task)
108{
109	clear_tsk_thread_flag(task, TIF_BLOCK_STEP);
110	clear_tsk_thread_flag(task, TIF_SINGLE_STEP);
111}
112
113void user_enable_block_step(struct task_struct *task)
114{
115	set_tsk_thread_flag(task, TIF_SINGLE_STEP);
116	set_tsk_thread_flag(task, TIF_BLOCK_STEP);
117}
118
119/*
120 * Called by kernel/ptrace.c when detaching..
121 *
122 * Clear all debugging related fields.
123 */
124void ptrace_disable(struct task_struct *task)
125{
126	memset(&task->thread.per_user, 0, sizeof(task->thread.per_user));
127	memset(&task->thread.per_event, 0, sizeof(task->thread.per_event));
128	clear_tsk_thread_flag(task, TIF_SINGLE_STEP);
129	clear_pt_regs_flag(task_pt_regs(task), PIF_PER_TRAP);
130	task->thread.per_flags = 0;
131}
132
133#define __ADDR_MASK 7
134
135static inline unsigned long __peek_user_per(struct task_struct *child,
136					    addr_t addr)
137{
138	struct per_struct_kernel *dummy = NULL;
139
140	if (addr == (addr_t) &dummy->cr9)
141		/* Control bits of the active per set. */
142		return test_thread_flag(TIF_SINGLE_STEP) ?
143			PER_EVENT_IFETCH : child->thread.per_user.control;
144	else if (addr == (addr_t) &dummy->cr10)
145		/* Start address of the active per set. */
146		return test_thread_flag(TIF_SINGLE_STEP) ?
147			0 : child->thread.per_user.start;
148	else if (addr == (addr_t) &dummy->cr11)
149		/* End address of the active per set. */
150		return test_thread_flag(TIF_SINGLE_STEP) ?
151			PSW_ADDR_INSN : child->thread.per_user.end;
152	else if (addr == (addr_t) &dummy->bits)
153		/* Single-step bit. */
154		return test_thread_flag(TIF_SINGLE_STEP) ?
155			(1UL << (BITS_PER_LONG - 1)) : 0;
156	else if (addr == (addr_t) &dummy->starting_addr)
157		/* Start address of the user specified per set. */
158		return child->thread.per_user.start;
159	else if (addr == (addr_t) &dummy->ending_addr)
160		/* End address of the user specified per set. */
161		return child->thread.per_user.end;
162	else if (addr == (addr_t) &dummy->perc_atmid)
163		/* PER code, ATMID and AI of the last PER trap */
164		return (unsigned long)
165			child->thread.per_event.cause << (BITS_PER_LONG - 16);
166	else if (addr == (addr_t) &dummy->address)
167		/* Address of the last PER trap */
168		return child->thread.per_event.address;
169	else if (addr == (addr_t) &dummy->access_id)
170		/* Access id of the last PER trap */
171		return (unsigned long)
172			child->thread.per_event.paid << (BITS_PER_LONG - 8);
173	return 0;
174}
175
176/*
177 * Read the word at offset addr from the user area of a process. The
178 * trouble here is that the information is littered over different
179 * locations. The process registers are found on the kernel stack,
180 * the floating point stuff and the trace settings are stored in
181 * the task structure. In addition the different structures in
182 * struct user contain pad bytes that should be read as zeroes.
183 * Lovely...
184 */
185static unsigned long __peek_user(struct task_struct *child, addr_t addr)
186{
187	struct user *dummy = NULL;
188	addr_t offset, tmp;
189
190	if (addr < (addr_t) &dummy->regs.acrs) {
191		/*
192		 * psw and gprs are stored on the stack
193		 */
194		tmp = *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr);
195		if (addr == (addr_t) &dummy->regs.psw.mask) {
196			/* Return a clean psw mask. */
197			tmp &= PSW_MASK_USER | PSW_MASK_RI;
198			tmp |= PSW_USER_BITS;
199		}
200
201	} else if (addr < (addr_t) &dummy->regs.orig_gpr2) {
202		/*
203		 * access registers are stored in the thread structure
204		 */
205		offset = addr - (addr_t) &dummy->regs.acrs;
206		/*
207		 * Very special case: old & broken 64 bit gdb reading
208		 * from acrs[15]. Result is a 64 bit value. Read the
209		 * 32 bit acrs[15] value and shift it by 32. Sick...
210		 */
211		if (addr == (addr_t) &dummy->regs.acrs[15])
212			tmp = ((unsigned long) child->thread.acrs[15]) << 32;
213		else
214			tmp = *(addr_t *)((addr_t) &child->thread.acrs + offset);
215
216	} else if (addr == (addr_t) &dummy->regs.orig_gpr2) {
217		/*
218		 * orig_gpr2 is stored on the kernel stack
219		 */
220		tmp = (addr_t) task_pt_regs(child)->orig_gpr2;
221
222	} else if (addr < (addr_t) &dummy->regs.fp_regs) {
223		/*
224		 * prevent reads of padding hole between
225		 * orig_gpr2 and fp_regs on s390.
226		 */
227		tmp = 0;
228
229	} else if (addr == (addr_t) &dummy->regs.fp_regs.fpc) {
230		/*
231		 * floating point control reg. is in the thread structure
232		 */
233		tmp = child->thread.fpu.fpc;
234		tmp <<= BITS_PER_LONG - 32;
235
236	} else if (addr < (addr_t) (&dummy->regs.fp_regs + 1)) {
237		/*
238		 * floating point regs. are either in child->thread.fpu
239		 * or the child->thread.fpu.vxrs array
240		 */
241		offset = addr - (addr_t) &dummy->regs.fp_regs.fprs;
242		if (MACHINE_HAS_VX)
243			tmp = *(addr_t *)
244			       ((addr_t) child->thread.fpu.vxrs + 2*offset);
245		else
246			tmp = *(addr_t *)
247			       ((addr_t) child->thread.fpu.fprs + offset);
248
249	} else if (addr < (addr_t) (&dummy->regs.per_info + 1)) {
250		/*
251		 * Handle access to the per_info structure.
252		 */
253		addr -= (addr_t) &dummy->regs.per_info;
254		tmp = __peek_user_per(child, addr);
255
256	} else
257		tmp = 0;
258
259	return tmp;
260}
261
262static int
263peek_user(struct task_struct *child, addr_t addr, addr_t data)
264{
265	addr_t tmp, mask;
266
267	/*
268	 * Stupid gdb peeks/pokes the access registers in 64 bit with
269	 * an alignment of 4. Programmers from hell...
270	 */
271	mask = __ADDR_MASK;
272	if (addr >= (addr_t) &((struct user *) NULL)->regs.acrs &&
273	    addr < (addr_t) &((struct user *) NULL)->regs.orig_gpr2)
274		mask = 3;
275	if ((addr & mask) || addr > sizeof(struct user) - __ADDR_MASK)
276		return -EIO;
277
278	tmp = __peek_user(child, addr);
279	return put_user(tmp, (addr_t __user *) data);
280}
281
282static inline void __poke_user_per(struct task_struct *child,
283				   addr_t addr, addr_t data)
284{
285	struct per_struct_kernel *dummy = NULL;
286
287	/*
288	 * There are only three fields in the per_info struct that the
289	 * debugger user can write to.
290	 * 1) cr9: the debugger wants to set a new PER event mask
291	 * 2) starting_addr: the debugger wants to set a new starting
292	 *    address to use with the PER event mask.
293	 * 3) ending_addr: the debugger wants to set a new ending
294	 *    address to use with the PER event mask.
295	 * The user specified PER event mask and the start and end
296	 * addresses are used only if single stepping is not in effect.
297	 * Writes to any other field in per_info are ignored.
298	 */
299	if (addr == (addr_t) &dummy->cr9)
300		/* PER event mask of the user specified per set. */
301		child->thread.per_user.control =
302			data & (PER_EVENT_MASK | PER_CONTROL_MASK);
303	else if (addr == (addr_t) &dummy->starting_addr)
304		/* Starting address of the user specified per set. */
305		child->thread.per_user.start = data;
306	else if (addr == (addr_t) &dummy->ending_addr)
307		/* Ending address of the user specified per set. */
308		child->thread.per_user.end = data;
309}
310
311/*
312 * Write a word to the user area of a process at location addr. This
313 * operation does have an additional problem compared to peek_user.
314 * Stores to the program status word and on the floating point
315 * control register needs to get checked for validity.
316 */
317static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
318{
319	struct user *dummy = NULL;
320	addr_t offset;
321
322	if (addr < (addr_t) &dummy->regs.acrs) {
323		/*
324		 * psw and gprs are stored on the stack
325		 */
326		if (addr == (addr_t) &dummy->regs.psw.mask) {
327			unsigned long mask = PSW_MASK_USER;
328
329			mask |= is_ri_task(child) ? PSW_MASK_RI : 0;
330			if ((data ^ PSW_USER_BITS) & ~mask)
331				/* Invalid psw mask. */
332				return -EINVAL;
333			if ((data & PSW_MASK_ASC) == PSW_ASC_HOME)
334				/* Invalid address-space-control bits */
335				return -EINVAL;
336			if ((data & PSW_MASK_EA) && !(data & PSW_MASK_BA))
337				/* Invalid addressing mode bits */
338				return -EINVAL;
339		}
340		*(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
341
342	} else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
343		/*
344		 * access registers are stored in the thread structure
345		 */
346		offset = addr - (addr_t) &dummy->regs.acrs;
347		/*
348		 * Very special case: old & broken 64 bit gdb writing
349		 * to acrs[15] with a 64 bit value. Ignore the lower
350		 * half of the value and write the upper 32 bit to
351		 * acrs[15]. Sick...
352		 */
353		if (addr == (addr_t) &dummy->regs.acrs[15])
354			child->thread.acrs[15] = (unsigned int) (data >> 32);
355		else
356			*(addr_t *)((addr_t) &child->thread.acrs + offset) = data;
357
358	} else if (addr == (addr_t) &dummy->regs.orig_gpr2) {
359		/*
360		 * orig_gpr2 is stored on the kernel stack
361		 */
362		task_pt_regs(child)->orig_gpr2 = data;
363
364	} else if (addr < (addr_t) &dummy->regs.fp_regs) {
365		/*
366		 * prevent writes of padding hole between
367		 * orig_gpr2 and fp_regs on s390.
368		 */
369		return 0;
370
371	} else if (addr == (addr_t) &dummy->regs.fp_regs.fpc) {
372		/*
373		 * floating point control reg. is in the thread structure
374		 */
375		if ((unsigned int) data != 0 ||
376		    test_fp_ctl(data >> (BITS_PER_LONG - 32)))
377			return -EINVAL;
378		child->thread.fpu.fpc = data >> (BITS_PER_LONG - 32);
379
380	} else if (addr < (addr_t) (&dummy->regs.fp_regs + 1)) {
381		/*
382		 * floating point regs. are either in child->thread.fpu
383		 * or the child->thread.fpu.vxrs array
384		 */
385		offset = addr - (addr_t) &dummy->regs.fp_regs.fprs;
386		if (MACHINE_HAS_VX)
387			*(addr_t *)((addr_t)
388				child->thread.fpu.vxrs + 2*offset) = data;
389		else
390			*(addr_t *)((addr_t)
391				child->thread.fpu.fprs + offset) = data;
392
393	} else if (addr < (addr_t) (&dummy->regs.per_info + 1)) {
394		/*
395		 * Handle access to the per_info structure.
396		 */
397		addr -= (addr_t) &dummy->regs.per_info;
398		__poke_user_per(child, addr, data);
399
400	}
401
402	return 0;
403}
404
405static int poke_user(struct task_struct *child, addr_t addr, addr_t data)
406{
407	addr_t mask;
408
409	/*
410	 * Stupid gdb peeks/pokes the access registers in 64 bit with
411	 * an alignment of 4. Programmers from hell indeed...
412	 */
413	mask = __ADDR_MASK;
414	if (addr >= (addr_t) &((struct user *) NULL)->regs.acrs &&
415	    addr < (addr_t) &((struct user *) NULL)->regs.orig_gpr2)
416		mask = 3;
417	if ((addr & mask) || addr > sizeof(struct user) - __ADDR_MASK)
418		return -EIO;
419
420	return __poke_user(child, addr, data);
421}
422
423long arch_ptrace(struct task_struct *child, long request,
424		 unsigned long addr, unsigned long data)
425{
426	ptrace_area parea;
427	int copied, ret;
428
429	switch (request) {
430	case PTRACE_PEEKUSR:
431		/* read the word at location addr in the USER area. */
432		return peek_user(child, addr, data);
433
434	case PTRACE_POKEUSR:
435		/* write the word at location addr in the USER area */
436		return poke_user(child, addr, data);
437
438	case PTRACE_PEEKUSR_AREA:
439	case PTRACE_POKEUSR_AREA:
440		if (copy_from_user(&parea, (void __force __user *) addr,
441							sizeof(parea)))
442			return -EFAULT;
443		addr = parea.kernel_addr;
444		data = parea.process_addr;
445		copied = 0;
446		while (copied < parea.len) {
447			if (request == PTRACE_PEEKUSR_AREA)
448				ret = peek_user(child, addr, data);
449			else {
450				addr_t utmp;
451				if (get_user(utmp,
452					     (addr_t __force __user *) data))
453					return -EFAULT;
454				ret = poke_user(child, addr, utmp);
455			}
456			if (ret)
457				return ret;
458			addr += sizeof(unsigned long);
459			data += sizeof(unsigned long);
460			copied += sizeof(unsigned long);
461		}
462		return 0;
463	case PTRACE_GET_LAST_BREAK:
464		put_user(task_thread_info(child)->last_break,
465			 (unsigned long __user *) data);
466		return 0;
467	case PTRACE_ENABLE_TE:
468		if (!MACHINE_HAS_TE)
469			return -EIO;
470		child->thread.per_flags &= ~PER_FLAG_NO_TE;
471		return 0;
472	case PTRACE_DISABLE_TE:
473		if (!MACHINE_HAS_TE)
474			return -EIO;
475		child->thread.per_flags |= PER_FLAG_NO_TE;
476		child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND;
477		return 0;
478	case PTRACE_TE_ABORT_RAND:
479		if (!MACHINE_HAS_TE || (child->thread.per_flags & PER_FLAG_NO_TE))
480			return -EIO;
481		switch (data) {
482		case 0UL:
483			child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND;
484			break;
485		case 1UL:
486			child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND;
487			child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND_TEND;
488			break;
489		case 2UL:
490			child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND;
491			child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND_TEND;
492			break;
493		default:
494			return -EINVAL;
495		}
496		return 0;
497	default:
498		/* Removing high order bit from addr (only for 31 bit). */
499		addr &= PSW_ADDR_INSN;
500		return ptrace_request(child, request, addr, data);
501	}
502}
503
504#ifdef CONFIG_COMPAT
505/*
506 * Now the fun part starts... a 31 bit program running in the
507 * 31 bit emulation tracing another program. PTRACE_PEEKTEXT,
508 * PTRACE_PEEKDATA, PTRACE_POKETEXT and PTRACE_POKEDATA are easy
509 * to handle, the difference to the 64 bit versions of the requests
510 * is that the access is done in multiples of 4 byte instead of
511 * 8 bytes (sizeof(unsigned long) on 31/64 bit).
512 * The ugly part are PTRACE_PEEKUSR, PTRACE_PEEKUSR_AREA,
513 * PTRACE_POKEUSR and PTRACE_POKEUSR_AREA. If the traced program
514 * is a 31 bit program too, the content of struct user can be
515 * emulated. A 31 bit program peeking into the struct user of
516 * a 64 bit program is a no-no.
517 */
518
519/*
520 * Same as peek_user_per but for a 31 bit program.
521 */
522static inline __u32 __peek_user_per_compat(struct task_struct *child,
523					   addr_t addr)
524{
525	struct compat_per_struct_kernel *dummy32 = NULL;
526
527	if (addr == (addr_t) &dummy32->cr9)
528		/* Control bits of the active per set. */
529		return (__u32) test_thread_flag(TIF_SINGLE_STEP) ?
530			PER_EVENT_IFETCH : child->thread.per_user.control;
531	else if (addr == (addr_t) &dummy32->cr10)
532		/* Start address of the active per set. */
533		return (__u32) test_thread_flag(TIF_SINGLE_STEP) ?
534			0 : child->thread.per_user.start;
535	else if (addr == (addr_t) &dummy32->cr11)
536		/* End address of the active per set. */
537		return test_thread_flag(TIF_SINGLE_STEP) ?
538			PSW32_ADDR_INSN : child->thread.per_user.end;
539	else if (addr == (addr_t) &dummy32->bits)
540		/* Single-step bit. */
541		return (__u32) test_thread_flag(TIF_SINGLE_STEP) ?
542			0x80000000 : 0;
543	else if (addr == (addr_t) &dummy32->starting_addr)
544		/* Start address of the user specified per set. */
545		return (__u32) child->thread.per_user.start;
546	else if (addr == (addr_t) &dummy32->ending_addr)
547		/* End address of the user specified per set. */
548		return (__u32) child->thread.per_user.end;
549	else if (addr == (addr_t) &dummy32->perc_atmid)
550		/* PER code, ATMID and AI of the last PER trap */
551		return (__u32) child->thread.per_event.cause << 16;
552	else if (addr == (addr_t) &dummy32->address)
553		/* Address of the last PER trap */
554		return (__u32) child->thread.per_event.address;
555	else if (addr == (addr_t) &dummy32->access_id)
556		/* Access id of the last PER trap */
557		return (__u32) child->thread.per_event.paid << 24;
558	return 0;
559}
560
561/*
562 * Same as peek_user but for a 31 bit program.
563 */
564static u32 __peek_user_compat(struct task_struct *child, addr_t addr)
565{
566	struct compat_user *dummy32 = NULL;
567	addr_t offset;
568	__u32 tmp;
569
570	if (addr < (addr_t) &dummy32->regs.acrs) {
571		struct pt_regs *regs = task_pt_regs(child);
572		/*
573		 * psw and gprs are stored on the stack
574		 */
575		if (addr == (addr_t) &dummy32->regs.psw.mask) {
576			/* Fake a 31 bit psw mask. */
577			tmp = (__u32)(regs->psw.mask >> 32);
578			tmp &= PSW32_MASK_USER | PSW32_MASK_RI;
579			tmp |= PSW32_USER_BITS;
580		} else if (addr == (addr_t) &dummy32->regs.psw.addr) {
581			/* Fake a 31 bit psw address. */
582			tmp = (__u32) regs->psw.addr |
583				(__u32)(regs->psw.mask & PSW_MASK_BA);
584		} else {
585			/* gpr 0-15 */
586			tmp = *(__u32 *)((addr_t) &regs->psw + addr*2 + 4);
587		}
588	} else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) {
589		/*
590		 * access registers are stored in the thread structure
591		 */
592		offset = addr - (addr_t) &dummy32->regs.acrs;
593		tmp = *(__u32*)((addr_t) &child->thread.acrs + offset);
594
595	} else if (addr == (addr_t) (&dummy32->regs.orig_gpr2)) {
596		/*
597		 * orig_gpr2 is stored on the kernel stack
598		 */
599		tmp = *(__u32*)((addr_t) &task_pt_regs(child)->orig_gpr2 + 4);
600
601	} else if (addr < (addr_t) &dummy32->regs.fp_regs) {
602		/*
603		 * prevent reads of padding hole between
604		 * orig_gpr2 and fp_regs on s390.
605		 */
606		tmp = 0;
607
608	} else if (addr == (addr_t) &dummy32->regs.fp_regs.fpc) {
609		/*
610		 * floating point control reg. is in the thread structure
611		 */
612		tmp = child->thread.fpu.fpc;
613
614	} else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) {
615		/*
616		 * floating point regs. are either in child->thread.fpu
617		 * or the child->thread.fpu.vxrs array
618		 */
619		offset = addr - (addr_t) &dummy32->regs.fp_regs.fprs;
620		if (MACHINE_HAS_VX)
621			tmp = *(__u32 *)
622			       ((addr_t) child->thread.fpu.vxrs + 2*offset);
623		else
624			tmp = *(__u32 *)
625			       ((addr_t) child->thread.fpu.fprs + offset);
626
627	} else if (addr < (addr_t) (&dummy32->regs.per_info + 1)) {
628		/*
629		 * Handle access to the per_info structure.
630		 */
631		addr -= (addr_t) &dummy32->regs.per_info;
632		tmp = __peek_user_per_compat(child, addr);
633
634	} else
635		tmp = 0;
636
637	return tmp;
638}
639
640static int peek_user_compat(struct task_struct *child,
641			    addr_t addr, addr_t data)
642{
643	__u32 tmp;
644
645	if (!is_compat_task() || (addr & 3) || addr > sizeof(struct user) - 3)
646		return -EIO;
647
648	tmp = __peek_user_compat(child, addr);
649	return put_user(tmp, (__u32 __user *) data);
650}
651
652/*
653 * Same as poke_user_per but for a 31 bit program.
654 */
655static inline void __poke_user_per_compat(struct task_struct *child,
656					  addr_t addr, __u32 data)
657{
658	struct compat_per_struct_kernel *dummy32 = NULL;
659
660	if (addr == (addr_t) &dummy32->cr9)
661		/* PER event mask of the user specified per set. */
662		child->thread.per_user.control =
663			data & (PER_EVENT_MASK | PER_CONTROL_MASK);
664	else if (addr == (addr_t) &dummy32->starting_addr)
665		/* Starting address of the user specified per set. */
666		child->thread.per_user.start = data;
667	else if (addr == (addr_t) &dummy32->ending_addr)
668		/* Ending address of the user specified per set. */
669		child->thread.per_user.end = data;
670}
671
672/*
673 * Same as poke_user but for a 31 bit program.
674 */
675static int __poke_user_compat(struct task_struct *child,
676			      addr_t addr, addr_t data)
677{
678	struct compat_user *dummy32 = NULL;
679	__u32 tmp = (__u32) data;
680	addr_t offset;
681
682	if (addr < (addr_t) &dummy32->regs.acrs) {
683		struct pt_regs *regs = task_pt_regs(child);
684		/*
685		 * psw, gprs, acrs and orig_gpr2 are stored on the stack
686		 */
687		if (addr == (addr_t) &dummy32->regs.psw.mask) {
688			__u32 mask = PSW32_MASK_USER;
689
690			mask |= is_ri_task(child) ? PSW32_MASK_RI : 0;
691			/* Build a 64 bit psw mask from 31 bit mask. */
692			if ((tmp ^ PSW32_USER_BITS) & ~mask)
693				/* Invalid psw mask. */
694				return -EINVAL;
695			if ((data & PSW32_MASK_ASC) == PSW32_ASC_HOME)
696				/* Invalid address-space-control bits */
697				return -EINVAL;
698			regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
699				(regs->psw.mask & PSW_MASK_BA) |
700				(__u64)(tmp & mask) << 32;
701		} else if (addr == (addr_t) &dummy32->regs.psw.addr) {
702			/* Build a 64 bit psw address from 31 bit address. */
703			regs->psw.addr = (__u64) tmp & PSW32_ADDR_INSN;
704			/* Transfer 31 bit amode bit to psw mask. */
705			regs->psw.mask = (regs->psw.mask & ~PSW_MASK_BA) |
706				(__u64)(tmp & PSW32_ADDR_AMODE);
707		} else {
708			/* gpr 0-15 */
709			*(__u32*)((addr_t) &regs->psw + addr*2 + 4) = tmp;
710		}
711	} else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) {
712		/*
713		 * access registers are stored in the thread structure
714		 */
715		offset = addr - (addr_t) &dummy32->regs.acrs;
716		*(__u32*)((addr_t) &child->thread.acrs + offset) = tmp;
717
718	} else if (addr == (addr_t) (&dummy32->regs.orig_gpr2)) {
719		/*
720		 * orig_gpr2 is stored on the kernel stack
721		 */
722		*(__u32*)((addr_t) &task_pt_regs(child)->orig_gpr2 + 4) = tmp;
723
724	} else if (addr < (addr_t) &dummy32->regs.fp_regs) {
725		/*
726		 * prevent writess of padding hole between
727		 * orig_gpr2 and fp_regs on s390.
728		 */
729		return 0;
730
731	} else if (addr == (addr_t) &dummy32->regs.fp_regs.fpc) {
732		/*
733		 * floating point control reg. is in the thread structure
734		 */
735		if (test_fp_ctl(tmp))
736			return -EINVAL;
737		child->thread.fpu.fpc = data;
738
739	} else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) {
740		/*
741		 * floating point regs. are either in child->thread.fpu
742		 * or the child->thread.fpu.vxrs array
743		 */
744		offset = addr - (addr_t) &dummy32->regs.fp_regs.fprs;
745		if (MACHINE_HAS_VX)
746			*(__u32 *)((addr_t)
747				child->thread.fpu.vxrs + 2*offset) = tmp;
748		else
749			*(__u32 *)((addr_t)
750				child->thread.fpu.fprs + offset) = tmp;
751
752	} else if (addr < (addr_t) (&dummy32->regs.per_info + 1)) {
753		/*
754		 * Handle access to the per_info structure.
755		 */
756		addr -= (addr_t) &dummy32->regs.per_info;
757		__poke_user_per_compat(child, addr, data);
758	}
759
760	return 0;
761}
762
763static int poke_user_compat(struct task_struct *child,
764			    addr_t addr, addr_t data)
765{
766	if (!is_compat_task() || (addr & 3) ||
767	    addr > sizeof(struct compat_user) - 3)
768		return -EIO;
769
770	return __poke_user_compat(child, addr, data);
771}
772
773long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
774			compat_ulong_t caddr, compat_ulong_t cdata)
775{
776	unsigned long addr = caddr;
777	unsigned long data = cdata;
778	compat_ptrace_area parea;
779	int copied, ret;
780
781	switch (request) {
782	case PTRACE_PEEKUSR:
783		/* read the word at location addr in the USER area. */
784		return peek_user_compat(child, addr, data);
785
786	case PTRACE_POKEUSR:
787		/* write the word at location addr in the USER area */
788		return poke_user_compat(child, addr, data);
789
790	case PTRACE_PEEKUSR_AREA:
791	case PTRACE_POKEUSR_AREA:
792		if (copy_from_user(&parea, (void __force __user *) addr,
793							sizeof(parea)))
794			return -EFAULT;
795		addr = parea.kernel_addr;
796		data = parea.process_addr;
797		copied = 0;
798		while (copied < parea.len) {
799			if (request == PTRACE_PEEKUSR_AREA)
800				ret = peek_user_compat(child, addr, data);
801			else {
802				__u32 utmp;
803				if (get_user(utmp,
804					     (__u32 __force __user *) data))
805					return -EFAULT;
806				ret = poke_user_compat(child, addr, utmp);
807			}
808			if (ret)
809				return ret;
810			addr += sizeof(unsigned int);
811			data += sizeof(unsigned int);
812			copied += sizeof(unsigned int);
813		}
814		return 0;
815	case PTRACE_GET_LAST_BREAK:
816		put_user(task_thread_info(child)->last_break,
817			 (unsigned int __user *) data);
818		return 0;
819	}
820	return compat_ptrace_request(child, request, addr, data);
821}
822#endif
823
824asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
825{
826	long ret = 0;
827
828	/* Do the secure computing check first. */
829	if (secure_computing()) {
830		/* seccomp failures shouldn't expose any additional code. */
831		ret = -1;
832		goto out;
833	}
834
835	/*
836	 * The sysc_tracesys code in entry.S stored the system
837	 * call number to gprs[2].
838	 */
839	if (test_thread_flag(TIF_SYSCALL_TRACE) &&
840	    (tracehook_report_syscall_entry(regs) ||
841	     regs->gprs[2] >= NR_syscalls)) {
842		/*
843		 * Tracing decided this syscall should not happen or the
844		 * debugger stored an invalid system call number. Skip
845		 * the system call and the system call restart handling.
846		 */
847		clear_pt_regs_flag(regs, PIF_SYSCALL);
848		ret = -1;
849	}
850
851	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
852		trace_sys_enter(regs, regs->gprs[2]);
853
854	audit_syscall_entry(regs->gprs[2], regs->orig_gpr2,
855			    regs->gprs[3], regs->gprs[4],
856			    regs->gprs[5]);
857out:
858	return ret ?: regs->gprs[2];
859}
860
861asmlinkage void do_syscall_trace_exit(struct pt_regs *regs)
862{
863	audit_syscall_exit(regs);
864
865	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
866		trace_sys_exit(regs, regs->gprs[2]);
867
868	if (test_thread_flag(TIF_SYSCALL_TRACE))
869		tracehook_report_syscall_exit(regs, 0);
870}
871
872/*
873 * user_regset definitions.
874 */
875
876static int s390_regs_get(struct task_struct *target,
877			 const struct user_regset *regset,
878			 unsigned int pos, unsigned int count,
879			 void *kbuf, void __user *ubuf)
880{
881	if (target == current)
882		save_access_regs(target->thread.acrs);
883
884	if (kbuf) {
885		unsigned long *k = kbuf;
886		while (count > 0) {
887			*k++ = __peek_user(target, pos);
888			count -= sizeof(*k);
889			pos += sizeof(*k);
890		}
891	} else {
892		unsigned long __user *u = ubuf;
893		while (count > 0) {
894			if (__put_user(__peek_user(target, pos), u++))
895				return -EFAULT;
896			count -= sizeof(*u);
897			pos += sizeof(*u);
898		}
899	}
900	return 0;
901}
902
903static int s390_regs_set(struct task_struct *target,
904			 const struct user_regset *regset,
905			 unsigned int pos, unsigned int count,
906			 const void *kbuf, const void __user *ubuf)
907{
908	int rc = 0;
909
910	if (target == current)
911		save_access_regs(target->thread.acrs);
912
913	if (kbuf) {
914		const unsigned long *k = kbuf;
915		while (count > 0 && !rc) {
916			rc = __poke_user(target, pos, *k++);
917			count -= sizeof(*k);
918			pos += sizeof(*k);
919		}
920	} else {
921		const unsigned long  __user *u = ubuf;
922		while (count > 0 && !rc) {
923			unsigned long word;
924			rc = __get_user(word, u++);
925			if (rc)
926				break;
927			rc = __poke_user(target, pos, word);
928			count -= sizeof(*u);
929			pos += sizeof(*u);
930		}
931	}
932
933	if (rc == 0 && target == current)
934		restore_access_regs(target->thread.acrs);
935
936	return rc;
937}
938
939static int s390_fpregs_get(struct task_struct *target,
940			   const struct user_regset *regset, unsigned int pos,
941			   unsigned int count, void *kbuf, void __user *ubuf)
942{
943	_s390_fp_regs fp_regs;
944
945	if (target == current)
946		save_fpu_regs();
947
948	fp_regs.fpc = target->thread.fpu.fpc;
949	fpregs_store(&fp_regs, &target->thread.fpu);
950
951	return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
952				   &fp_regs, 0, -1);
953}
954
955static int s390_fpregs_set(struct task_struct *target,
956			   const struct user_regset *regset, unsigned int pos,
957			   unsigned int count, const void *kbuf,
958			   const void __user *ubuf)
959{
960	int rc = 0;
961	freg_t fprs[__NUM_FPRS];
962
963	if (target == current)
964		save_fpu_regs();
965
966	/* If setting FPC, must validate it first. */
967	if (count > 0 && pos < offsetof(s390_fp_regs, fprs)) {
968		u32 ufpc[2] = { target->thread.fpu.fpc, 0 };
969		rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ufpc,
970					0, offsetof(s390_fp_regs, fprs));
971		if (rc)
972			return rc;
973		if (ufpc[1] != 0 || test_fp_ctl(ufpc[0]))
974			return -EINVAL;
975		target->thread.fpu.fpc = ufpc[0];
976	}
977
978	if (rc == 0 && count > 0)
979		rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
980					fprs, offsetof(s390_fp_regs, fprs), -1);
981	if (rc)
982		return rc;
983
984	if (MACHINE_HAS_VX)
985		convert_fp_to_vx(target->thread.fpu.vxrs, fprs);
986	else
987		memcpy(target->thread.fpu.fprs, &fprs, sizeof(fprs));
988
989	return rc;
990}
991
992static int s390_last_break_get(struct task_struct *target,
993			       const struct user_regset *regset,
994			       unsigned int pos, unsigned int count,
995			       void *kbuf, void __user *ubuf)
996{
997	if (count > 0) {
998		if (kbuf) {
999			unsigned long *k = kbuf;
1000			*k = task_thread_info(target)->last_break;
1001		} else {
1002			unsigned long  __user *u = ubuf;
1003			if (__put_user(task_thread_info(target)->last_break, u))
1004				return -EFAULT;
1005		}
1006	}
1007	return 0;
1008}
1009
1010static int s390_last_break_set(struct task_struct *target,
1011			       const struct user_regset *regset,
1012			       unsigned int pos, unsigned int count,
1013			       const void *kbuf, const void __user *ubuf)
1014{
1015	return 0;
1016}
1017
1018static int s390_tdb_get(struct task_struct *target,
1019			const struct user_regset *regset,
1020			unsigned int pos, unsigned int count,
1021			void *kbuf, void __user *ubuf)
1022{
1023	struct pt_regs *regs = task_pt_regs(target);
1024	unsigned char *data;
1025
1026	if (!(regs->int_code & 0x200))
1027		return -ENODATA;
1028	data = target->thread.trap_tdb;
1029	return user_regset_copyout(&pos, &count, &kbuf, &ubuf, data, 0, 256);
1030}
1031
1032static int s390_tdb_set(struct task_struct *target,
1033			const struct user_regset *regset,
1034			unsigned int pos, unsigned int count,
1035			const void *kbuf, const void __user *ubuf)
1036{
1037	return 0;
1038}
1039
1040static int s390_vxrs_low_get(struct task_struct *target,
1041			     const struct user_regset *regset,
1042			     unsigned int pos, unsigned int count,
1043			     void *kbuf, void __user *ubuf)
1044{
1045	__u64 vxrs[__NUM_VXRS_LOW];
1046	int i;
1047
1048	if (!MACHINE_HAS_VX)
1049		return -ENODEV;
1050	if (target == current)
1051		save_fpu_regs();
1052	for (i = 0; i < __NUM_VXRS_LOW; i++)
1053		vxrs[i] = *((__u64 *)(target->thread.fpu.vxrs + i) + 1);
1054	return user_regset_copyout(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
1055}
1056
1057static int s390_vxrs_low_set(struct task_struct *target,
1058			     const struct user_regset *regset,
1059			     unsigned int pos, unsigned int count,
1060			     const void *kbuf, const void __user *ubuf)
1061{
1062	__u64 vxrs[__NUM_VXRS_LOW];
1063	int i, rc;
1064
1065	if (!MACHINE_HAS_VX)
1066		return -ENODEV;
1067	if (target == current)
1068		save_fpu_regs();
1069
1070	rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
1071	if (rc == 0)
1072		for (i = 0; i < __NUM_VXRS_LOW; i++)
1073			*((__u64 *)(target->thread.fpu.vxrs + i) + 1) = vxrs[i];
1074
1075	return rc;
1076}
1077
1078static int s390_vxrs_high_get(struct task_struct *target,
1079			      const struct user_regset *regset,
1080			      unsigned int pos, unsigned int count,
1081			      void *kbuf, void __user *ubuf)
1082{
1083	__vector128 vxrs[__NUM_VXRS_HIGH];
1084
1085	if (!MACHINE_HAS_VX)
1086		return -ENODEV;
1087	if (target == current)
1088		save_fpu_regs();
1089	memcpy(vxrs, target->thread.fpu.vxrs + __NUM_VXRS_LOW, sizeof(vxrs));
1090
1091	return user_regset_copyout(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
1092}
1093
1094static int s390_vxrs_high_set(struct task_struct *target,
1095			      const struct user_regset *regset,
1096			      unsigned int pos, unsigned int count,
1097			      const void *kbuf, const void __user *ubuf)
1098{
1099	int rc;
1100
1101	if (!MACHINE_HAS_VX)
1102		return -ENODEV;
1103	if (target == current)
1104		save_fpu_regs();
1105
1106	rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1107				target->thread.fpu.vxrs + __NUM_VXRS_LOW, 0, -1);
1108	return rc;
1109}
1110
1111static int s390_system_call_get(struct task_struct *target,
1112				const struct user_regset *regset,
1113				unsigned int pos, unsigned int count,
1114				void *kbuf, void __user *ubuf)
1115{
1116	unsigned int *data = &task_thread_info(target)->system_call;
1117	return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1118				   data, 0, sizeof(unsigned int));
1119}
1120
1121static int s390_system_call_set(struct task_struct *target,
1122				const struct user_regset *regset,
1123				unsigned int pos, unsigned int count,
1124				const void *kbuf, const void __user *ubuf)
1125{
1126	unsigned int *data = &task_thread_info(target)->system_call;
1127	return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1128				  data, 0, sizeof(unsigned int));
1129}
1130
1131static const struct user_regset s390_regsets[] = {
1132	{
1133		.core_note_type = NT_PRSTATUS,
1134		.n = sizeof(s390_regs) / sizeof(long),
1135		.size = sizeof(long),
1136		.align = sizeof(long),
1137		.get = s390_regs_get,
1138		.set = s390_regs_set,
1139	},
1140	{
1141		.core_note_type = NT_PRFPREG,
1142		.n = sizeof(s390_fp_regs) / sizeof(long),
1143		.size = sizeof(long),
1144		.align = sizeof(long),
1145		.get = s390_fpregs_get,
1146		.set = s390_fpregs_set,
1147	},
1148	{
1149		.core_note_type = NT_S390_SYSTEM_CALL,
1150		.n = 1,
1151		.size = sizeof(unsigned int),
1152		.align = sizeof(unsigned int),
1153		.get = s390_system_call_get,
1154		.set = s390_system_call_set,
1155	},
1156	{
1157		.core_note_type = NT_S390_LAST_BREAK,
1158		.n = 1,
1159		.size = sizeof(long),
1160		.align = sizeof(long),
1161		.get = s390_last_break_get,
1162		.set = s390_last_break_set,
1163	},
1164	{
1165		.core_note_type = NT_S390_TDB,
1166		.n = 1,
1167		.size = 256,
1168		.align = 1,
1169		.get = s390_tdb_get,
1170		.set = s390_tdb_set,
1171	},
1172	{
1173		.core_note_type = NT_S390_VXRS_LOW,
1174		.n = __NUM_VXRS_LOW,
1175		.size = sizeof(__u64),
1176		.align = sizeof(__u64),
1177		.get = s390_vxrs_low_get,
1178		.set = s390_vxrs_low_set,
1179	},
1180	{
1181		.core_note_type = NT_S390_VXRS_HIGH,
1182		.n = __NUM_VXRS_HIGH,
1183		.size = sizeof(__vector128),
1184		.align = sizeof(__vector128),
1185		.get = s390_vxrs_high_get,
1186		.set = s390_vxrs_high_set,
1187	},
1188};
1189
1190static const struct user_regset_view user_s390_view = {
1191	.name = UTS_MACHINE,
1192	.e_machine = EM_S390,
1193	.regsets = s390_regsets,
1194	.n = ARRAY_SIZE(s390_regsets)
1195};
1196
1197#ifdef CONFIG_COMPAT
1198static int s390_compat_regs_get(struct task_struct *target,
1199				const struct user_regset *regset,
1200				unsigned int pos, unsigned int count,
1201				void *kbuf, void __user *ubuf)
1202{
1203	if (target == current)
1204		save_access_regs(target->thread.acrs);
1205
1206	if (kbuf) {
1207		compat_ulong_t *k = kbuf;
1208		while (count > 0) {
1209			*k++ = __peek_user_compat(target, pos);
1210			count -= sizeof(*k);
1211			pos += sizeof(*k);
1212		}
1213	} else {
1214		compat_ulong_t __user *u = ubuf;
1215		while (count > 0) {
1216			if (__put_user(__peek_user_compat(target, pos), u++))
1217				return -EFAULT;
1218			count -= sizeof(*u);
1219			pos += sizeof(*u);
1220		}
1221	}
1222	return 0;
1223}
1224
1225static int s390_compat_regs_set(struct task_struct *target,
1226				const struct user_regset *regset,
1227				unsigned int pos, unsigned int count,
1228				const void *kbuf, const void __user *ubuf)
1229{
1230	int rc = 0;
1231
1232	if (target == current)
1233		save_access_regs(target->thread.acrs);
1234
1235	if (kbuf) {
1236		const compat_ulong_t *k = kbuf;
1237		while (count > 0 && !rc) {
1238			rc = __poke_user_compat(target, pos, *k++);
1239			count -= sizeof(*k);
1240			pos += sizeof(*k);
1241		}
1242	} else {
1243		const compat_ulong_t  __user *u = ubuf;
1244		while (count > 0 && !rc) {
1245			compat_ulong_t word;
1246			rc = __get_user(word, u++);
1247			if (rc)
1248				break;
1249			rc = __poke_user_compat(target, pos, word);
1250			count -= sizeof(*u);
1251			pos += sizeof(*u);
1252		}
1253	}
1254
1255	if (rc == 0 && target == current)
1256		restore_access_regs(target->thread.acrs);
1257
1258	return rc;
1259}
1260
1261static int s390_compat_regs_high_get(struct task_struct *target,
1262				     const struct user_regset *regset,
1263				     unsigned int pos, unsigned int count,
1264				     void *kbuf, void __user *ubuf)
1265{
1266	compat_ulong_t *gprs_high;
1267
1268	gprs_high = (compat_ulong_t *)
1269		&task_pt_regs(target)->gprs[pos / sizeof(compat_ulong_t)];
1270	if (kbuf) {
1271		compat_ulong_t *k = kbuf;
1272		while (count > 0) {
1273			*k++ = *gprs_high;
1274			gprs_high += 2;
1275			count -= sizeof(*k);
1276		}
1277	} else {
1278		compat_ulong_t __user *u = ubuf;
1279		while (count > 0) {
1280			if (__put_user(*gprs_high, u++))
1281				return -EFAULT;
1282			gprs_high += 2;
1283			count -= sizeof(*u);
1284		}
1285	}
1286	return 0;
1287}
1288
1289static int s390_compat_regs_high_set(struct task_struct *target,
1290				     const struct user_regset *regset,
1291				     unsigned int pos, unsigned int count,
1292				     const void *kbuf, const void __user *ubuf)
1293{
1294	compat_ulong_t *gprs_high;
1295	int rc = 0;
1296
1297	gprs_high = (compat_ulong_t *)
1298		&task_pt_regs(target)->gprs[pos / sizeof(compat_ulong_t)];
1299	if (kbuf) {
1300		const compat_ulong_t *k = kbuf;
1301		while (count > 0) {
1302			*gprs_high = *k++;
1303			*gprs_high += 2;
1304			count -= sizeof(*k);
1305		}
1306	} else {
1307		const compat_ulong_t  __user *u = ubuf;
1308		while (count > 0 && !rc) {
1309			unsigned long word;
1310			rc = __get_user(word, u++);
1311			if (rc)
1312				break;
1313			*gprs_high = word;
1314			*gprs_high += 2;
1315			count -= sizeof(*u);
1316		}
1317	}
1318
1319	return rc;
1320}
1321
1322static int s390_compat_last_break_get(struct task_struct *target,
1323				      const struct user_regset *regset,
1324				      unsigned int pos, unsigned int count,
1325				      void *kbuf, void __user *ubuf)
1326{
1327	compat_ulong_t last_break;
1328
1329	if (count > 0) {
1330		last_break = task_thread_info(target)->last_break;
1331		if (kbuf) {
1332			unsigned long *k = kbuf;
1333			*k = last_break;
1334		} else {
1335			unsigned long  __user *u = ubuf;
1336			if (__put_user(last_break, u))
1337				return -EFAULT;
1338		}
1339	}
1340	return 0;
1341}
1342
1343static int s390_compat_last_break_set(struct task_struct *target,
1344				      const struct user_regset *regset,
1345				      unsigned int pos, unsigned int count,
1346				      const void *kbuf, const void __user *ubuf)
1347{
1348	return 0;
1349}
1350
1351static const struct user_regset s390_compat_regsets[] = {
1352	{
1353		.core_note_type = NT_PRSTATUS,
1354		.n = sizeof(s390_compat_regs) / sizeof(compat_long_t),
1355		.size = sizeof(compat_long_t),
1356		.align = sizeof(compat_long_t),
1357		.get = s390_compat_regs_get,
1358		.set = s390_compat_regs_set,
1359	},
1360	{
1361		.core_note_type = NT_PRFPREG,
1362		.n = sizeof(s390_fp_regs) / sizeof(compat_long_t),
1363		.size = sizeof(compat_long_t),
1364		.align = sizeof(compat_long_t),
1365		.get = s390_fpregs_get,
1366		.set = s390_fpregs_set,
1367	},
1368	{
1369		.core_note_type = NT_S390_SYSTEM_CALL,
1370		.n = 1,
1371		.size = sizeof(compat_uint_t),
1372		.align = sizeof(compat_uint_t),
1373		.get = s390_system_call_get,
1374		.set = s390_system_call_set,
1375	},
1376	{
1377		.core_note_type = NT_S390_LAST_BREAK,
1378		.n = 1,
1379		.size = sizeof(long),
1380		.align = sizeof(long),
1381		.get = s390_compat_last_break_get,
1382		.set = s390_compat_last_break_set,
1383	},
1384	{
1385		.core_note_type = NT_S390_TDB,
1386		.n = 1,
1387		.size = 256,
1388		.align = 1,
1389		.get = s390_tdb_get,
1390		.set = s390_tdb_set,
1391	},
1392	{
1393		.core_note_type = NT_S390_VXRS_LOW,
1394		.n = __NUM_VXRS_LOW,
1395		.size = sizeof(__u64),
1396		.align = sizeof(__u64),
1397		.get = s390_vxrs_low_get,
1398		.set = s390_vxrs_low_set,
1399	},
1400	{
1401		.core_note_type = NT_S390_VXRS_HIGH,
1402		.n = __NUM_VXRS_HIGH,
1403		.size = sizeof(__vector128),
1404		.align = sizeof(__vector128),
1405		.get = s390_vxrs_high_get,
1406		.set = s390_vxrs_high_set,
1407	},
1408	{
1409		.core_note_type = NT_S390_HIGH_GPRS,
1410		.n = sizeof(s390_compat_regs_high) / sizeof(compat_long_t),
1411		.size = sizeof(compat_long_t),
1412		.align = sizeof(compat_long_t),
1413		.get = s390_compat_regs_high_get,
1414		.set = s390_compat_regs_high_set,
1415	},
1416};
1417
1418static const struct user_regset_view user_s390_compat_view = {
1419	.name = "s390",
1420	.e_machine = EM_S390,
1421	.regsets = s390_compat_regsets,
1422	.n = ARRAY_SIZE(s390_compat_regsets)
1423};
1424#endif
1425
1426const struct user_regset_view *task_user_regset_view(struct task_struct *task)
1427{
1428#ifdef CONFIG_COMPAT
1429	if (test_tsk_thread_flag(task, TIF_31BIT))
1430		return &user_s390_compat_view;
1431#endif
1432	return &user_s390_view;
1433}
1434
1435static const char *gpr_names[NUM_GPRS] = {
1436	"r0", "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
1437	"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
1438};
1439
1440unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset)
1441{
1442	if (offset >= NUM_GPRS)
1443		return 0;
1444	return regs->gprs[offset];
1445}
1446
1447int regs_query_register_offset(const char *name)
1448{
1449	unsigned long offset;
1450
1451	if (!name || *name != 'r')
1452		return -EINVAL;
1453	if (kstrtoul(name + 1, 10, &offset))
1454		return -EINVAL;
1455	if (offset >= NUM_GPRS)
1456		return -EINVAL;
1457	return offset;
1458}
1459
1460const char *regs_query_register_name(unsigned int offset)
1461{
1462	if (offset >= NUM_GPRS)
1463		return NULL;
1464	return gpr_names[offset];
1465}
1466
1467static int regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr)
1468{
1469	unsigned long ksp = kernel_stack_pointer(regs);
1470
1471	return (addr & ~(THREAD_SIZE - 1)) == (ksp & ~(THREAD_SIZE - 1));
1472}
1473
1474/**
1475 * regs_get_kernel_stack_nth() - get Nth entry of the stack
1476 * @regs:pt_regs which contains kernel stack pointer.
1477 * @n:stack entry number.
1478 *
1479 * regs_get_kernel_stack_nth() returns @n th entry of the kernel stack which
1480 * is specifined by @regs. If the @n th entry is NOT in the kernel stack,
1481 * this returns 0.
1482 */
1483unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n)
1484{
1485	unsigned long addr;
1486
1487	addr = kernel_stack_pointer(regs) + n * sizeof(long);
1488	if (!regs_within_kernel_stack(regs, addr))
1489		return 0;
1490	return *(unsigned long *)addr;
1491}
1492