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