diff options
author | 2020-10-15 16:31:11 +0000 | |
---|---|---|
committer | 2020-10-15 16:31:11 +0000 | |
commit | ae96cbdae6b3f25d72848f6030675f29bcf36da2 (patch) | |
tree | 170f988b139a56b3bb5c1cb8d41a84a9bac96822 /sys/kern | |
parent | crt0 MD _dl_exit() performs syscall to SYS_exit directly, but then (diff) | |
download | wireguard-openbsd-ae96cbdae6b3f25d72848f6030675f29bcf36da2.tar.xz wireguard-openbsd-ae96cbdae6b3f25d72848f6030675f29bcf36da2.zip |
_exit(2), execve(2): tweak per-process interval timer cancellation
If we fold the for-loop iterating over each interval timer into the
helper function the result is slightly tidier than what we have now.
Rename the helper function "cancel_all_itimers".
Based on input from millert@ and kettenis@.
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_exec.c | 6 | ||||
-rw-r--r-- | sys/kern/kern_exit.c | 7 | ||||
-rw-r--r-- | sys/kern/kern_time.c | 9 |
3 files changed, 10 insertions, 12 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 49e332e8b56..8f5e05aac67 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_exec.c,v 1.218 2020/10/15 04:28:42 cheloha Exp $ */ +/* $OpenBSD: kern_exec.c,v 1.219 2020/10/15 16:31:11 cheloha Exp $ */ /* $NetBSD: kern_exec.c,v 1.75 1996/02/09 18:59:28 christos Exp $ */ /*- @@ -656,9 +656,7 @@ sys_execve(struct proc *p, void *v, register_t *retval) } if (pr->ps_flags & PS_SUGIDEXEC) { - int i; - for (i = 0; i < nitems(pr->ps_timer); i++) - cancelitimer(i); + cancel_all_itimers(); } /* reset CPU time usage for the thread, but not the process */ diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index b2fb715f158..52effcca3e2 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_exit.c,v 1.189 2020/10/15 04:28:42 cheloha Exp $ */ +/* $OpenBSD: kern_exit.c,v 1.190 2020/10/15 16:31:11 cheloha Exp $ */ /* $NetBSD: kern_exit.c,v 1.39 1996/04/22 01:38:25 christos Exp $ */ /* @@ -194,10 +194,7 @@ exit1(struct proc *p, int xexit, int xsig, int flags) /* close open files and release open-file table */ fdfree(p); - /* cancel all interval timers */ - int i; - for (i = 0; i < nitems(pr->ps_timer); i++) - cancelitimer(i); + cancel_all_itimers(); timeout_del(&pr->ps_rucheck_to); #ifdef SYSVSEM diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index 48cc9a251af..78df8830572 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_time.c,v 1.147 2020/10/15 04:28:43 cheloha Exp $ */ +/* $OpenBSD: kern_time.c,v 1.148 2020/10/15 16:31:11 cheloha Exp $ */ /* $NetBSD: kern_time.c,v 1.20 1996/02/18 11:57:06 fvdl Exp $ */ /* @@ -573,13 +573,16 @@ setitimer(int which, const struct itimerval *itv, struct itimerval *olditv) } void -cancelitimer(int which) +cancel_all_itimers(void) { struct itimerval itv; + int i; timerclear(&itv.it_value); timerclear(&itv.it_interval); - setitimer(which, &itv, NULL); + + for (i = 0; i < nitems(curproc->p_p->ps_timer); i++) + setitimer(i, &itv, NULL); } int |