summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorcheloha <cheloha@openbsd.org>2020-10-15 16:31:11 +0000
committercheloha <cheloha@openbsd.org>2020-10-15 16:31:11 +0000
commitae96cbdae6b3f25d72848f6030675f29bcf36da2 (patch)
tree170f988b139a56b3bb5c1cb8d41a84a9bac96822 /sys/kern
parentcrt0 MD _dl_exit() performs syscall to SYS_exit directly, but then (diff)
downloadwireguard-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.c6
-rw-r--r--sys/kern/kern_exit.c7
-rw-r--r--sys/kern/kern_time.c9
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