summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorScott Soule Cheloha <cheloha@cvs.openbsd.org>2022-07-23 22:11:00 +0000
committerScott Soule Cheloha <cheloha@cvs.openbsd.org>2022-07-23 22:11:00 +0000
commitd969f3953b6cbc3c85b4d2951270b787eae189c0 (patch)
tree9cb810a4f1fb3d17e7671c2287e7a243d21d0d32 /sys
parent4de668d109828bf729e3ac9c6be06e536ecbd403 (diff)
kernel: remove global "randompid" toggle
Apparently, we used to created several kthreads before the kernel random number generator was up and running. A toggle, "randompid", was needed to tell allocpid() whether it made sense to attempt to allocate random PIDs. However, these days we get e.g. arc4random(9) into a working state before any kthreads are spawned, so the toggle is no longer needed. Thread: https://marc.info/?l=openbsd-tech&m=165541052614453&w=2 Very nice historical context provided by miod@. probably ok miod@ deraadt@
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/init_main.c4
-rw-r--r--sys/kern/kern_fork.c25
-rw-r--r--sys/sys/proc.h3
3 files changed, 15 insertions, 17 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index bfc324c3ae5..a7413dc59ab 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: init_main.c,v 1.315 2022/02/22 01:15:01 guenther Exp $ */
+/* $OpenBSD: init_main.c,v 1.316 2022/07/23 22:10:58 cheloha Exp $ */
/* $NetBSD: init_main.c,v 1.84.4.1 1996/06/02 09:08:06 mrg Exp $ */
/*
@@ -431,8 +431,6 @@ main(void *framep)
initprocess = initproc->p_p;
}
- randompid = 1;
-
/*
* Create any kernel threads whose creation was deferred because
* initprocess had not yet been created.
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 8b4b4206058..e5bdcc7e9bc 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_fork.c,v 1.240 2022/05/13 15:32:00 claudio Exp $ */
+/* $OpenBSD: kern_fork.c,v 1.241 2022/07/23 22:10:58 cheloha Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@@ -67,7 +67,6 @@
int nprocesses = 1; /* process 0 */
int nthreads = 1; /* proc 0 */
-int randompid; /* when set to 1, pid's go random */
struct forkstat forkstat;
void fork_return(void *);
@@ -638,20 +637,22 @@ ispidtaken(pid_t pid)
pid_t
allocpid(void)
{
- static pid_t lastpid;
+ static int first = 1;
pid_t pid;
- if (!randompid) {
- /* only used early on for system processes */
- pid = ++lastpid;
- } else {
- /* Find an unused pid satisfying lastpid < pid <= PID_MAX */
- do {
- pid = arc4random_uniform(PID_MAX - lastpid) + 1 +
- lastpid;
- } while (ispidtaken(pid));
+ /* The first PID allocated is always 1. */
+ if (first) {
+ first = 0;
+ return 1;
}
+ /*
+ * All subsequent PIDs are chosen randomly. We need to
+ * find an unused PID in the range [2, PID_MAX].
+ */
+ do {
+ pid = 2 + arc4random_uniform(PID_MAX - 1);
+ } while (ispidtaken(pid));
return pid;
}
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index ec2fd803476..01fa10baf70 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: proc.h,v 1.333 2022/07/05 15:06:16 visa Exp $ */
+/* $OpenBSD: proc.h,v 1.334 2022/07/23 22:10:59 cheloha Exp $ */
/* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */
/*-
@@ -498,7 +498,6 @@ extern struct proc proc0; /* Process slot for swapper. */
extern struct process process0; /* Process slot for kernel threads. */
extern int nprocesses, maxprocess; /* Cur and max number of processes. */
extern int nthreads, maxthread; /* Cur and max number of threads. */
-extern int randompid; /* fork() should create random pid's */
LIST_HEAD(proclist, proc);
LIST_HEAD(processlist, process);