Deleted Added
full compact
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 ---