X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/fdb8e4aac282b72d4670aa3a26d9bba07afc7e6f..1c15e88899094343f75aeba04122cd96a96b428e:/usr/src/sys/kern/kern_sig.c diff --git a/usr/src/sys/kern/kern_sig.c b/usr/src/sys/kern/kern_sig.c index 8e517e9df3..a271cdc2c9 100644 --- a/usr/src/sys/kern/kern_sig.c +++ b/usr/src/sys/kern/kern_sig.c @@ -2,9 +2,22 @@ * Copyright (c) 1982, 1986, 1989 Regents of the University of California. * All rights reserved. * - * %sccs.include.redist.c% + * Redistribution is only permitted until one year after the first shipment + * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and + * binary forms are permitted provided that: (1) source distributions retain + * this entire copyright notice and comment, and (2) distributions including + * binaries display the following acknowledgement: This product includes + * software developed by the University of California, Berkeley and its + * contributors'' in the documentation or other materials provided with the + * distribution and in all advertising materials mentioning features or use + * of this software. Neither the name of the University nor the names of + * its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)kern_sig.c 7.25 (Berkeley) %G% + * @(#)kern_sig.c 7.23 (Berkeley) 6/28/90 */ #include "param.h" @@ -15,7 +28,9 @@ #include "timeb.h" #include "times.h" #include "buf.h" +#include "text.h" #include "seg.h" +#include "vm.h" #include "acct.h" #include "uio.h" #include "file.h" @@ -24,9 +39,9 @@ #include "ktrace.h" #include "machine/reg.h" +#include "machine/pte.h" #include "machine/psl.h" #include "machine/mtpr.h" -#include "../vm/vm_param.h" #define ttystopsigmask (sigmask(SIGTSTP)|sigmask(SIGTTIN)|sigmask(SIGTTOU)) #define stopsigmask (sigmask(SIGSTOP)|ttystopsigmask) @@ -580,16 +595,6 @@ psignal(p, sig) case SIGTSTP: case SIGTTIN: case SIGTTOU: - /* - * If sending a tty stop signal to a member of an orphaned - * process group, discard the signal here if the action - * is default; don't stop the process below if sleeping, - * and don't clear any pending SIGCONT. - */ - if (p->p_pgrp->pg_jobc == 0 && action == SIG_DFL) - return; - /* FALLTHROUGH */ - case SIGSTOP: p->p_sig &= ~sigmask(SIGCONT); break; @@ -970,6 +975,13 @@ core() if (ctob(UPAGES + u.u_dsize + u.u_ssize) >= u.u_rlimit[RLIMIT_CORE].rlim_cur) return (EFAULT); + if (p->p_textp) { + VOP_LOCK(p->p_textp->x_vptr); + error = VOP_ACCESS(p->p_textp->x_vptr, VREAD, u.u_cred); + VOP_UNLOCK(p->p_textp->x_vptr); + if (error) + return (EFAULT); + } ndp->ni_segflg = UIO_SYSSPACE; ndp->ni_dirp = "core"; if (error = vn_open(ndp, FCREAT|FWRITE, 0644)) @@ -982,6 +994,12 @@ core() vput(vp); return (EFAULT); } +#ifdef MAPMEM + if (error = mmcore(p)) { + vput(vp); + return (error); + } +#endif VATTR_NULL(&vattr); vattr.va_size = 0; VOP_SETATTR(vp, &vattr, u.u_cred); @@ -999,13 +1017,14 @@ core() error = vn_rdwr(UIO_WRITE, vp, (caddr_t)&u, ctob(UPAGES), (off_t)0, UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0); if (error == 0) - error = vn_rdwr(UIO_WRITE, vp, u.u_daddr, + error = vn_rdwr(UIO_WRITE, vp, + (caddr_t)ctob(dptov(p, 0)), (int)ctob(u.u_dsize), (off_t)ctob(UPAGES), UIO_USERSPACE, IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0); if (error == 0) error = vn_rdwr(UIO_WRITE, vp, - trunc_page(USRSTACK - ctob(u.u_ssize)), - round_page(ctob(u.u_ssize)), + (caddr_t)ctob(sptov(p, u.u_ssize - 1)), + (int)ctob(u.u_ssize), (off_t)ctob(UPAGES) + ctob(u.u_dsize), UIO_USERSPACE, IO_NODELOCKED|IO_UNIT, ndp->ni_cred, (int *)0); vput(vp);