On Fri, Dec 20, 2002 at 07:24:15PM +1100, Bruce Evans wrote: > On Fri, 20 Dec 2002, Sean Kelly wrote: > > > On my 5.0-CURRENT kernel built 45 minutes ago, I can bring my system to its > > knees by doing > > > > # cat /dev/io > > > > While I understand that this isn't exactly something one would normally be > > doing, is it really something that should bring the system down? > > No. Writing to /dev/io is not supported. write(2) to a device that > doesn't support writing should return -1 and set errno to ENODEV. > > This was broken mainly by removing the default case from mem.c:mmrw(). > This causes mmrw() to loop endlessly without giving up control. Giant > locking in -current makes this especially fatal -- mmrw() holds Giant > so even most interrupt handlers are blocked. > > In RELENG_4 the only bug near here is that mmrw() returns ENXIO instead > of ENODEV for writes to /dev/io.
Thanks for pointing out where the code which handles /dev/io was. I see exactly what you mean, and I came up with a 2 liner that fixes it on my system. Could somebody check/commit this? edgemaster# cat /dev/io cat: /dev/io: Operation not supported by device edgemaster# Index: sys/i386/i386/mem.c =================================================================== RCS file: /usr/home/ncvs/src/sys/i386/i386/mem.c,v retrieving revision 1.99 diff -p -u -r1.99 mem.c --- sys/i386/i386/mem.c 11 Oct 2002 14:58:28 -0000 1.99 +++ sys/i386/i386/mem.c 21 Dec 2002 07:54:29 -0000 @@ -195,6 +195,8 @@ mmrw(dev_t dev, struct uio *uio, int fla return (EFAULT); error = uiomove((caddr_t)(int)uio->uio_offset, (int)c, uio); continue; + default: + return (ENODEV); } if (error) -- Sean Kelly | PGP KeyID: D2E5E296 [EMAIL PROTECTED] | http://www.zombie.org
msg49155/pgp00000.pgp
Description: PGP signature