Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Nov 2000 16:06:14 -0800
From:      Alfred Perlstein <bright@wintelcom.net>
To:        markm@freebsd.org
Cc:        hackers@freebsd.org
Subject:   patches for 4.x devrandom so that bind "works"
Message-ID:  <20001113160614.R11449@fw.wintelcom.net>

next in thread | raw e-mail | index | archive | help
I was playing with bind9 and got the typical:

    On FreeBSD systems, the server logs error messages like "fcntl(8,
    F_SETFL, 4): Inappropriate ioctl for device". This is due to
    a bug in the FreeSBD /dev/random device. The bug has been
    reported to the FreeBSD maintainers. Versions of OpenBSD prior
    to 2.8 have a similar problem.

I took a look at what OpenBSD did and it looks like they just
no-op'd out the ioctl:

http://www.openbsd.org/cgi-bin/cvsweb/src/sys/dev/rnd.c?r1=1.40&r2=1.41

I have a patch that seems to shut bind up, but I'm not 100% sure
this is the right fix, as it looks like it just fakes the nonblocking
access to the random devices.

Here's my patch (I can probably generate this for alpha):

Index: mem.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/mem.c,v
retrieving revision 1.79.2.4
diff -u -u -r1.79.2.4 mem.c
--- mem.c	2000/08/04 22:31:07	1.79.2.4
+++ mem.c	2000/11/13 23:53:43
@@ -57,6 +57,7 @@
 #include <sys/proc.h>
 #include <sys/random.h>
 #include <sys/signalvar.h>
+#include <sys/filio.h>
 #include <sys/uio.h>
 
 #include <machine/frame.h>
@@ -465,8 +466,20 @@
 	 * selecting and inspecting which interrupts are used in the muck
 	 * gathering business.
 	 */
-	if (cmd != MEM_SETIRQ && cmd != MEM_CLEARIRQ && cmd != MEM_RETURNIRQ)
+	switch (cmd) {
+	case FIOASYNC:
+		/* rnd has no async flag in softc so this is really a no-op. */
+		/* FALLTHROUGH */
+	case FIONBIO:
+		/* Handled in the upper FS layer. */
+		return (0);
+	case MEM_SETIRQ:
+	case MEM_CLEARIRQ:
+	case MEM_RETURNIRQ:
+		break;
+	default:
 		return (ENOTTY);
+	}
 
 	/*
 	 * Even inspecting the state is privileged, since it gives a hint

Did I miss part of the OpenBSD delta?  This looks too easy. :(

-- 
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001113160614.R11449>