Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Nov 2000 08:16:57 +0200
From:      Mark Murray <mark@grondar.za>
To:        Alfred Perlstein <bright@wintelcom.net>
Cc:        hackers@freebsd.org
Subject:   Re: patches for 4.x devrandom so that bind "works" 
Message-ID:  <200011140616.eAE6Gvw04883@grimreaper.grondar.za>
In-Reply-To: <20001113160614.R11449@fw.wintelcom.net> ; from Alfred Perlstein <bright@wintelcom.net>  "Mon, 13 Nov 2000 16:06:14 PST."
References:  <20001113160614.R11449@fw.wintelcom.net> 

next in thread | previous in thread | raw e-mail | index | archive | help
Hi

I have something similar to this, and it goes slightly further.

Yes, it is this simple :-).

M

> 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."
> 
--
Mark Murray
Join the anti-SPAM movement: http://www.cauce.org


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?200011140616.eAE6Gvw04883>