diff options
author | Patrick Mooney <pmooney@pfmooney.com> | 2016-12-05 23:14:19 +0000 |
---|---|---|
committer | Jason King <jason.king@joyent.com> | 2020-04-08 19:41:51 -0500 |
commit | 72a6dc127431d372b6b6136087c736300544f8b7 (patch) | |
tree | de4356a799418ec5bcae77b1f7c11971e4f367ac /usr/src/uts/common/fs/proc/prioctl.c | |
parent | a47ab03e261661b7326ab0b642649034886be632 (diff) | |
download | illumos-gate-72a6dc127431d372b6b6136087c736300544f8b7.tar.gz |
7637 restorecontext(ucontext_t *ucp) leaves all maskable signals blocked in curthread->t_hold
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/uts/common/fs/proc/prioctl.c')
-rw-r--r-- | usr/src/uts/common/fs/proc/prioctl.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/usr/src/uts/common/fs/proc/prioctl.c b/usr/src/uts/common/fs/proc/prioctl.c index 8202e49df0..630ab0b2e3 100644 --- a/usr/src/uts/common/fs/proc/prioctl.c +++ b/usr/src/uts/common/fs/proc/prioctl.c @@ -930,8 +930,7 @@ startover: } case PIOCGHOLD: /* get signal-hold mask */ - schedctl_finish_sigblock(t); - sigktou(&t->t_hold, &un.holdmask); + prgethold(t, &un.holdmask); prunlock(pnp); if (copyout(&un.holdmask, cmaddr, sizeof (un.holdmask))) error = EFAULT; @@ -1395,8 +1394,7 @@ oprgetstatus32(kthread_t *t, prstatus32_t *sp, zone_t *zp) sp->pr_cursig = lwp->lwp_cursig; prassignset(&sp->pr_sigpend, &p->p_sig); prassignset(&sp->pr_lwppend, &t->t_sig); - schedctl_finish_sigblock(t); - prassignset(&sp->pr_sighold, &t->t_hold); + prgethold(t, &sp->pr_sighold); sp->pr_altstack.ss_sp = (caddr32_t)(uintptr_t)lwp->lwp_sigaltstack.ss_sp; sp->pr_altstack.ss_size = (size32_t)lwp->lwp_sigaltstack.ss_size; @@ -1673,14 +1671,8 @@ oprgetpsinfo32(proc_t *p, prpsinfo32_t *psp, kthread_t *tp) /*ARGSUSED*/ static int -prioctl32( - struct vnode *vp, - int cmd, - intptr_t arg, - int flag, - cred_t *cr, - int *rvalp, - caller_context_t *ct) +prioctl32(struct vnode *vp, int cmd, intptr_t arg, int flag, cred_t *cr, + int *rvalp, caller_context_t *ct) { int nsig = PROC_IS_BRANDED(curproc)? BROP(curproc)->b_nsig : NSIG; caddr_t cmaddr = (caddr_t)arg; @@ -2557,8 +2549,7 @@ startover: } case PIOCGHOLD: /* get signal-hold mask */ - schedctl_finish_sigblock(t); - sigktou(&t->t_hold, &un32.holdmask); + prgethold(t, &un32.holdmask); prunlock(pnp); if (copyout(&un32.holdmask, cmaddr, sizeof (un32.holdmask))) error = EFAULT; @@ -3235,8 +3226,7 @@ oprgetstatus(kthread_t *t, prstatus_t *sp, zone_t *zp) sp->pr_cursig = lwp->lwp_cursig; prassignset(&sp->pr_sigpend, &p->p_sig); prassignset(&sp->pr_lwppend, &t->t_sig); - schedctl_finish_sigblock(t); - prassignset(&sp->pr_sighold, &t->t_hold); + prgethold(t, &sp->pr_sighold); sp->pr_altstack = lwp->lwp_sigaltstack; prgetaction(p, up, lwp->lwp_cursig, &sp->pr_action); sp->pr_pid = p->p_pid; |