Date: Sun, 28 Nov 1999 13:04:32 -0500 From: Dan Moschuk <dan@freebsd.org> To: Kris Kennaway <kris@hub.freebsd.org> Cc: freebsd-audit@freebsd.org Subject: Re: Last random PID patch before commit Message-ID: <19991128130432.C33028@november.jaded.net> In-Reply-To: <Pine.BSF.4.21.9911280042420.89688-100000@hub.freebsd.org>; from Kris Kennaway on Sun, Nov 28, 1999 at 01:15:08AM -0800 References: <19991128012420.A48334@spirit.jaded.net> <Pine.BSF.4.21.9911280042420.89688-100000@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
| You seed random() using the current time. This is practically a
| known quantity, since the system boot time is public
| information (you just have to guess the delta until the RNG was
| initialised). Using /dev/random seems much better, as you at least have
| some entropy (to be certain, you could measure how much is in the pool at
| the time the RNG is seeded). I'm not sure why you didn't just use the
| existing arc4random.c implementation, which a) seeds both using the time,
| and whatever is already in the entropy pool at that point, and b) reseeds
| periodically.
Correct. That's probably not the best way of doing it, however, I'm not
convinced that /dev/random is the best way either. My other idea was to
leave key[256] uninitialized and just use whatever happens to be there.
| > static int nextpid = 0;
| >
| > +static int randompid = 0;
| > +SYSCTL_INT(_kern, OID_AUTO, randompid, CTLFLAG_RW, &randompid, 0, "");
| > +
| > int
| > fork1(p1, flags, procp)
| > struct proc *p1;
| > @@ -262,8 +265,8 @@
| > * restart somewhat above 0, as the low-numbered procs
| > * tend to include daemons that don't exit.
| > */
| > - if (nextpid >= PID_MAX) {
| > - nextpid = 100;
| > + if (nextpid >= PID_MAX || randompid) {
| > + nextpid = (randompid) ? arc4random() % PID_MAX : 100;
| > pidchecked = 0;
| > }
|
| You only seem to be randomizing the PIDs in the case when they wrap around
| to 0. OpenBSD have an extra conditional in there which forces this to
| always be the case.
Err. Check that again.
if (nextpid >= PID_MAX *OR* randompid is not zero)
nextpid = 100 if randompid is zero or arc4random() MOD PID_MAX if it
is non zero
| Why not just use the arc4random.c we already have (+ any openbsd changes)
| and tweak it, instead of rewriting from scratch? sys/dev/rnd.c in
| OpenBSD..
A few reasons.
i) At the time, I planned on arc4random.c becoming arc4.c in favour of my
if_vpn that I hope to get around to actually writing. However, it soon
dawned on me that using a stream cipher for an unreliable transmit medium
(ie Internet) is *VERY* stupid (think packet loss).
ii) It's more fun writing it from scratch. :-)
--
Dan Moschuk (TFreak!dan@freebsd.org)
"Try not. Do, or do not. There is no try."
-- Yoda
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991128130432.C33028>
