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