sys_process.c (340290) | sys_process.c (341491) |
---|---|
1/*- 2 * Copyright (c) 1994, Sean Eric Fagan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 16 unchanged lines hidden (view full) --- 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1994, Sean Eric Fagan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 16 unchanged lines hidden (view full) --- 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32#include <sys/cdefs.h> |
33__FBSDID("$FreeBSD: stable/11/sys/kern/sys_process.c 340290 2018-11-09 17:43:23Z kib $"); | 33__FBSDID("$FreeBSD: stable/11/sys/kern/sys_process.c 341491 2018-12-04 19:07:10Z markj $"); |
34 35#include "opt_compat.h" 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/lock.h> 40#include <sys/mutex.h> 41#include <sys/syscallsubr.h> --- 494 unchanged lines hidden (view full) --- 536 * the body of the code. 537 * COPYIN(uap->addr, &r.reg, sizeof r.reg); 538 * becomes either: 539 * copyin(uap->addr, &r.reg, sizeof r.reg); 540 * or 541 * copyin(uap->addr, &r.reg32, sizeof r.reg32); 542 * .. except this is done at runtime. 543 */ | 34 35#include "opt_compat.h" 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/lock.h> 40#include <sys/mutex.h> 41#include <sys/syscallsubr.h> --- 494 unchanged lines hidden (view full) --- 536 * the body of the code. 537 * COPYIN(uap->addr, &r.reg, sizeof r.reg); 538 * becomes either: 539 * copyin(uap->addr, &r.reg, sizeof r.reg); 540 * or 541 * copyin(uap->addr, &r.reg32, sizeof r.reg32); 542 * .. except this is done at runtime. 543 */ |
544#define BZERO(a, s) wrap32 ? \ 545 bzero(a ## 32, s ## 32) : \ 546 bzero(a, s) |
|
544#define COPYIN(u, k, s) wrap32 ? \ 545 copyin(u, k ## 32, s ## 32) : \ 546 copyin(u, k, s) 547#define COPYOUT(k, u, s) wrap32 ? \ 548 copyout(k ## 32, u, s ## 32) : \ 549 copyout(k, u, s) 550#else | 547#define COPYIN(u, k, s) wrap32 ? \ 548 copyin(u, k ## 32, s ## 32) : \ 549 copyin(u, k, s) 550#define COPYOUT(k, u, s) wrap32 ? \ 551 copyout(k ## 32, u, s ## 32) : \ 552 copyout(k, u, s) 553#else |
554#define BZERO(a, s) bzero(a, s) |
|
551#define COPYIN(u, k, s) copyin(u, k, s) 552#define COPYOUT(k, u, s) copyout(k, u, s) 553#endif 554int 555sys_ptrace(struct thread *td, struct ptrace_args *uap) 556{ 557 /* 558 * XXX this obfuscation is to reduce stack usage, but the register --- 9 unchanged lines hidden (view full) --- 568#ifdef COMPAT_FREEBSD32 569 struct dbreg32 dbreg32; 570 struct fpreg32 fpreg32; 571 struct reg32 reg32; 572 struct ptrace_io_desc32 piod32; 573 struct ptrace_lwpinfo32 pl32; 574 struct ptrace_vm_entry32 pve32; 575#endif | 555#define COPYIN(u, k, s) copyin(u, k, s) 556#define COPYOUT(k, u, s) copyout(k, u, s) 557#endif 558int 559sys_ptrace(struct thread *td, struct ptrace_args *uap) 560{ 561 /* 562 * XXX this obfuscation is to reduce stack usage, but the register --- 9 unchanged lines hidden (view full) --- 572#ifdef COMPAT_FREEBSD32 573 struct dbreg32 dbreg32; 574 struct fpreg32 fpreg32; 575 struct reg32 reg32; 576 struct ptrace_io_desc32 piod32; 577 struct ptrace_lwpinfo32 pl32; 578 struct ptrace_vm_entry32 pve32; 579#endif |
576 char args[nitems(td->td_sa.args) * sizeof(register_t)]; | 580 char args[sizeof(td->td_sa.args)]; |
577 int ptevents; 578 } r; 579 void *addr; 580 int error = 0; 581#ifdef COMPAT_FREEBSD32 582 int wrap32 = 0; 583 584 if (SV_CURPROC_FLAG(SV_ILP32)) 585 wrap32 = 1; 586#endif 587 AUDIT_ARG_PID(uap->pid); 588 AUDIT_ARG_CMD(uap->req); 589 AUDIT_ARG_VALUE(uap->data); 590 addr = &r; 591 switch (uap->req) { 592 case PT_GET_EVENT_MASK: | 581 int ptevents; 582 } r; 583 void *addr; 584 int error = 0; 585#ifdef COMPAT_FREEBSD32 586 int wrap32 = 0; 587 588 if (SV_CURPROC_FLAG(SV_ILP32)) 589 wrap32 = 1; 590#endif 591 AUDIT_ARG_PID(uap->pid); 592 AUDIT_ARG_CMD(uap->req); 593 AUDIT_ARG_VALUE(uap->data); 594 addr = &r; 595 switch (uap->req) { 596 case PT_GET_EVENT_MASK: |
597 case PT_LWPINFO: 598 case PT_GET_SC_ARGS: 599 break; |
|
593 case PT_GETREGS: | 600 case PT_GETREGS: |
601 BZERO(&r.reg, sizeof r.reg); 602 break; |
|
594 case PT_GETFPREGS: | 603 case PT_GETFPREGS: |
604 BZERO(&r.fpreg, sizeof r.fpreg); 605 break; |
|
595 case PT_GETDBREGS: | 606 case PT_GETDBREGS: |
596 case PT_LWPINFO: 597 case PT_GET_SC_ARGS: | 607 BZERO(&r.dbreg, sizeof r.dbreg); |
598 break; 599 case PT_SETREGS: 600 error = COPYIN(uap->addr, &r.reg, sizeof r.reg); 601 break; 602 case PT_SETFPREGS: 603 error = COPYIN(uap->addr, &r.fpreg, sizeof r.fpreg); 604 break; 605 case PT_SETDBREGS: --- 51 unchanged lines hidden (view full) --- 657 sizeof(r.args))); 658 break; 659 } 660 661 return (error); 662} 663#undef COPYIN 664#undef COPYOUT | 608 break; 609 case PT_SETREGS: 610 error = COPYIN(uap->addr, &r.reg, sizeof r.reg); 611 break; 612 case PT_SETFPREGS: 613 error = COPYIN(uap->addr, &r.fpreg, sizeof r.fpreg); 614 break; 615 case PT_SETDBREGS: --- 51 unchanged lines hidden (view full) --- 667 sizeof(r.args))); 668 break; 669 } 670 671 return (error); 672} 673#undef COPYIN 674#undef COPYOUT |
675#undef BZERO |
|
665 666#ifdef COMPAT_FREEBSD32 667/* 668 * PROC_READ(regs, td2, addr); 669 * becomes either: 670 * proc_read_regs(td2, addr); 671 * or 672 * proc_read_regs32(td2, addr); --- 815 unchanged lines hidden --- | 676 677#ifdef COMPAT_FREEBSD32 678/* 679 * PROC_READ(regs, td2, addr); 680 * becomes either: 681 * proc_read_regs(td2, addr); 682 * or 683 * proc_read_regs32(td2, addr); --- 815 unchanged lines hidden --- |