x86, smap: Add STAC and CLAC instructions to control user space access
[cascardo/linux.git] / arch / x86 / kernel / ptrace.c
1 /* By Ross Biro 1/23/92 */
2 /*
3  * Pentium III FXSR, SSE support
4  *      Gareth Hughes <gareth@valinux.com>, May 2000
5  */
6
7 #include <linux/kernel.h>
8 #include <linux/sched.h>
9 #include <linux/mm.h>
10 #include <linux/smp.h>
11 #include <linux/errno.h>
12 #include <linux/slab.h>
13 #include <linux/ptrace.h>
14 #include <linux/regset.h>
15 #include <linux/tracehook.h>
16 #include <linux/user.h>
17 #include <linux/elf.h>
18 #include <linux/security.h>
19 #include <linux/audit.h>
20 #include <linux/seccomp.h>
21 #include <linux/signal.h>
22 #include <linux/perf_event.h>
23 #include <linux/hw_breakpoint.h>
24
25 #include <asm/uaccess.h>
26 #include <asm/pgtable.h>
27 #include <asm/processor.h>
28 #include <asm/i387.h>
29 #include <asm/fpu-internal.h>
30 #include <asm/debugreg.h>
31 #include <asm/ldt.h>
32 #include <asm/desc.h>
33 #include <asm/prctl.h>
34 #include <asm/proto.h>
35 #include <asm/hw_breakpoint.h>
36 #include <asm/traps.h>
37
38 #include "tls.h"
39
40 #define CREATE_TRACE_POINTS
41 #include <trace/events/syscalls.h>
42
43 enum x86_regset {
44         REGSET_GENERAL,
45         REGSET_FP,
46         REGSET_XFP,
47         REGSET_IOPERM64 = REGSET_XFP,
48         REGSET_XSTATE,
49         REGSET_TLS,
50         REGSET_IOPERM32,
51 };
52
53 struct pt_regs_offset {
54         const char *name;
55         int offset;
56 };
57
58 #define REG_OFFSET_NAME(r) {.name = #r, .offset = offsetof(struct pt_regs, r)}
59 #define REG_OFFSET_END {.name = NULL, .offset = 0}
60
61 static const struct pt_regs_offset regoffset_table[] = {
62 #ifdef CONFIG_X86_64
63         REG_OFFSET_NAME(r15),
64         REG_OFFSET_NAME(r14),
65         REG_OFFSET_NAME(r13),
66         REG_OFFSET_NAME(r12),
67         REG_OFFSET_NAME(r11),
68         REG_OFFSET_NAME(r10),
69         REG_OFFSET_NAME(r9),
70         REG_OFFSET_NAME(r8),
71 #endif
72         REG_OFFSET_NAME(bx),
73         REG_OFFSET_NAME(cx),
74         REG_OFFSET_NAME(dx),
75         REG_OFFSET_NAME(si),
76         REG_OFFSET_NAME(di),
77         REG_OFFSET_NAME(bp),
78         REG_OFFSET_NAME(ax),
79 #ifdef CONFIG_X86_32
80         REG_OFFSET_NAME(ds),
81         REG_OFFSET_NAME(es),
82         REG_OFFSET_NAME(fs),
83         REG_OFFSET_NAME(gs),
84 #endif
85         REG_OFFSET_NAME(orig_ax),
86         REG_OFFSET_NAME(ip),
87         REG_OFFSET_NAME(cs),
88         REG_OFFSET_NAME(flags),
89         REG_OFFSET_NAME(sp),
90         REG_OFFSET_NAME(ss),
91         REG_OFFSET_END,
92 };
93
94 /**
95  * regs_query_register_offset() - query register offset from its name
96  * @name:       the name of a register
97  *
98  * regs_query_register_offset() returns the offset of a register in struct
99  * pt_regs from its name. If the name is invalid, this returns -EINVAL;
100  */
101 int regs_query_register_offset(const char *name)
102 {
103         const struct pt_regs_offset *roff;
104         for (roff = regoffset_table; roff->name != NULL; roff++)
105                 if (!strcmp(roff->name, name))
106                         return roff->offset;
107         return -EINVAL;
108 }
109
110 /**
111  * regs_query_register_name() - query register name from its offset
112  * @offset:     the offset of a register in struct pt_regs.
113  *
114  * regs_query_register_name() returns the name of a register from its
115  * offset in struct pt_regs. If the @offset is invalid, this returns NULL;
116  */
117 const char *regs_query_register_name(unsigned int offset)
118 {
119         const struct pt_regs_offset *roff;
120         for (roff = regoffset_table; roff->name != NULL; roff++)
121                 if (roff->offset == offset)
122                         return roff->name;
123         return NULL;
124 }
125
126 static const int arg_offs_table[] = {
127 #ifdef CONFIG_X86_32
128         [0] = offsetof(struct pt_regs, ax),
129         [1] = offsetof(struct pt_regs, dx),
130         [2] = offsetof(struct pt_regs, cx)
131 #else /* CONFIG_X86_64 */
132         [0] = offsetof(struct pt_regs, di),
133         [1] = offsetof(struct pt_regs, si),
134         [2] = offsetof(struct pt_regs, dx),
135         [3] = offsetof(struct pt_regs, cx),
136         [4] = offsetof(struct pt_regs, r8),
137         [5] = offsetof(struct pt_regs, r9)
138 #endif
139 };
140
141 /*
142  * does not yet catch signals sent when the child dies.
143  * in exit.c or in signal.c.
144  */
145
146 /*
147  * Determines which flags the user has access to [1 = access, 0 = no access].
148  */
149 #define FLAG_MASK_32            ((unsigned long)                        \
150                                  (X86_EFLAGS_CF | X86_EFLAGS_PF |       \
151                                   X86_EFLAGS_AF | X86_EFLAGS_ZF |       \
152                                   X86_EFLAGS_SF | X86_EFLAGS_TF |       \
153                                   X86_EFLAGS_DF | X86_EFLAGS_OF |       \
154                                   X86_EFLAGS_RF | X86_EFLAGS_AC))
155
156 /*
157  * Determines whether a value may be installed in a segment register.
158  */
159 static inline bool invalid_selector(u16 value)
160 {
161         return unlikely(value != 0 && (value & SEGMENT_RPL_MASK) != USER_RPL);
162 }
163
164 #ifdef CONFIG_X86_32
165
166 #define FLAG_MASK               FLAG_MASK_32
167
168 static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long regno)
169 {
170         BUILD_BUG_ON(offsetof(struct pt_regs, bx) != 0);
171         return &regs->bx + (regno >> 2);
172 }
173
174 static u16 get_segment_reg(struct task_struct *task, unsigned long offset)
175 {
176         /*
177          * Returning the value truncates it to 16 bits.
178          */
179         unsigned int retval;
180         if (offset != offsetof(struct user_regs_struct, gs))
181                 retval = *pt_regs_access(task_pt_regs(task), offset);
182         else {
183                 if (task == current)
184                         retval = get_user_gs(task_pt_regs(task));
185                 else
186                         retval = task_user_gs(task);
187         }
188         return retval;
189 }
190
191 static int set_segment_reg(struct task_struct *task,
192                            unsigned long offset, u16 value)
193 {
194         /*
195          * The value argument was already truncated to 16 bits.
196          */
197         if (invalid_selector(value))
198                 return -EIO;
199
200         /*
201          * For %cs and %ss we cannot permit a null selector.
202          * We can permit a bogus selector as long as it has USER_RPL.
203          * Null selectors are fine for other segment registers, but
204          * we will never get back to user mode with invalid %cs or %ss
205          * and will take the trap in iret instead.  Much code relies
206          * on user_mode() to distinguish a user trap frame (which can
207          * safely use invalid selectors) from a kernel trap frame.
208          */
209         switch (offset) {
210         case offsetof(struct user_regs_struct, cs):
211         case offsetof(struct user_regs_struct, ss):
212                 if (unlikely(value == 0))
213                         return -EIO;
214
215         default:
216                 *pt_regs_access(task_pt_regs(task), offset) = value;
217                 break;
218
219         case offsetof(struct user_regs_struct, gs):
220                 if (task == current)
221                         set_user_gs(task_pt_regs(task), value);
222                 else
223                         task_user_gs(task) = value;
224         }
225
226         return 0;
227 }
228
229 #else  /* CONFIG_X86_64 */
230
231 #define FLAG_MASK               (FLAG_MASK_32 | X86_EFLAGS_NT)
232
233 static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long offset)
234 {
235         BUILD_BUG_ON(offsetof(struct pt_regs, r15) != 0);
236         return &regs->r15 + (offset / sizeof(regs->r15));
237 }
238
239 static u16 get_segment_reg(struct task_struct *task, unsigned long offset)
240 {
241         /*
242          * Returning the value truncates it to 16 bits.
243          */
244         unsigned int seg;
245
246         switch (offset) {
247         case offsetof(struct user_regs_struct, fs):
248                 if (task == current) {
249                         /* Older gas can't assemble movq %?s,%r?? */
250                         asm("movl %%fs,%0" : "=r" (seg));
251                         return seg;
252                 }
253                 return task->thread.fsindex;
254         case offsetof(struct user_regs_struct, gs):
255                 if (task == current) {
256                         asm("movl %%gs,%0" : "=r" (seg));
257                         return seg;
258                 }
259                 return task->thread.gsindex;
260         case offsetof(struct user_regs_struct, ds):
261                 if (task == current) {
262                         asm("movl %%ds,%0" : "=r" (seg));
263                         return seg;
264                 }
265                 return task->thread.ds;
266         case offsetof(struct user_regs_struct, es):
267                 if (task == current) {
268                         asm("movl %%es,%0" : "=r" (seg));
269                         return seg;
270                 }
271                 return task->thread.es;
272
273         case offsetof(struct user_regs_struct, cs):
274         case offsetof(struct user_regs_struct, ss):
275                 break;
276         }
277         return *pt_regs_access(task_pt_regs(task), offset);
278 }
279
280 static int set_segment_reg(struct task_struct *task,
281                            unsigned long offset, u16 value)
282 {
283         /*
284          * The value argument was already truncated to 16 bits.
285          */
286         if (invalid_selector(value))
287                 return -EIO;
288
289         switch (offset) {
290         case offsetof(struct user_regs_struct,fs):
291                 /*
292                  * If this is setting fs as for normal 64-bit use but
293                  * setting fs_base has implicitly changed it, leave it.
294                  */
295                 if ((value == FS_TLS_SEL && task->thread.fsindex == 0 &&
296                      task->thread.fs != 0) ||
297                     (value == 0 && task->thread.fsindex == FS_TLS_SEL &&
298                      task->thread.fs == 0))
299                         break;
300                 task->thread.fsindex = value;
301                 if (task == current)
302                         loadsegment(fs, task->thread.fsindex);
303                 break;
304         case offsetof(struct user_regs_struct,gs):
305                 /*
306                  * If this is setting gs as for normal 64-bit use but
307                  * setting gs_base has implicitly changed it, leave it.
308                  */
309                 if ((value == GS_TLS_SEL && task->thread.gsindex == 0 &&
310                      task->thread.gs != 0) ||
311                     (value == 0 && task->thread.gsindex == GS_TLS_SEL &&
312                      task->thread.gs == 0))
313                         break;
314                 task->thread.gsindex = value;
315                 if (task == current)
316                         load_gs_index(task->thread.gsindex);
317                 break;
318         case offsetof(struct user_regs_struct,ds):
319                 task->thread.ds = value;
320                 if (task == current)
321                         loadsegment(ds, task->thread.ds);
322                 break;
323         case offsetof(struct user_regs_struct,es):
324                 task->thread.es = value;
325                 if (task == current)
326                         loadsegment(es, task->thread.es);
327                 break;
328
329                 /*
330                  * Can't actually change these in 64-bit mode.
331                  */
332         case offsetof(struct user_regs_struct,cs):
333                 if (unlikely(value == 0))
334                         return -EIO;
335 #ifdef CONFIG_IA32_EMULATION
336                 if (test_tsk_thread_flag(task, TIF_IA32))
337                         task_pt_regs(task)->cs = value;
338 #endif
339                 break;
340         case offsetof(struct user_regs_struct,ss):
341                 if (unlikely(value == 0))
342                         return -EIO;
343 #ifdef CONFIG_IA32_EMULATION
344                 if (test_tsk_thread_flag(task, TIF_IA32))
345                         task_pt_regs(task)->ss = value;
346 #endif
347                 break;
348         }
349
350         return 0;
351 }
352
353 #endif  /* CONFIG_X86_32 */
354
355 static unsigned long get_flags(struct task_struct *task)
356 {
357         unsigned long retval = task_pt_regs(task)->flags;
358
359         /*
360          * If the debugger set TF, hide it from the readout.
361          */
362         if (test_tsk_thread_flag(task, TIF_FORCED_TF))
363                 retval &= ~X86_EFLAGS_TF;
364
365         return retval;
366 }
367
368 static int set_flags(struct task_struct *task, unsigned long value)
369 {
370         struct pt_regs *regs = task_pt_regs(task);
371
372         /*
373          * If the user value contains TF, mark that
374          * it was not "us" (the debugger) that set it.
375          * If not, make sure it stays set if we had.
376          */
377         if (value & X86_EFLAGS_TF)
378                 clear_tsk_thread_flag(task, TIF_FORCED_TF);
379         else if (test_tsk_thread_flag(task, TIF_FORCED_TF))
380                 value |= X86_EFLAGS_TF;
381
382         regs->flags = (regs->flags & ~FLAG_MASK) | (value & FLAG_MASK);
383
384         return 0;
385 }
386
387 static int putreg(struct task_struct *child,
388                   unsigned long offset, unsigned long value)
389 {
390         switch (offset) {
391         case offsetof(struct user_regs_struct, cs):
392         case offsetof(struct user_regs_struct, ds):
393         case offsetof(struct user_regs_struct, es):
394         case offsetof(struct user_regs_struct, fs):
395         case offsetof(struct user_regs_struct, gs):
396         case offsetof(struct user_regs_struct, ss):
397                 return set_segment_reg(child, offset, value);
398
399         case offsetof(struct user_regs_struct, flags):
400                 return set_flags(child, value);
401
402 #ifdef CONFIG_X86_64
403         case offsetof(struct user_regs_struct,fs_base):
404                 if (value >= TASK_SIZE_OF(child))
405                         return -EIO;
406                 /*
407                  * When changing the segment base, use do_arch_prctl
408                  * to set either thread.fs or thread.fsindex and the
409                  * corresponding GDT slot.
410                  */
411                 if (child->thread.fs != value)
412                         return do_arch_prctl(child, ARCH_SET_FS, value);
413                 return 0;
414         case offsetof(struct user_regs_struct,gs_base):
415                 /*
416                  * Exactly the same here as the %fs handling above.
417                  */
418                 if (value >= TASK_SIZE_OF(child))
419                         return -EIO;
420                 if (child->thread.gs != value)
421                         return do_arch_prctl(child, ARCH_SET_GS, value);
422                 return 0;
423 #endif
424         }
425
426         *pt_regs_access(task_pt_regs(child), offset) = value;
427         return 0;
428 }
429
430 static unsigned long getreg(struct task_struct *task, unsigned long offset)
431 {
432         switch (offset) {
433         case offsetof(struct user_regs_struct, cs):
434         case offsetof(struct user_regs_struct, ds):
435         case offsetof(struct user_regs_struct, es):
436         case offsetof(struct user_regs_struct, fs):
437         case offsetof(struct user_regs_struct, gs):
438         case offsetof(struct user_regs_struct, ss):
439                 return get_segment_reg(task, offset);
440
441         case offsetof(struct user_regs_struct, flags):
442                 return get_flags(task);
443
444 #ifdef CONFIG_X86_64
445         case offsetof(struct user_regs_struct, fs_base): {
446                 /*
447                  * do_arch_prctl may have used a GDT slot instead of
448                  * the MSR.  To userland, it appears the same either
449                  * way, except the %fs segment selector might not be 0.
450                  */
451                 unsigned int seg = task->thread.fsindex;
452                 if (task->thread.fs != 0)
453                         return task->thread.fs;
454                 if (task == current)
455                         asm("movl %%fs,%0" : "=r" (seg));
456                 if (seg != FS_TLS_SEL)
457                         return 0;
458                 return get_desc_base(&task->thread.tls_array[FS_TLS]);
459         }
460         case offsetof(struct user_regs_struct, gs_base): {
461                 /*
462                  * Exactly the same here as the %fs handling above.
463                  */
464                 unsigned int seg = task->thread.gsindex;
465                 if (task->thread.gs != 0)
466                         return task->thread.gs;
467                 if (task == current)
468                         asm("movl %%gs,%0" : "=r" (seg));
469                 if (seg != GS_TLS_SEL)
470                         return 0;
471                 return get_desc_base(&task->thread.tls_array[GS_TLS]);
472         }
473 #endif
474         }
475
476         return *pt_regs_access(task_pt_regs(task), offset);
477 }
478
479 static int genregs_get(struct task_struct *target,
480                        const struct user_regset *regset,
481                        unsigned int pos, unsigned int count,
482                        void *kbuf, void __user *ubuf)
483 {
484         if (kbuf) {
485                 unsigned long *k = kbuf;
486                 while (count >= sizeof(*k)) {
487                         *k++ = getreg(target, pos);
488                         count -= sizeof(*k);
489                         pos += sizeof(*k);
490                 }
491         } else {
492                 unsigned long __user *u = ubuf;
493                 while (count >= sizeof(*u)) {
494                         if (__put_user(getreg(target, pos), u++))
495                                 return -EFAULT;
496                         count -= sizeof(*u);
497                         pos += sizeof(*u);
498                 }
499         }
500
501         return 0;
502 }
503
504 static int genregs_set(struct task_struct *target,
505                        const struct user_regset *regset,
506                        unsigned int pos, unsigned int count,
507                        const void *kbuf, const void __user *ubuf)
508 {
509         int ret = 0;
510         if (kbuf) {
511                 const unsigned long *k = kbuf;
512                 while (count >= sizeof(*k) && !ret) {
513                         ret = putreg(target, pos, *k++);
514                         count -= sizeof(*k);
515                         pos += sizeof(*k);
516                 }
517         } else {
518                 const unsigned long  __user *u = ubuf;
519                 while (count >= sizeof(*u) && !ret) {
520                         unsigned long word;
521                         ret = __get_user(word, u++);
522                         if (ret)
523                                 break;
524                         ret = putreg(target, pos, word);
525                         count -= sizeof(*u);
526                         pos += sizeof(*u);
527                 }
528         }
529         return ret;
530 }
531
532 static void ptrace_triggered(struct perf_event *bp,
533                              struct perf_sample_data *data,
534                              struct pt_regs *regs)
535 {
536         int i;
537         struct thread_struct *thread = &(current->thread);
538
539         /*
540          * Store in the virtual DR6 register the fact that the breakpoint
541          * was hit so the thread's debugger will see it.
542          */
543         for (i = 0; i < HBP_NUM; i++) {
544                 if (thread->ptrace_bps[i] == bp)
545                         break;
546         }
547
548         thread->debugreg6 |= (DR_TRAP0 << i);
549 }
550
551 /*
552  * Walk through every ptrace breakpoints for this thread and
553  * build the dr7 value on top of their attributes.
554  *
555  */
556 static unsigned long ptrace_get_dr7(struct perf_event *bp[])
557 {
558         int i;
559         int dr7 = 0;
560         struct arch_hw_breakpoint *info;
561
562         for (i = 0; i < HBP_NUM; i++) {
563                 if (bp[i] && !bp[i]->attr.disabled) {
564                         info = counter_arch_bp(bp[i]);
565                         dr7 |= encode_dr7(i, info->len, info->type);
566                 }
567         }
568
569         return dr7;
570 }
571
572 static int
573 ptrace_modify_breakpoint(struct perf_event *bp, int len, int type,
574                          struct task_struct *tsk, int disabled)
575 {
576         int err;
577         int gen_len, gen_type;
578         struct perf_event_attr attr;
579
580         /*
581          * We should have at least an inactive breakpoint at this
582          * slot. It means the user is writing dr7 without having
583          * written the address register first
584          */
585         if (!bp)
586                 return -EINVAL;
587
588         err = arch_bp_generic_fields(len, type, &gen_len, &gen_type);
589         if (err)
590                 return err;
591
592         attr = bp->attr;
593         attr.bp_len = gen_len;
594         attr.bp_type = gen_type;
595         attr.disabled = disabled;
596
597         return modify_user_hw_breakpoint(bp, &attr);
598 }
599
600 /*
601  * Handle ptrace writes to debug register 7.
602  */
603 static int ptrace_write_dr7(struct task_struct *tsk, unsigned long data)
604 {
605         struct thread_struct *thread = &(tsk->thread);
606         unsigned long old_dr7;
607         int i, orig_ret = 0, rc = 0;
608         int enabled, second_pass = 0;
609         unsigned len, type;
610         struct perf_event *bp;
611
612         if (ptrace_get_breakpoints(tsk) < 0)
613                 return -ESRCH;
614
615         data &= ~DR_CONTROL_RESERVED;
616         old_dr7 = ptrace_get_dr7(thread->ptrace_bps);
617 restore:
618         /*
619          * Loop through all the hardware breakpoints, making the
620          * appropriate changes to each.
621          */
622         for (i = 0; i < HBP_NUM; i++) {
623                 enabled = decode_dr7(data, i, &len, &type);
624                 bp = thread->ptrace_bps[i];
625
626                 if (!enabled) {
627                         if (bp) {
628                                 /*
629                                  * Don't unregister the breakpoints right-away,
630                                  * unless all register_user_hw_breakpoint()
631                                  * requests have succeeded. This prevents
632                                  * any window of opportunity for debug
633                                  * register grabbing by other users.
634                                  */
635                                 if (!second_pass)
636                                         continue;
637
638                                 rc = ptrace_modify_breakpoint(bp, len, type,
639                                                               tsk, 1);
640                                 if (rc)
641                                         break;
642                         }
643                         continue;
644                 }
645
646                 rc = ptrace_modify_breakpoint(bp, len, type, tsk, 0);
647                 if (rc)
648                         break;
649         }
650         /*
651          * Make a second pass to free the remaining unused breakpoints
652          * or to restore the original breakpoints if an error occurred.
653          */
654         if (!second_pass) {
655                 second_pass = 1;
656                 if (rc < 0) {
657                         orig_ret = rc;
658                         data = old_dr7;
659                 }
660                 goto restore;
661         }
662
663         ptrace_put_breakpoints(tsk);
664
665         return ((orig_ret < 0) ? orig_ret : rc);
666 }
667
668 /*
669  * Handle PTRACE_PEEKUSR calls for the debug register area.
670  */
671 static unsigned long ptrace_get_debugreg(struct task_struct *tsk, int n)
672 {
673         struct thread_struct *thread = &(tsk->thread);
674         unsigned long val = 0;
675
676         if (n < HBP_NUM) {
677                 struct perf_event *bp;
678
679                 if (ptrace_get_breakpoints(tsk) < 0)
680                         return -ESRCH;
681
682                 bp = thread->ptrace_bps[n];
683                 if (!bp)
684                         val = 0;
685                 else
686                         val = bp->hw.info.address;
687
688                 ptrace_put_breakpoints(tsk);
689         } else if (n == 6) {
690                 val = thread->debugreg6;
691          } else if (n == 7) {
692                 val = thread->ptrace_dr7;
693         }
694         return val;
695 }
696
697 static int ptrace_set_breakpoint_addr(struct task_struct *tsk, int nr,
698                                       unsigned long addr)
699 {
700         struct perf_event *bp;
701         struct thread_struct *t = &tsk->thread;
702         struct perf_event_attr attr;
703         int err = 0;
704
705         if (ptrace_get_breakpoints(tsk) < 0)
706                 return -ESRCH;
707
708         if (!t->ptrace_bps[nr]) {
709                 ptrace_breakpoint_init(&attr);
710                 /*
711                  * Put stub len and type to register (reserve) an inactive but
712                  * correct bp
713                  */
714                 attr.bp_addr = addr;
715                 attr.bp_len = HW_BREAKPOINT_LEN_1;
716                 attr.bp_type = HW_BREAKPOINT_W;
717                 attr.disabled = 1;
718
719                 bp = register_user_hw_breakpoint(&attr, ptrace_triggered,
720                                                  NULL, tsk);
721
722                 /*
723                  * CHECKME: the previous code returned -EIO if the addr wasn't
724                  * a valid task virtual addr. The new one will return -EINVAL in
725                  *  this case.
726                  * -EINVAL may be what we want for in-kernel breakpoints users,
727                  * but -EIO looks better for ptrace, since we refuse a register
728                  * writing for the user. And anyway this is the previous
729                  * behaviour.
730                  */
731                 if (IS_ERR(bp)) {
732                         err = PTR_ERR(bp);
733                         goto put;
734                 }
735
736                 t->ptrace_bps[nr] = bp;
737         } else {
738                 bp = t->ptrace_bps[nr];
739
740                 attr = bp->attr;
741                 attr.bp_addr = addr;
742                 err = modify_user_hw_breakpoint(bp, &attr);
743         }
744
745 put:
746         ptrace_put_breakpoints(tsk);
747         return err;
748 }
749
750 /*
751  * Handle PTRACE_POKEUSR calls for the debug register area.
752  */
753 static int ptrace_set_debugreg(struct task_struct *tsk, int n,
754                                unsigned long val)
755 {
756         struct thread_struct *thread = &(tsk->thread);
757         int rc = 0;
758
759         /* There are no DR4 or DR5 registers */
760         if (n == 4 || n == 5)
761                 return -EIO;
762
763         if (n == 6) {
764                 thread->debugreg6 = val;
765                 goto ret_path;
766         }
767         if (n < HBP_NUM) {
768                 rc = ptrace_set_breakpoint_addr(tsk, n, val);
769                 if (rc)
770                         return rc;
771         }
772         /* All that's left is DR7 */
773         if (n == 7) {
774                 rc = ptrace_write_dr7(tsk, val);
775                 if (!rc)
776                         thread->ptrace_dr7 = val;
777         }
778
779 ret_path:
780         return rc;
781 }
782
783 /*
784  * These access the current or another (stopped) task's io permission
785  * bitmap for debugging or core dump.
786  */
787 static int ioperm_active(struct task_struct *target,
788                          const struct user_regset *regset)
789 {
790         return target->thread.io_bitmap_max / regset->size;
791 }
792
793 static int ioperm_get(struct task_struct *target,
794                       const struct user_regset *regset,
795                       unsigned int pos, unsigned int count,
796                       void *kbuf, void __user *ubuf)
797 {
798         if (!target->thread.io_bitmap_ptr)
799                 return -ENXIO;
800
801         return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
802                                    target->thread.io_bitmap_ptr,
803                                    0, IO_BITMAP_BYTES);
804 }
805
806 /*
807  * Called by kernel/ptrace.c when detaching..
808  *
809  * Make sure the single step bit is not set.
810  */
811 void ptrace_disable(struct task_struct *child)
812 {
813         user_disable_single_step(child);
814 #ifdef TIF_SYSCALL_EMU
815         clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
816 #endif
817 }
818
819 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
820 static const struct user_regset_view user_x86_32_view; /* Initialized below. */
821 #endif
822
823 long arch_ptrace(struct task_struct *child, long request,
824                  unsigned long addr, unsigned long data)
825 {
826         int ret;
827         unsigned long __user *datap = (unsigned long __user *)data;
828
829         switch (request) {
830         /* read the word at location addr in the USER area. */
831         case PTRACE_PEEKUSR: {
832                 unsigned long tmp;
833
834                 ret = -EIO;
835                 if ((addr & (sizeof(data) - 1)) || addr >= sizeof(struct user))
836                         break;
837
838                 tmp = 0;  /* Default return condition */
839                 if (addr < sizeof(struct user_regs_struct))
840                         tmp = getreg(child, addr);
841                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
842                          addr <= offsetof(struct user, u_debugreg[7])) {
843                         addr -= offsetof(struct user, u_debugreg[0]);
844                         tmp = ptrace_get_debugreg(child, addr / sizeof(data));
845                 }
846                 ret = put_user(tmp, datap);
847                 break;
848         }
849
850         case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
851                 ret = -EIO;
852                 if ((addr & (sizeof(data) - 1)) || addr >= sizeof(struct user))
853                         break;
854
855                 if (addr < sizeof(struct user_regs_struct))
856                         ret = putreg(child, addr, data);
857                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
858                          addr <= offsetof(struct user, u_debugreg[7])) {
859                         addr -= offsetof(struct user, u_debugreg[0]);
860                         ret = ptrace_set_debugreg(child,
861                                                   addr / sizeof(data), data);
862                 }
863                 break;
864
865         case PTRACE_GETREGS:    /* Get all gp regs from the child. */
866                 return copy_regset_to_user(child,
867                                            task_user_regset_view(current),
868                                            REGSET_GENERAL,
869                                            0, sizeof(struct user_regs_struct),
870                                            datap);
871
872         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
873                 return copy_regset_from_user(child,
874                                              task_user_regset_view(current),
875                                              REGSET_GENERAL,
876                                              0, sizeof(struct user_regs_struct),
877                                              datap);
878
879         case PTRACE_GETFPREGS:  /* Get the child FPU state. */
880                 return copy_regset_to_user(child,
881                                            task_user_regset_view(current),
882                                            REGSET_FP,
883                                            0, sizeof(struct user_i387_struct),
884                                            datap);
885
886         case PTRACE_SETFPREGS:  /* Set the child FPU state. */
887                 return copy_regset_from_user(child,
888                                              task_user_regset_view(current),
889                                              REGSET_FP,
890                                              0, sizeof(struct user_i387_struct),
891                                              datap);
892
893 #ifdef CONFIG_X86_32
894         case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
895                 return copy_regset_to_user(child, &user_x86_32_view,
896                                            REGSET_XFP,
897                                            0, sizeof(struct user_fxsr_struct),
898                                            datap) ? -EIO : 0;
899
900         case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
901                 return copy_regset_from_user(child, &user_x86_32_view,
902                                              REGSET_XFP,
903                                              0, sizeof(struct user_fxsr_struct),
904                                              datap) ? -EIO : 0;
905 #endif
906
907 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
908         case PTRACE_GET_THREAD_AREA:
909                 if ((int) addr < 0)
910                         return -EIO;
911                 ret = do_get_thread_area(child, addr,
912                                         (struct user_desc __user *)data);
913                 break;
914
915         case PTRACE_SET_THREAD_AREA:
916                 if ((int) addr < 0)
917                         return -EIO;
918                 ret = do_set_thread_area(child, addr,
919                                         (struct user_desc __user *)data, 0);
920                 break;
921 #endif
922
923 #ifdef CONFIG_X86_64
924                 /* normal 64bit interface to access TLS data.
925                    Works just like arch_prctl, except that the arguments
926                    are reversed. */
927         case PTRACE_ARCH_PRCTL:
928                 ret = do_arch_prctl(child, data, addr);
929                 break;
930 #endif
931
932         default:
933                 ret = ptrace_request(child, request, addr, data);
934                 break;
935         }
936
937         return ret;
938 }
939
940 #ifdef CONFIG_IA32_EMULATION
941
942 #include <linux/compat.h>
943 #include <linux/syscalls.h>
944 #include <asm/ia32.h>
945 #include <asm/user32.h>
946
947 #define R32(l,q)                                                        \
948         case offsetof(struct user32, regs.l):                           \
949                 regs->q = value; break
950
951 #define SEG32(rs)                                                       \
952         case offsetof(struct user32, regs.rs):                          \
953                 return set_segment_reg(child,                           \
954                                        offsetof(struct user_regs_struct, rs), \
955                                        value);                          \
956                 break
957
958 static int putreg32(struct task_struct *child, unsigned regno, u32 value)
959 {
960         struct pt_regs *regs = task_pt_regs(child);
961
962         switch (regno) {
963
964         SEG32(cs);
965         SEG32(ds);
966         SEG32(es);
967         SEG32(fs);
968         SEG32(gs);
969         SEG32(ss);
970
971         R32(ebx, bx);
972         R32(ecx, cx);
973         R32(edx, dx);
974         R32(edi, di);
975         R32(esi, si);
976         R32(ebp, bp);
977         R32(eax, ax);
978         R32(eip, ip);
979         R32(esp, sp);
980
981         case offsetof(struct user32, regs.orig_eax):
982                 /*
983                  * A 32-bit debugger setting orig_eax means to restore
984                  * the state of the task restarting a 32-bit syscall.
985                  * Make sure we interpret the -ERESTART* codes correctly
986                  * in case the task is not actually still sitting at the
987                  * exit from a 32-bit syscall with TS_COMPAT still set.
988                  */
989                 regs->orig_ax = value;
990                 if (syscall_get_nr(child, regs) >= 0)
991                         task_thread_info(child)->status |= TS_COMPAT;
992                 break;
993
994         case offsetof(struct user32, regs.eflags):
995                 return set_flags(child, value);
996
997         case offsetof(struct user32, u_debugreg[0]) ...
998                 offsetof(struct user32, u_debugreg[7]):
999                 regno -= offsetof(struct user32, u_debugreg[0]);
1000                 return ptrace_set_debugreg(child, regno / 4, value);
1001
1002         default:
1003                 if (regno > sizeof(struct user32) || (regno & 3))
1004                         return -EIO;
1005
1006                 /*
1007                  * Other dummy fields in the virtual user structure
1008                  * are ignored
1009                  */
1010                 break;
1011         }
1012         return 0;
1013 }
1014
1015 #undef R32
1016 #undef SEG32
1017
1018 #define R32(l,q)                                                        \
1019         case offsetof(struct user32, regs.l):                           \
1020                 *val = regs->q; break
1021
1022 #define SEG32(rs)                                                       \
1023         case offsetof(struct user32, regs.rs):                          \
1024                 *val = get_segment_reg(child,                           \
1025                                        offsetof(struct user_regs_struct, rs)); \
1026                 break
1027
1028 static int getreg32(struct task_struct *child, unsigned regno, u32 *val)
1029 {
1030         struct pt_regs *regs = task_pt_regs(child);
1031
1032         switch (regno) {
1033
1034         SEG32(ds);
1035         SEG32(es);
1036         SEG32(fs);
1037         SEG32(gs);
1038
1039         R32(cs, cs);
1040         R32(ss, ss);
1041         R32(ebx, bx);
1042         R32(ecx, cx);
1043         R32(edx, dx);
1044         R32(edi, di);
1045         R32(esi, si);
1046         R32(ebp, bp);
1047         R32(eax, ax);
1048         R32(orig_eax, orig_ax);
1049         R32(eip, ip);
1050         R32(esp, sp);
1051
1052         case offsetof(struct user32, regs.eflags):
1053                 *val = get_flags(child);
1054                 break;
1055
1056         case offsetof(struct user32, u_debugreg[0]) ...
1057                 offsetof(struct user32, u_debugreg[7]):
1058                 regno -= offsetof(struct user32, u_debugreg[0]);
1059                 *val = ptrace_get_debugreg(child, regno / 4);
1060                 break;
1061
1062         default:
1063                 if (regno > sizeof(struct user32) || (regno & 3))
1064                         return -EIO;
1065
1066                 /*
1067                  * Other dummy fields in the virtual user structure
1068                  * are ignored
1069                  */
1070                 *val = 0;
1071                 break;
1072         }
1073         return 0;
1074 }
1075
1076 #undef R32
1077 #undef SEG32
1078
1079 static int genregs32_get(struct task_struct *target,
1080                          const struct user_regset *regset,
1081                          unsigned int pos, unsigned int count,
1082                          void *kbuf, void __user *ubuf)
1083 {
1084         if (kbuf) {
1085                 compat_ulong_t *k = kbuf;
1086                 while (count >= sizeof(*k)) {
1087                         getreg32(target, pos, k++);
1088                         count -= sizeof(*k);
1089                         pos += sizeof(*k);
1090                 }
1091         } else {
1092                 compat_ulong_t __user *u = ubuf;
1093                 while (count >= sizeof(*u)) {
1094                         compat_ulong_t word;
1095                         getreg32(target, pos, &word);
1096                         if (__put_user(word, u++))
1097                                 return -EFAULT;
1098                         count -= sizeof(*u);
1099                         pos += sizeof(*u);
1100                 }
1101         }
1102
1103         return 0;
1104 }
1105
1106 static int genregs32_set(struct task_struct *target,
1107                          const struct user_regset *regset,
1108                          unsigned int pos, unsigned int count,
1109                          const void *kbuf, const void __user *ubuf)
1110 {
1111         int ret = 0;
1112         if (kbuf) {
1113                 const compat_ulong_t *k = kbuf;
1114                 while (count >= sizeof(*k) && !ret) {
1115                         ret = putreg32(target, pos, *k++);
1116                         count -= sizeof(*k);
1117                         pos += sizeof(*k);
1118                 }
1119         } else {
1120                 const compat_ulong_t __user *u = ubuf;
1121                 while (count >= sizeof(*u) && !ret) {
1122                         compat_ulong_t word;
1123                         ret = __get_user(word, u++);
1124                         if (ret)
1125                                 break;
1126                         ret = putreg32(target, pos, word);
1127                         count -= sizeof(*u);
1128                         pos += sizeof(*u);
1129                 }
1130         }
1131         return ret;
1132 }
1133
1134 #ifdef CONFIG_X86_X32_ABI
1135 static long x32_arch_ptrace(struct task_struct *child,
1136                             compat_long_t request, compat_ulong_t caddr,
1137                             compat_ulong_t cdata)
1138 {
1139         unsigned long addr = caddr;
1140         unsigned long data = cdata;
1141         void __user *datap = compat_ptr(data);
1142         int ret;
1143
1144         switch (request) {
1145         /* Read 32bits at location addr in the USER area.  Only allow
1146            to return the lower 32bits of segment and debug registers.  */
1147         case PTRACE_PEEKUSR: {
1148                 u32 tmp;
1149
1150                 ret = -EIO;
1151                 if ((addr & (sizeof(data) - 1)) || addr >= sizeof(struct user) ||
1152                     addr < offsetof(struct user_regs_struct, cs))
1153                         break;
1154
1155                 tmp = 0;  /* Default return condition */
1156                 if (addr < sizeof(struct user_regs_struct))
1157                         tmp = getreg(child, addr);
1158                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
1159                          addr <= offsetof(struct user, u_debugreg[7])) {
1160                         addr -= offsetof(struct user, u_debugreg[0]);
1161                         tmp = ptrace_get_debugreg(child, addr / sizeof(data));
1162                 }
1163                 ret = put_user(tmp, (__u32 __user *)datap);
1164                 break;
1165         }
1166
1167         /* Write the word at location addr in the USER area.  Only allow
1168            to update segment and debug registers with the upper 32bits
1169            zero-extended. */
1170         case PTRACE_POKEUSR:
1171                 ret = -EIO;
1172                 if ((addr & (sizeof(data) - 1)) || addr >= sizeof(struct user) ||
1173                     addr < offsetof(struct user_regs_struct, cs))
1174                         break;
1175
1176                 if (addr < sizeof(struct user_regs_struct))
1177                         ret = putreg(child, addr, data);
1178                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
1179                          addr <= offsetof(struct user, u_debugreg[7])) {
1180                         addr -= offsetof(struct user, u_debugreg[0]);
1181                         ret = ptrace_set_debugreg(child,
1182                                                   addr / sizeof(data), data);
1183                 }
1184                 break;
1185
1186         case PTRACE_GETREGS:    /* Get all gp regs from the child. */
1187                 return copy_regset_to_user(child,
1188                                            task_user_regset_view(current),
1189                                            REGSET_GENERAL,
1190                                            0, sizeof(struct user_regs_struct),
1191                                            datap);
1192
1193         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
1194                 return copy_regset_from_user(child,
1195                                              task_user_regset_view(current),
1196                                              REGSET_GENERAL,
1197                                              0, sizeof(struct user_regs_struct),
1198                                              datap);
1199
1200         case PTRACE_GETFPREGS:  /* Get the child FPU state. */
1201                 return copy_regset_to_user(child,
1202                                            task_user_regset_view(current),
1203                                            REGSET_FP,
1204                                            0, sizeof(struct user_i387_struct),
1205                                            datap);
1206
1207         case PTRACE_SETFPREGS:  /* Set the child FPU state. */
1208                 return copy_regset_from_user(child,
1209                                              task_user_regset_view(current),
1210                                              REGSET_FP,
1211                                              0, sizeof(struct user_i387_struct),
1212                                              datap);
1213
1214         default:
1215                 return compat_ptrace_request(child, request, addr, data);
1216         }
1217
1218         return ret;
1219 }
1220 #endif
1221
1222 long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
1223                         compat_ulong_t caddr, compat_ulong_t cdata)
1224 {
1225         unsigned long addr = caddr;
1226         unsigned long data = cdata;
1227         void __user *datap = compat_ptr(data);
1228         int ret;
1229         __u32 val;
1230
1231 #ifdef CONFIG_X86_X32_ABI
1232         if (!is_ia32_task())
1233                 return x32_arch_ptrace(child, request, caddr, cdata);
1234 #endif
1235
1236         switch (request) {
1237         case PTRACE_PEEKUSR:
1238                 ret = getreg32(child, addr, &val);
1239                 if (ret == 0)
1240                         ret = put_user(val, (__u32 __user *)datap);
1241                 break;
1242
1243         case PTRACE_POKEUSR:
1244                 ret = putreg32(child, addr, data);
1245                 break;
1246
1247         case PTRACE_GETREGS:    /* Get all gp regs from the child. */
1248                 return copy_regset_to_user(child, &user_x86_32_view,
1249                                            REGSET_GENERAL,
1250                                            0, sizeof(struct user_regs_struct32),
1251                                            datap);
1252
1253         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
1254                 return copy_regset_from_user(child, &user_x86_32_view,
1255                                              REGSET_GENERAL, 0,
1256                                              sizeof(struct user_regs_struct32),
1257                                              datap);
1258
1259         case PTRACE_GETFPREGS:  /* Get the child FPU state. */
1260                 return copy_regset_to_user(child, &user_x86_32_view,
1261                                            REGSET_FP, 0,
1262                                            sizeof(struct user_i387_ia32_struct),
1263                                            datap);
1264
1265         case PTRACE_SETFPREGS:  /* Set the child FPU state. */
1266                 return copy_regset_from_user(
1267                         child, &user_x86_32_view, REGSET_FP,
1268                         0, sizeof(struct user_i387_ia32_struct), datap);
1269
1270         case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
1271                 return copy_regset_to_user(child, &user_x86_32_view,
1272                                            REGSET_XFP, 0,
1273                                            sizeof(struct user32_fxsr_struct),
1274                                            datap);
1275
1276         case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
1277                 return copy_regset_from_user(child, &user_x86_32_view,
1278                                              REGSET_XFP, 0,
1279                                              sizeof(struct user32_fxsr_struct),
1280                                              datap);
1281
1282         case PTRACE_GET_THREAD_AREA:
1283         case PTRACE_SET_THREAD_AREA:
1284                 return arch_ptrace(child, request, addr, data);
1285
1286         default:
1287                 return compat_ptrace_request(child, request, addr, data);
1288         }
1289
1290         return ret;
1291 }
1292
1293 #endif  /* CONFIG_IA32_EMULATION */
1294
1295 #ifdef CONFIG_X86_64
1296
1297 static struct user_regset x86_64_regsets[] __read_mostly = {
1298         [REGSET_GENERAL] = {
1299                 .core_note_type = NT_PRSTATUS,
1300                 .n = sizeof(struct user_regs_struct) / sizeof(long),
1301                 .size = sizeof(long), .align = sizeof(long),
1302                 .get = genregs_get, .set = genregs_set
1303         },
1304         [REGSET_FP] = {
1305                 .core_note_type = NT_PRFPREG,
1306                 .n = sizeof(struct user_i387_struct) / sizeof(long),
1307                 .size = sizeof(long), .align = sizeof(long),
1308                 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set
1309         },
1310         [REGSET_XSTATE] = {
1311                 .core_note_type = NT_X86_XSTATE,
1312                 .size = sizeof(u64), .align = sizeof(u64),
1313                 .active = xstateregs_active, .get = xstateregs_get,
1314                 .set = xstateregs_set
1315         },
1316         [REGSET_IOPERM64] = {
1317                 .core_note_type = NT_386_IOPERM,
1318                 .n = IO_BITMAP_LONGS,
1319                 .size = sizeof(long), .align = sizeof(long),
1320                 .active = ioperm_active, .get = ioperm_get
1321         },
1322 };
1323
1324 static const struct user_regset_view user_x86_64_view = {
1325         .name = "x86_64", .e_machine = EM_X86_64,
1326         .regsets = x86_64_regsets, .n = ARRAY_SIZE(x86_64_regsets)
1327 };
1328
1329 #else  /* CONFIG_X86_32 */
1330
1331 #define user_regs_struct32      user_regs_struct
1332 #define genregs32_get           genregs_get
1333 #define genregs32_set           genregs_set
1334
1335 #define user_i387_ia32_struct   user_i387_struct
1336 #define user32_fxsr_struct      user_fxsr_struct
1337
1338 #endif  /* CONFIG_X86_64 */
1339
1340 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1341 static struct user_regset x86_32_regsets[] __read_mostly = {
1342         [REGSET_GENERAL] = {
1343                 .core_note_type = NT_PRSTATUS,
1344                 .n = sizeof(struct user_regs_struct32) / sizeof(u32),
1345                 .size = sizeof(u32), .align = sizeof(u32),
1346                 .get = genregs32_get, .set = genregs32_set
1347         },
1348         [REGSET_FP] = {
1349                 .core_note_type = NT_PRFPREG,
1350                 .n = sizeof(struct user_i387_ia32_struct) / sizeof(u32),
1351                 .size = sizeof(u32), .align = sizeof(u32),
1352                 .active = fpregs_active, .get = fpregs_get, .set = fpregs_set
1353         },
1354         [REGSET_XFP] = {
1355                 .core_note_type = NT_PRXFPREG,
1356                 .n = sizeof(struct user32_fxsr_struct) / sizeof(u32),
1357                 .size = sizeof(u32), .align = sizeof(u32),
1358                 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set
1359         },
1360         [REGSET_XSTATE] = {
1361                 .core_note_type = NT_X86_XSTATE,
1362                 .size = sizeof(u64), .align = sizeof(u64),
1363                 .active = xstateregs_active, .get = xstateregs_get,
1364                 .set = xstateregs_set
1365         },
1366         [REGSET_TLS] = {
1367                 .core_note_type = NT_386_TLS,
1368                 .n = GDT_ENTRY_TLS_ENTRIES, .bias = GDT_ENTRY_TLS_MIN,
1369                 .size = sizeof(struct user_desc),
1370                 .align = sizeof(struct user_desc),
1371                 .active = regset_tls_active,
1372                 .get = regset_tls_get, .set = regset_tls_set
1373         },
1374         [REGSET_IOPERM32] = {
1375                 .core_note_type = NT_386_IOPERM,
1376                 .n = IO_BITMAP_BYTES / sizeof(u32),
1377                 .size = sizeof(u32), .align = sizeof(u32),
1378                 .active = ioperm_active, .get = ioperm_get
1379         },
1380 };
1381
1382 static const struct user_regset_view user_x86_32_view = {
1383         .name = "i386", .e_machine = EM_386,
1384         .regsets = x86_32_regsets, .n = ARRAY_SIZE(x86_32_regsets)
1385 };
1386 #endif
1387
1388 /*
1389  * This represents bytes 464..511 in the memory layout exported through
1390  * the REGSET_XSTATE interface.
1391  */
1392 u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
1393
1394 void update_regset_xstate_info(unsigned int size, u64 xstate_mask)
1395 {
1396 #ifdef CONFIG_X86_64
1397         x86_64_regsets[REGSET_XSTATE].n = size / sizeof(u64);
1398 #endif
1399 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1400         x86_32_regsets[REGSET_XSTATE].n = size / sizeof(u64);
1401 #endif
1402         xstate_fx_sw_bytes[USER_XSTATE_XCR0_WORD] = xstate_mask;
1403 }
1404
1405 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
1406 {
1407 #ifdef CONFIG_IA32_EMULATION
1408         if (test_tsk_thread_flag(task, TIF_IA32))
1409 #endif
1410 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1411                 return &user_x86_32_view;
1412 #endif
1413 #ifdef CONFIG_X86_64
1414         return &user_x86_64_view;
1415 #endif
1416 }
1417
1418 static void fill_sigtrap_info(struct task_struct *tsk,
1419                                 struct pt_regs *regs,
1420                                 int error_code, int si_code,
1421                                 struct siginfo *info)
1422 {
1423         tsk->thread.trap_nr = X86_TRAP_DB;
1424         tsk->thread.error_code = error_code;
1425
1426         memset(info, 0, sizeof(*info));
1427         info->si_signo = SIGTRAP;
1428         info->si_code = si_code;
1429         info->si_addr = user_mode_vm(regs) ? (void __user *)regs->ip : NULL;
1430 }
1431
1432 void user_single_step_siginfo(struct task_struct *tsk,
1433                                 struct pt_regs *regs,
1434                                 struct siginfo *info)
1435 {
1436         fill_sigtrap_info(tsk, regs, 0, TRAP_BRKPT, info);
1437 }
1438
1439 void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
1440                                          int error_code, int si_code)
1441 {
1442         struct siginfo info;
1443
1444         fill_sigtrap_info(tsk, regs, error_code, si_code, &info);
1445         /* Send us the fake SIGTRAP */
1446         force_sig_info(SIGTRAP, &info, tsk);
1447 }
1448
1449
1450 #ifdef CONFIG_X86_32
1451 # define IS_IA32        1
1452 #elif defined CONFIG_IA32_EMULATION
1453 # define IS_IA32        is_compat_task()
1454 #else
1455 # define IS_IA32        0
1456 #endif
1457
1458 /*
1459  * We must return the syscall number to actually look up in the table.
1460  * This can be -1L to skip running any syscall at all.
1461  */
1462 long syscall_trace_enter(struct pt_regs *regs)
1463 {
1464         long ret = 0;
1465
1466         /*
1467          * If we stepped into a sysenter/syscall insn, it trapped in
1468          * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
1469          * If user-mode had set TF itself, then it's still clear from
1470          * do_debug() and we need to set it again to restore the user
1471          * state.  If we entered on the slow path, TF was already set.
1472          */
1473         if (test_thread_flag(TIF_SINGLESTEP))
1474                 regs->flags |= X86_EFLAGS_TF;
1475
1476         /* do the secure computing check first */
1477         if (secure_computing(regs->orig_ax)) {
1478                 /* seccomp failures shouldn't expose any additional code. */
1479                 ret = -1L;
1480                 goto out;
1481         }
1482
1483         if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
1484                 ret = -1L;
1485
1486         if ((ret || test_thread_flag(TIF_SYSCALL_TRACE)) &&
1487             tracehook_report_syscall_entry(regs))
1488                 ret = -1L;
1489
1490         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
1491                 trace_sys_enter(regs, regs->orig_ax);
1492
1493         if (IS_IA32)
1494                 audit_syscall_entry(AUDIT_ARCH_I386,
1495                                     regs->orig_ax,
1496                                     regs->bx, regs->cx,
1497                                     regs->dx, regs->si);
1498 #ifdef CONFIG_X86_64
1499         else
1500                 audit_syscall_entry(AUDIT_ARCH_X86_64,
1501                                     regs->orig_ax,
1502                                     regs->di, regs->si,
1503                                     regs->dx, regs->r10);
1504 #endif
1505
1506 out:
1507         return ret ?: regs->orig_ax;
1508 }
1509
1510 void syscall_trace_leave(struct pt_regs *regs)
1511 {
1512         bool step;
1513
1514         audit_syscall_exit(regs);
1515
1516         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
1517                 trace_sys_exit(regs, regs->ax);
1518
1519         /*
1520          * If TIF_SYSCALL_EMU is set, we only get here because of
1521          * TIF_SINGLESTEP (i.e. this is PTRACE_SYSEMU_SINGLESTEP).
1522          * We already reported this syscall instruction in
1523          * syscall_trace_enter().
1524          */
1525         step = unlikely(test_thread_flag(TIF_SINGLESTEP)) &&
1526                         !test_thread_flag(TIF_SYSCALL_EMU);
1527         if (step || test_thread_flag(TIF_SYSCALL_TRACE))
1528                 tracehook_report_syscall_exit(regs, step);
1529 }