[net.sources] 4.2 BUGLIST, Part 10 of 10

vance@mtxinu.UUCP (Vance Vaughan) (11/12/84)

4.2 BUGLIST ABSTRACTS from MT XINU, part 10 of 10:

	The following is part of the 4.2 buglist abstracts as processed by
	Mt Xinu.  The initial line of each abstract gives the offending
	program or source file and source directory (separated by --),
	who submitted the bug, when, and whether or not it contained
	a proposed fix.  Due to license restrictions, no source is
	included in these abstracts.

	Important general information and disclaimers about this and
	other lists is appended at the end of the list...

vax/machdep.c--sys	     astrovax!wls (William L. Sebok)   5 Mar 84    +FIX
	The computer (a Vax 750) occasionally panics:
		machine check 2:  cp tbuf par fault
	even though BSD 4.2 contains the patch to flush and return on tbuf
	parity errors.
	  The problem is that the test for the condition insists that bit 0 of
	the mcesr (prefetch reference bit) be zero, which need not be true.

    REPEAT BY:
	Eventually the computer will panic as described above.
_______________________________________________________________________________
vax/machdep.c--sys	  ECN.ghg@Purdue.ARPA (George Goble)   26 Jul 84   +FIX
	One can exec an a.out with a large BSS which exceeds the
	user settable DATA size limit.  The a.out will run fine
	(exceeding the DATA size limit) until it does an sbreak
	at which time the limit is checked correctly and ENOMEM
	is returned.

    REPEAT BY:
	Run any large a.out which does not do malloc() or sbreak().
_______________________________________________________________________________
vax/machdep.c--sys	     astrovax!wls (William L. Sebok)   6 Mar 84    +FIX
	In memerr() in /sys/vax/machdep.c  no test is ever done to check
	whether memory errors on a VAX 750 are correctible or not.  Thus
	strange panics and such may occur with no indication on the console
	that there was a hard error.
	  The fix below fixes the problem for a VAX 750.  I suspect that the
	same problem is also present in the VAX 780 and 730 support code, as
	I have not seen any tests for the uncorrectable memory error condition.
	
	This bug was also present in 4.1.

    REPEAT BY:
	Get yourself a bad memory board with hard errors.  The system may do
	all sorts of strange things because of memory errors yet only
	"soft ecc" messages will appear on the console. 
_______________________________________________________________________________
vax/machdep.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	The dumpsys() routine in machdep.c writes the core image to the
	device specified in "dumpdev".  If GENERIC UNIX panics before
	setconf() configures dumpdev, dumpsys() tries to write the core image
	on device (dev_t)0.  If your system is MASSBUS-based, this is
	usually the root filesystem.  Result: root filesystem gets bashed.
	It's ironic that there was code in 4.1bsd to defend against this,
	but someone ifdef'ed it out in 4.2bsd.

    REPEAT BY:
	Introduce faulty code into GENERIC UNIX that causes a crash before
	setconf() is called.  This would probably never be done intentionally,
	but it can happen in the course of debugging new versions of UNIX.

    FIX:
		Remove the #ifdef notdef and the #endif at the beginning of dumpsys()
		in machdep.c.  This isn't the best fix, but it is better than
		no fix at all.
	Reported-By:
		Rick Ace, New York Institute of Technology, (516) 686-7644
_______________________________________________________________________________
vax/machdep.c--sys	       lepreau@utah-cs (Jay Lepreau)   21 Sep 84   +FIX
	Someone missed putting in the required null stmnt between
	an if and an asm() to get around C compiler bug.
	Means a prober is never done.

    REPEAT BY:
	Source and assembly code examination.

    FIX:
	At beginning of sigcleanup(), add the line
	;		/* Avoid asm() label botch */
	right after the "return;" line.
_______________________________________________________________________________
vax/machdep.c--sys		   salkind@nyu (Lou Salkind)   1 Dec 83    +FIX
	The amount of physical memory the system uses is not computed
	correctly.  This is because the kernel makes the (incorrect)
	assumption that 2*nbuf = bufpages.
	By default, nbuf is set to bufpages/2 where bufpages is
	a function of the physical memory available.  If bufpages is odd,
	you lose.

    REPEAT BY:
	Actually, I noticed this problem when patching in my own
	values of bufpages and nbuf.
_______________________________________________________________________________
vax/sys_machdep.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	If a negative number is passed to the resuba syscall by the super-user,
	it is handed to ubareset(), with rather unexpected results.

    REPEAT BY:
	Issue the resuba syscall with a negative argument.
_______________________________________________________________________________
vax/trap.c--sys		  rws@mit-bold (Robert W. Scheifler)   17 Nov 83   +FIX
	When doing a wait3() with WUNTRACED with a SIGCHLD handler,
	if the inferior stops due to a SIGTTIN, SIGTTOU, SIGTSTP, or
	SIGSTOP after the parent is already sleeping at PWAIT, the
	wait3() never returns.

    REPEAT BY:
	The following C program will demonstrate the bug.  Run it,
	and type ^Z to the ftp prompt.
	
	#include <sys/signal.h>
	#include <sys/wait.h>
	#include <sys/ioctl.h>
	extern int child();
	struct sigvec sv = { child, 0, 0 };
	struct sigvec ig = { SIG_IGN, 0, 0 };
	
	main()
	{
		sigvec(SIGCHLD, &sv, 0);
		sigvec(SIGTTOU, &ig, 0);
		if (!fork()) {
			short pid = getpid();
			setpgrp(pid, pid);
			ioctl(0, TIOCSPGRP, &pid);
			execl("/usr/ucb/ftp", "/usr/ucb/ftp", 0);
		}
		wait3(0, WUNTRACED, 0);
	}
	
	child()
	{
		short pid = getpid();
		ioctl(0, TIOCSPGRP, &pid);
	}
_______________________________________________________________________________
vax/trap.c--sys		  rws@mit-bold (Robert W. Scheifler)   3 Jan 84   
	sigstack() seems like this wonderful thing, allowing applications
	to field signals without modifying the normal stack.  This is
	useful, for example, when you need to control values on the stack
	to avoid garbage collection problems.  Unfortunately, to take
	advantage of a VAX instruction (REI), the sigcontext structure that is
	passed to the signal handler is always pushed onto the CURRENT stack,
	not the stack specified with sigstack().  As near as I can tell, this
	largely defeats the whole purpose of sigstack().  (Fortunately
	for my applications, namely CLU and Argus, I can guarantee that these
	5 longs won't look like heap references, so I luck out.)

    REPEAT BY:
	Use sigstack() and sigvec() to set up a stack and handler, and cause
	the appropriate interrupt.  Look which stack the sigcontext is on.

    FIX:
	The sigcontext is only pushed on the current stack so that the
	PS+PC part can be used by the REI instruction in the signal
	trampoline code.  The fix is probably to do the REI "by hand" in
	sigcleanup() instead, or perhaps do some correctness checks on the
	PS+PC, and then update the PS+PC on the kernel stack for the REI back
	from the CHMK 139, thus collapsing what is currently an REI-to-REI
	into a single REI.
_______________________________________________________________________________
vax/tu.c--sys		       guest@ucbarpa (Guest Account)   19 Jun 84  
	lint complains a lot as it grovels over sys/vax/tu.c

    REPEAT BY:
	Configure a 4.2bsd kernel for VAX730 and/or VAX750 and then "make lint"

    FIX:
		Lots of little mods all over tu.c, all of which will be obvious
		when you "make lint".  Should have been done when the driver was
		coded.
	Reported-By:
		Rick Ace, New York Institute of Technology
_______________________________________________________________________________
vax/tu.c--sys		    Bill Croft <croft%Safe@SU-Score>   12 Oct 83  
	In sys/vax/tu.c (the console tu58 driver), the tu_restart
	function calls "timeout" with a bad argument.  This
	can cause the system to crash if a tu_restart ever occurs
	(as often happens on a 750).

    REPEAT BY:
	cp /dev/tu0 /dev/null
	will crash a 750; it would probably crash a 730 too
	if the tu_restart code ever gets called.

    FIX:
	The bad line says:
		timeout(tustart(), (caddr_t)0, hz * 3);
	and should read
		timeout(tustart, (caddr_t)0, hz * 3);
	
	Alas however, there still seems to be bugs in the 750 (RSP)
	version of the code.  I have my config file and makefile
	set up properly to include the pseudo-dma code, but
	it still doesnt work (manual section tu(4) claims it
	should work in single user mode).  I get many "overrun
	error, transfer restarted" messages.  As a long shot
	I tryed nooping the call to "tudma" in locore (Xconsdin),
	but still no go.  I was hoping to use the tu58 to
	backup the dist cassette and in getting some initial
	conversion sources over until my net interface
	is working (with Stanford subnets).  
	
		--Bill Croft
			Stanford Medical Center (croft@sumex)
_______________________________________________________________________________
vaxif/if_ec.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	If ecprobe() confirms the presence of an operational 3Com Ethernet
	controller, it returns the value 1.  It should instead return the
	size of the controller's UNIBUS registers.

    REPEAT BY:
	Examine the code in ecprobe() if if_ec.c

    FIX:
	At the end of ecprobe() in if_ec.c, replace the line
		return (1);
	with
		return sizeof (struct ecdevice);
	Submitted-By:
	Rick Ace, New York Institute of Technology, (516) 686-7644
_______________________________________________________________________________
vaxif/if_ec.c--sys		   Jeff Mogul <mogul@coyote>   13 Feb 84   +FIX
	3com Unibus ethernet interfaces don't hear themselves, so
	if_ec.c has code to fake this by looping packets.  The comment
	at ecoutput() says "If destination is this address or broadcast,
	send packet to loop device ..." but in fact the code only
	checks for broadcasts, and then only by checking the IP address.
	So, it won't loopback directed packets or non-IPs.
	
	Fixing this for IPs is easy; fixing it for other AFs is hard
	because if_loop.c only handles IPs.  The fix below works for
	IPs; separate code (marked by #if NENETFILTER) works for users
	of Stanford's ethernet filter pseudo-device.
	
	Another, somewhat subtler bug, is that in certain cases the
	original code could lose mbufs; it didn't free mcopy if it
	bailed out for some error conditions.

    REPEAT BY:
	Can't be repeated on a vanilla 4.2BSD system; if_ether.c does
	IP loopbacks before they get to the driver (except for broadcasts,
	which the driver already does right) unless Chris Kent's changes
	to if_ether.c have been installed.
	
	Otherwise, repeat by trying (somehow) to send a packet to yourself.
_______________________________________________________________________________
vaxif/if_ec.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	Malfunctioning 3Com Ethernet hardware can crash UNIX.  The ecread()
	routine extracts the receive-buffer number from the Receiver
	Control Register in the 3Com controller.  If the controller
	malfunctions and reports that it has received a packet in
	buffer number 0, the driver issues a panic("ecrint").
	Halting the operating system because of a faulty Ethernet
	controller is too drastic.  The operating system should simply
	report the problem and recover as gracefully as it can.

    REPEAT BY:
	You must have a 3Com Ethernet board that malfunctions in the proper way.
_______________________________________________________________________________
vaxif/if_en.c--sys		   Jeff Mogul <mogul@coyote>   27 Feb 84   +FIX
	The enswab() routine included with if_en.c in 4.2 has my name
	on it, but it is NOT what I wrote and it does not work.
	Presumably, it was more important for it to pass lint than
	for it to work. Also, the routine should be careful about
	bogus lengths.

    REPEAT BY:
		Compile your kernel with SWABIPS turned on and try to use the
		3mb interface.
	Remark:
		The right way to handle this interface is to byteswap all packets
		on input and output, since the interface itself byteswaps all
		packets (thus the two swaps cancel out.)  So, SWABIPS should really
		be UNSWABEN, or something like that.
_______________________________________________________________________________
vaxif/if_il.c--sys	       Jay Lepreau <lepreau@utah-cs>   13 May 83   +FIX
	After a ubareset, all the packets sent by that host get thrown out
	in ilrint() with a bad type field.  Turns out that the interlan
	goes into "insert source address" mode after the ubareset.
	Evidently the CISA cmd in ilinit() does not work if the device
	is ONLINE.  From inspection of current code on monet this is
	still a problem in 4.1c.

    REPEAT BY:
	Issue a resuba() call.  ruptime shows all hosts up execpt for
	this one.  Etc.
_______________________________________________________________________________
vaxif/if_il.c--sys	       guest@ucbarpa (Guest Account)   18 Jun 84  
	malfunctioning Interlan ethernet board can hang Unix
_______________________________________________________________________________
vaxif/if_pcl.c--sys	       Jeff Schwab <jrs@Purdue.ARPA>   25 May 84   +FIX
	The pcl-11 network driver has some timing problems with
	re-initialization after error conditions.  The driver is not
	truely at fault, the device does not reset quickly enough
	when an INIT is issued after a device error.  The code needs
	juggling for error recovery and there is a small typo
	in setting up the receive control register.

    REPEAT BY:
	Have some hardware errors.  Eventually the timing problem will
	hit and you will continuously receive/send errors.
_______________________________________________________________________________
vaxif/if_uba.c--sys		   salkind@nyu (Lou Salkind)   13 Mar 84   +FIX
	There are two problems in if_uba.c:if_wubaput:
	(1) there is a superfluous instruction
	(2) the variable x is used for two different purposes in if_wubaput.
	This will cause transfers of two full clicks or more to fail.
	(Luckily the network interfaces don't do this currently.)

    REPEAT BY:
	Transfer 2K packets over your network device...
_______________________________________________________________________________
vaxif/if_uba.c--sys	       Jeff Schwab <jrs@Purdue.ARPA>   8 Aug 84    +FIX
	It has been pointed out to me (in a most embarrassing fashion)
	that my previous fixes for handling uba allocation when then
	local network hlen is 0 where not complete.  I ended up treating
	the disease rather than the problem.  The corrected fix requires
	the same changes to if_ubainit() as before, but the change to
	if_rubaget() should be replaced by a more proper fix to the
	mr assignment in if_ubaalloc().

    REPEAT BY:
	The pcl-11 is such a device.  If you raise the mtu on the
	device from the default 1006 to anything greater than
	1024, your network will be unusable.
_______________________________________________________________________________
vaxif/if_uba.c--sys	       Jeff Schwab <jrs@Purdue.ARPA>   25 May 84   +FIX
	If a local network interface has an hlen of 0, the routines
	in if_ubainit() allocate spurious pages and the if_rubaget()
	routine will exchange the wrong page when handling a packet
	greater than 1024 bytes long.

    REPEAT BY:
	The pcl-11 is such a device.  If you raise the mtu on the
	device from the default 1006 to anything greater than
	1024, your network will be unusable.
_______________________________________________________________________________
vaxif/if_vv.c--sys	  rws@mit-bold (Robert W. Scheifler)   22 Nov 83   +FIX
	The V2LNI driver doesn't set up for broadcast correctly, and
	doesn't take advantage of the loopback-net.

    REPEAT BY:
	Try running rwhod (for broacast) and rlogin to self (for loopback).
_______________________________________________________________________________
vaxmba/hp.c--sys		 Doug Kingston <dpk@brl-vgr>   29 Sep 83  
	The unix.generic and unix kernels I generated for a 750
	with RH750 and two RM05's incorrectly identified the second
	RM05 as a CDC 9775.  Drive 0 was correctly identified.

    REPEAT BY:
	Boot 4.1c on a 750 with RH750 and 2 RM05's.
_______________________________________________________________________________
vaxmba/hp.c--sys		   Mike Muuss <mike@brl-vgr>   23 Aug 83   +FIX
	There is a bug in the distributed (4.1c) CDC 9775 partition table.
	The original table claims 843 cylinders, numbered 0..842, but
	the device actually only possesses 842 cylinders, numbered
	0..841.

    REPEAT BY:
	Try to read the "bad block" table with bad144.
	We encountered the problem with FORMAT(8v), with
	9775 disks on a up (Emulex SC21) formatter -- it couldn't write
	the bad block table.

    FIX:
	The fix to the sizes[] table is:
	1077760, 0,		/* C=cyl 0 thru 841 */
	
	377600,	547,		/* F=cyl 547 thru 841 */
	701440,	294,		/* G=cyl 294 thru 841 */
	
	Also, remember to fix the entry in /etc/disktab.
	Change the nc#843 to nc#842.
	
	Enjoy!
	 -Mike
_______________________________________________________________________________
vaxmba/hp.c--sys		     weltyrp%rpi@CSNet-Relay   5 Dec 83   
	In some cases DEC rm03 and rm05 drives may be misidentified by
	the code in hpattach as a non-DEC drive on a non-DEC
	controller.  This problem appears in most parts of the system
	that have to identify a drive, including the COPY and FORMAT
	programs on the distribution floppy.

    REPEAT BY:
	The problem will occur with any rm03 or rm05 whose serial
	number maps to one of the ones that is used to detect Systems
	Industries controllers and drives.

    FIX:
	If there are no systems industries drives on a system, then the
	code that identifies such drives can be removed without harm
	(which is what we did, as we don't plan to ever use SI
	controllers).  If there is a mix of drive types, then the fix
	will be much more complex.
_______________________________________________________________________________
vaxmba/ht.c--sys	   dlw@UCBTOPAZ.CC (David L. Wasley)   6 Aug 83    +FIX
	There is a bug in the ht driver that causes UNSafe to be set.
	This causes a subsequent operation on ANY drive to abort.

    REPEAT BY:
	Attempt to open a drive not on-line. Attempt to do anything
	subsequent to that drive or any other drive.

    FIX:
		Remove the following lines from ht.c:htcommand().
		I show them commented out.
	
	/* This causes UNS to be set if !MOL, and is unnecessary!
	 *	if (bp == &chtbuf[HTUNIT(bp->b_dev)] && bp->b_command == HT_SENSE) {
	 *		htaddr->htcs1 = HT_SENSE|HT_GO;
	 *		mbclrattn(mi);
	 *	}
	 */
	
		David Wasley
	
_______________________________________________________________________________
vaxmba/mt.c--sys		 mazama!stew (Stewart Levin)   6 Jan 84   
	These bugs were originally discovered in the 4.1BSD mt.c driver
	and are still in the 4.2BSD version:
	
	1) Reverse reads are handled improperly.  These are called for
	   by the TU78 READOPP error retry sequences (i.e. when you
	   see the tape drive wig/wagging back and forth over a dirty
	   tape record.  What the tape driver is supposed to do in this
	   case (and I even got a written letter from DEC detailing this!)
	   is 
	
	   a) Use record count from mtca (tape control) register to dequeue
	      any records that were correctly transferred.  Load record count
	      with 0.
	   b) Byte count from mtbc (byte count) register is TM78's best
	      guess of actual record length.  This value should be taken as
	      gospel and loaded into the MBA byte count register (two's
	      complemented).  If record does not fit in buffer, compute
	      number of word for data channel to skip (mtca skip count) or
	      give up and return I/O error.
	   c) Load the MBA virtual address register with the map register
	      pointer and starting memory address (physical byte offset).
	      If the last operation was a reverse read then the TM78 has
	      requested us to do a forward read and we load these just as
	      for a normal forward read command.  If the last operation was a
	      forward read then the TM78 has requested us to read reverse and
	      the starting address is the read forward normal starting address
	      PLUS THE NUMBER OF BYTES TO BE READ MINUS ONE.
	   d) Load the starting (and successive) map register(s) with physical
	      page address(es).
	   e) Set MBA control register interrupt enable.
	   f) Load the mtcs control register with the function code octal
	      071 (MT_READ|MT_GO) for a forward read or octal 077 for a
	      read reverse (MT_READREV|GO).
	
	   As you may have guessed,  the present driver does NOT load
	   the virtual address register correctly.  The result is that
	   reverse reads store their data IN FRONT OF THE BUFFER FOR WHICH
	   IT IS INTENDED.  This generally continues until offset 0 of
	   the page mapping the beginning of the buffer is reached.
	   In the worst case this overwrites critical data areas and crashes
	   the system.  In more benign settings one gets erroneous data
	   (dd exhibits "stuttering records" where some part of a record
	   ends up repeated).
	
	   The driver also mishandles read opposite requests by squirreling
	   away the byte count from b) above in the buffer header and never
	   retrieving it to compute the correct residual byte count to return
	   to the user when the retry is successful.
	
	2) The driver signals EOT on writes one record too early by returning
	   EOF upon data transfer interrupt code 04 (Write operation success-
	   fully completed beyond EOT marker) rather than on initiation of
	   the next write operation.

    REPEAT BY:
	I wish I knew!  We found it by reading old tapes until the problem
	occurred.  We finally found one tape that repeated the retry sequence
	consistently on a few records.

    FIX:
	We have kludged around the problem by commenting out the READOPP
	dtint() case causing mt.c to fall through to signal the default
	hard I/O error instead.
_______________________________________________________________________________
vaxmba/mt.c--sys		 Jeff Mogul <mogul@Gregorio>   17 Aug 84   +FIX
	If a TU78 tape drive on a TM78 formatter is reading a tape and
	cannot completely read a record in the forward direction, it
	may interrupt the CPU with an interrupt code of "READ OPP".  This
	means that the drive has been positioned at the end of the record,
	the byte count register has been loaded with the length of the
	record, and the CPU should initiate a "Read Opposite" transfer
	in an attempt to read the record in the reverse direction.
	
	The DEC technical manual for the TM78 is not too clear on the
	subject, but a direct communication with DEC reveals that the
	proper sequence in this case is:
	
	(1) Load mtca with SER=1 (Suppress Error Repositioning) and the
		drive unit number; all other fields should be 0.
	(2) Load the MBA byte count register in the usual way
	(3) Load the MBA virtual address register with the map register
		pointer and physical byte offset for the *last* byte
		in the buffer, unlike the usual case.
	(4) Load the drive control register with the MT_READREV code
	
	The mt.c driver supplied with 4.[12]BSD has code to try to handle
	this, but this code does not do step (1) or (3) properly.  It
	fails to set the SER bit in mtca (probably a minor bug), but
	it gets step (3) wrong because there is no way to do it right.
	This is because the MASSBUS driver (mba.c) does not support
	"backwards" DMA; i.e, there is an assumption built into the code
	of mbasetup() that the buffer address is always the start of the
	buffer.
	
	What actually causes a panic, though, is a little subtler.  The
	drive returns the total length of the tape record, to be used
	as the byte count for the Read Opposite.  However, if the
	buffer supplied by the user is shorter than the tape record,
	when the code in mt.c blindly sets the b_bcount field longer
	that the size of the buffer it causes a panic (probably
	"mba, zero entry" but I forget exactly which one) if the buffer
	is near the end of the user's address space.  (I suspect there
	may be other ways this code could create havoc.)
	
	I'm not sure there is any reasonable way of doing the Read
	Opposite, in the general case, since it might require the driver
	to reposition the tape within a record if the user's buffer is
	not large enough.

    REPEAT BY:
	This is hard to repeat, since it requires a tape that is bad
	in a way that I don't entirely understand.  However, I have
	found one tape that will reliably crash our 4.1 system.  The
	tape is written with 8000 byte blocks; reading it with
	
	dd if=/dev/rmt4 of=/dev/null ibs=1600
	
	causes the panic, presumably because the driver tries to
	Read Opposite 8000 bytes into a 1600 byte buffer.
	
	Examination of the mt.c code should suffice to convince one
	that the bug exists.
_______________________________________________________________________________
vaxmba/mt.c--sys       decvax!dartvax!steve (Steve Campbell)   22 Feb 84  
	If there are two (dual-ported) TM78 tape formatters, each
	with one TU78 transport attached, on the MASSBUS, only
	the first can be used.  Autoconfig seems to find both
	formatters and transports, but i/o operations to the second
	will fail.

    REPEAT BY:
	Configure a 750 as above, mount a scratch tape on both
	transports, set port select switches appropriately, and try
	mt -f /dev/mt? status.  For mt0 you get the expected status
	message.  For mt1 you get "mu0: not online."  Routine mtopen
	has failed.
_______________________________________________________________________________
vaxmba/mt.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	Redundant code in non-data-transfer interrupt handler is
	occupying space and slowing the CPU.

    REPEAT BY:
	Examine code in mtndtint() in mt.c.

    FIX:
	Remove the following two lines of code near the beginning of
	the mtndtint() routine:
		if (bp == 0)
			return (MBN_SKIP);
	If you read the preceding code in the routine, it will be evident
	that the condition of the aforementioned "if" test will always
	be false.
	Submitted-By:
	Rick Ace, New York Institute of Technology, (516) 686-7644
_______________________________________________________________________________
vaxuba/d[hz].c--sys			    jbc <ut-ngp!jbc>   15 Jun 83   +FIX
	The TIOCCDTR ioctl, used to clear the DTR bit, does
	not perform suitable permission checking.
	
	For example, if a terminal device can be opened for
	writing by a process in a group other than that
	of the device, that process can then force DTR low
	on that terminal line. While some processes are only
	mildly susceptible to having random garbage written
	to the terminal, they may be extremely vulnerable to
	the logout which results from loss of DTR on a
	typical dialup.
	
	TIOCCDTR, and, less importantly, TIOCSDTR, should
	return error if the file descriptor passed in the
	ioctl does not refer to the controlling terminal
	for the process which invokes the ioctl and the
	uid is not superuser.

    REPEAT BY:
	#include	<sys/file.h>
	#include	<sgtty.h>	/* or whatever */
	#define		error( s )	{perror( (s) ); exit( 1 );}
	
	main( argc, argv )
	int	argc;
	char 	*argv[];
	{
		register	int	fd;
	
		if ( (fd = open( *++argv, FWRONLY )) < 0 )
			error( *argv );
	
		if ( ioctl( fd, TIOCCDTR, 0 ) < 0 )
			error( "TIOCCDTR" );
	
		exit( 0 );
	}
	
	Now, suppose that someone is logged in on /dev/ttyxx, where
	/dev/ttyxx is a dialup line. Execution of the above program
	as in, say,
	
			a.out /dev/ttyxx
	
	will typically result in termination of the user's login process.
_______________________________________________________________________________
vaxuba/dh.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	If dhparam() sets the input speed of a DH11 line to zero, it returns
	to its caller at an elevated IPL.  This can cause unnecessary
	blockage of device interrupts.

    REPEAT BY:
	Examine code in dh.c.

    FIX:
		Before the first "return;" statement in dhparam(), add the line
			splx(s);
	Submitted-By:
		Rick Ace, New York Institute of Technology, (516) 686-7644
_______________________________________________________________________________
vaxuba/dh.c--sys		   salkind@nyu (Lou Salkind)   27 Jan 84   +FIX
	If the soft carrier flag for a dh line is set (dhsoftCAR), and a
	dm modem interrupt occurs on the line, the TS_CARR_ON flag may be
	cleared.  This causes future reads/writes to the terminal to return
	EIO.

    REPEAT BY:
	On a line with modem control, bring down DTR to force a modem
	interrupt.  (This really can happen!)
_______________________________________________________________________________
vaxuba/dh.c--sys	     astrovax!wls (William L. Sebok)   5 Mar 84    +FIX
	If the soft carrier flag for a dh line is set (dhsoftCAR), data terminal
	ready (DTR) will never be set on open.  Thus, terminals (or modems)
	which require DTR will not work.

    REPEAT BY:
	Connect a terminal or modem which requires DTR to a line with modem
	control which has dhsoftCAR  set.  The device will not operate.
_______________________________________________________________________________
vaxuba/dmf.c--sys     lbl-csam!astrovax!matt (Matt Crawford)   2 Feb 84   
	The dmfprobe() routine doesn't check for existence of the device,
	it just returns a "yes" in all cases.  This means if you configure
	your dmf's as being on "uba?" and they are not actually on uba0,
	they will never be found.

    REPEAT BY:
	Obvious.

    FIX:
	Unless there's a reliable way to force an interrupt one must always
	specify the uba number explicitly, contrary to the dmf entry in
	chapter 4 of the manual.
_______________________________________________________________________________
vaxuba/dmf.c--sys		Tim Morgan <morgan@uci-750a>   3 Oct 84    +FIX
	The dmf driver does not contain code to wake up processes which
	are select'ing on output.

    REPEAT BY:
	Log onto a terminal on a dmf32 or clone.  Telnet to any system,
	including the local one.  Run something on that system which will
	produce lots of output (such as cat'ing /etc/termcap).  After a
	few hundred characters, the output will stop.  It will not start
	again until you type something.  Telnet is waiting until the output
	buffer empties to write more, but the dmf driver never does a
	selwakeup() call, so the select() call never returns unless something
	else occurs, such as a character in the input buffer.
_______________________________________________________________________________
vaxuba/dmf.c--sys     lbl-csam!astrovax!matt (Matt Crawford)   17 Jan 84  
	When dmf.c is compiled with "-DDMFDMA" flag, there are two undefined
	variables found in line 550: "car" and "dmf".  Line 550, and the
	sccs id line appear below:
	
	/*	dmf.c	6.1	83/07/29	*/
	
		car = UBACVT(tp->t_outq.c_cf, dmfinfo[dmf]->ui_ubanum);

    REPEAT BY:
	See above.

    FIX:
	I think the following two lines added after line 547 ("#ifdef DMFDMA")
	will fix this problem.  Please tell me whether it is correct, as I
	have not tried to run a system with this included yet.
	
		u_short	car;
		int	dmf = minor(tp->t_dev) >> 3;
_______________________________________________________________________________
vaxuba/dz.c--sys		   koda@hobgoblin (Jim Koda)   22 Feb 84   +FIX
	the spl5() in dztimer can actually lower the IPL and can cause
	random failures.  In particular, suppose the hardclock routine
	(IPL 18) is called during servicing of a ethernet interrupt on
	the 3com board (IPL 16) when the hardclock routine calls dztimer
	it promptly does a spl5() lowering IPL to 15.  Thus another
	ethernet interrupt can occur and its all over.

    REPEAT BY:
	With sufficient dz and ethernet traffic, random panics in the
	dz or 3com drivers will occur.
_______________________________________________________________________________
vaxuba/d{h,mf,z}.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	The TIOCLSET ioctl can affect the LITOUT bit of the t_flags word.
	The setting of the LITOUT bit determines whether the DMF/DH/DZ
	will operate in 8-bit mode or in 7-bit/parity mode, so it is
	therefore appropriate that dmfparam()/dhparam()/dzparam() be
	called during the driver's processing of the TIOCLSET call.
	The DMF32, DH11, and DZ11 drivers all fail to do this.

    REPEAT BY:
	Issue a TIOCLSET ioctl to a DMF, DH, or DZ terminal and note that
	the hardware does not switch between 8-bit mode and 7-bit/parity mode.
_______________________________________________________________________________
vaxuba/idc.c--sys	       guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	On a Vax-11/730, when the R80 disk requires ECC error recovery,
	the idcecc() routine is called.  This routine makes a 
	reference to the UBA page map.  The type of reference is
	apparently unacceptable to the 730, and it lets you know in
	no uncertain terms via Machine Check 9 "nonlw ioref" and,
	ultimately, a crash.

    REPEAT BY:
	Not quite sure... must enter the ECC code in the IDC driver.
_______________________________________________________________________________
vaxuba/lp.c--sys			      Steve Campbell   8 Jun 84   
	MAKEDEV assigns sequential minor device numbers - 0,1,2,... - to
	lp devices lp0, lp1, lp2, etc.  The driver, however, determines
	the unit address by shifting the minor device number >> 3, using
	the 3 low-order bits for software flags.  Hence the driver
	wants minor device numbers 0,8,16,etc.

    REPEAT BY:
	Configure two line printers, lp0 and lp1.  MAKEDEV will give
	them minor device numbers 0 and 1.  Lp0 will work ok, but
	if you use lp1, the driver still sends the data to lp0. What's
	more, the data will be mapped to upper case, since the "1"
	bit is treated as a "map-to-upper" flag by the driver.

    FIX:
	Take your pick: either hack MAKEDEV to generate the right minor
	device numbers for lp's, or fix the driver to use regular,
	sequential, minor device numbers and do the flags another way.
	
	Steve Campbell
	
	UUCP: {decvax|linus|cornell|astrovax}!dartvax!steve
	CSNET: steve@dartmouth     ARPA: steve%dartmouth@csnet-relay
_______________________________________________________________________________
vaxuba/lp.c--sys	hplabs!tymix!feldman (Steve Feldman)   29 May 84   +FIX
	If the timer interrupt goes off and there has been no activity
	in the last few seconds, the timer routine will stop sending
	if the device has been closed, even if characters still remain
	in the output buffer.  This can be a problem on slow devices,
	such as our laser printer.

    REPEAT BY:
	Get yourself a slow laser printer, and print a lot of small
	things.  Sometimes the last page of a job won't appear until
	the next one starts up.
_______________________________________________________________________________
vaxuba/rl.c--sys		   Jeff Mogul <mogul@coyote>   26 Mar 84   +FIX
	If your system includes an RL02 drive (not that they are
	all that useful) but the drive is not loaded when the system
	is booted, the configuration procedure does not recogniz the
	drive and it cannot be used until the system is rebooted.
	
	Since the RL02 is a removable pack, and a darn small one at
	that, it's unpleasant to have to have a pack loaded whenever
	you boot the machine.
	
	The problem is that the distributed RL02 driver checks for
	a ready-to-use, loaded pack instead of simply checking that
	the drive is there.  This is probably being done because
	(as a comment in the code notes) the "Get Status" operation
	may return invalid data.  Presumably, the author felt that if
	the status is "all set to use", then it's valid.

    REPEAT BY:
	(You need a system with an RL02 that is NOT the root drive).
	Unload the RL02, reboot your system.
	Once it is running, load the RL02.  You won't be able to
	use it for anything.
_______________________________________________________________________________
vaxuba/rl.c--sys		 Jeff Mogul <mogul@Gregorio>   14 Jun 84   +FIX
	Disk drive partition tables are supposed to have 8 entries.
	The table in the RL02 driver has 7; partition E was left out
	and so the sizes for F, G, and H are shifted to the previous
	partition

    REPEAT BY:
	Try to write something on the G partition
_______________________________________________________________________________
vaxuba/uba.c--sys	   Mike Braca <mjb%Brown@UDel-Relay>   27 Sep 83   +FIX
	System crashes when UBA reset is attempted (panic: Segmentation
	fault). This is because someone put in half a change to the
	way the cdevsw table is searched; it used to end with a null open
	routine pointer, but got changed to have its number of entries
	defined instead (nchrdev). However ubareset() wasn't changed,
	so it falls off the end of the table and calls random mung.

    REPEAT BY:
	Force a UBA reset somehow. Watch system crash.
_______________________________________________________________________________
vaxuba/uda.c--sys     lbl-csam!astrovax!matt (Matt Crawford)   1 Dec 83    +FIX
	If there is no drive with unit number 0 on a uda controller the
	driver never recognizes the response to the "set controller
	characteristics" command, because that packet always has
	mscp_unit == 0 and the udip[][] entry for the controller and
	unit is checked before the type of the packet.

    REPEAT BY:
	Try configuring the system with no disk at drive 0 on a uda
	controller, and setting the unit plugs accordingly.  DEC
	installed our ra81's with plugs #1 and #2 and wouldn't give us
	a spare plug.

    FIX:
		Here is a `diff uda.c.distributed uda.c.ourversion`:
	================================================================
	595a596,599
	> #ifdef ASTROVAX
	> 	if ((ui = udip[um->um_ctlr][mp->mscp_unit]) == 0 &&
	> 	    ((mp->mscp_opcode&0xff) != (M_OP_STCON|M_OP_END)))
	> #else
	596a601
	> #endif ASTROVAX
	================================================================
	
				Matt Crawford	(lbl-csam!astrovax!matt)
				University of Chicago
				Astronomy and Astrophysics Center
				5640 S. Ellis
				Chicago, IL  60637
_______________________________________________________________________________
vaxuba/ut.c--sys	 ihnp4!dicomed!boylan (Chris Boylan)   4 Jun 84    +FIX
	Variable is initialized in wrong spot, causing intermittent
	segmentation violations.

    REPEAT BY:
	Look at any other Unix UNIBUS driver for conformation or
	write large amounts of data to the cooked device.

    FIX:
	/*	ut.c	6.1	83/07/29	*/
	Line 248 is out of place it should be before
	the if (...) {, not in it.  The line:
	
			um = tjdinfo[tjunit]->ui_mi;
_______________________________________________________________________________
vaxuba/{dn,lp,rl,uu}.c--sys    guest@ucbarpa (Guest Account)   19 Jun 84   +FIX
	Coding oversight in several UNIBUS device drivers.  The unifind()
	routine in autoconf.c expects to find the standard address list in
	each driver terminated by a zero entry.  The drivers dn.c, lp.c,
	rl.c, and uu.c do not satisfy this requirement.

    REPEAT BY:
	Examine code in aforementioned drivers.
_______________________________________________________________________________
vgrind/tmac.vgrind--ucb       sdcrdcf!glenn (Glenn C. Scott)   28 Sep 84   +FIX
	Vgrind (actually /usr/lib/tmac/tmac.vgrind) doesn't understand the
	convention to place even numbered page numbers on the left side of
	the page and the odd numbers on the right side of the page.

    REPEAT BY:
	Vgrind a program source that would use more than one page of
	output. Look at the page numbers.

    FIX:
		Change the file tmac.vgrind to print even numbers on the left
		and odd numbers on the right.
	
	*** /usr/lib/tmac/tmac.vgrind	(old) Tue Aug 21 15:58:29 1984
	--- /usr/lib/tmac/tmac.vgrind	(new) Fri Sep 28 14:13:57 1984
	***************
	*** 25,31
	  'de vF
	  'ev 2
	  'sp .35i
	! 'tl '\f2\\*(=M''Page % of \\*(=G\fP'
	  'bp
	  'ev
	  'ft 1
	
	--- 25,32 -----
	  'de vF
	  'ev 2
	  'sp .35i
	! 'ie o 'tl '\f2\\*(=M''Page % of \\*(=G\fP'
	! 'el 'tl '\f2Page % of \\*(=G''\\*(=M\fP'
	  'bp
	  'ev
	  'ft 1
_______________________________________________________________________________
vgrind/vfontedpr.c--ucb			      wayne@lbl-csam   12 Sep 84   +FIX
	When running vgrind with multiple files the last page of the
	current file gets the date from the next file.

    REPEAT BY:
	Run vgrind with two files that have different modify dates.

    FIX:
	 It seems vfontedpr is reseting the date before the last .bp, moving the
	 .ds past the last .bp seems to fix this. Heres a diff file of the change;
	
	261a262
	> 	    printf(".ds =M %s %s\n", cp+4, cp+20);
	269,271d269
	< 	}
	< 	if (!filter) {
	< 	    printf(".ds =M %s %s\n", cp+4, cp+20);
_______________________________________________________________________________
vgrind/vgrindefs.src--ucb	 ucsfcgl!arnold (Ken Arnold)   25 Sep 84   +FIX
	"void" is a keyword in C, and vgrind doesn't know it.

    REPEAT BY:
	Find a program which uses the (void) type cast.  Vgrind it.
	Look at the output.  Notice that "void" is not in bold
	font.  Realize that this is incorrect. :->

    FIX:
	Add "void" to the list of keywords in ucb/vgrind/vgrindefs.src.
	Install /usr/src/ucb/vgrind/fbrindefs.src in /usr/lib/vgrinddefs
	by typing "make install".
_______________________________________________________________________________
vi--ucb			  mls@wisc-crys.arpa (Michael Scott)   7 Sep 84   
	The :tag (^]) command will turn magic off if the tags file gives it
	a pattern to search for and the search fails.

    REPEAT BY:
	Make an entry in a tags file for 'foo' with a search pattern that
	does not exist.  Type :set magic.  Type :tag foo.  Type :set all.
	Nomagic will be set.
_______________________________________________________________________________
vmstat.c--ucb			 mazama!stew (Stewart Levin)   22 Mar 84   +FIX
	After we employed the kgclock (adapted to our ancient AR11) driver
	to gather I/O and profiling samples, some of the numbers given by
	vmstat were off by a factor of 10.  As we were running the external
	clock at 10HZ and the internal clock runs at 100HZ, it was easy to
	find the cause.  vmstat (and iostat) were not reading the "phz"
	variable from the kernel's namelist and simply assuming it identical
	to the kernel's "hz" variable.

    REPEAT BY:
	Collecting samples using an external clock set to other than 100HZ.

    FIX:
	Read both "phz" and "hz" from /dev/kmem and use the former sampling
	rate if it is nonzero.  Be aware, however, that it may not have been
	calibrated correctly.  kgclock supposedly counts the number of external
	clock interupts occurring over a four second interval as measured using
	the system clock.  However when we looked at phz (using adb) it was 3
	not 10!   We cured the problem by explicitly initializing all relevant
	variables to zero on entry to the startkgclock() routine.  I can't
	say for sure why it fixed the bug, but either an unitialized variable
	was the culprit or the system modifies its idea of the time between the
	kgprobe() and startkgclock() calls.
_______________________________________________________________________________
vmstat.c--ucb			   cbosgd!mark (Mark Horton)   2 Jun 83    +FIX
	The number "60" (indicating 60 ticks/second) is hardcoded into
	the vmstat program.  (I wouldn't be surprised to find it in
	iostat and maybe ps, too.)  Now that you're running at 100
	ticks/second, the numbers based on etime (e.g. number of disk
	I/O's per second) are low by a factor of 6/10.  It's interesting
	to note that, while our disks got about 25 TPS in 4.1, with
	4.1c the same disks seem to peak out at 12-13 TPS (vmstat numbers).
	This bug accounts for much of this, raising the numbers to about 20.
	However, the number is still smaller than the 30 your document claims.

    REPEAT BY:
	"vmstat 5" will show disk numbers that are too low.

    FIX:
	In vmstat.c, change
		etime /= 60.;
	to
		etime /= 100.;
	or better yet, get the number 100 from some more global place,
	like the kernel or an include file.
	
	I found this while developing a CRT oriented program called sysmon
	which essentially does a "ps axv" every 30 seconds and a "vmstat 10",
	plus displaying lots more info (which the kernel keeps track of but
	vmstat doesn't have room in 1 line to print) as well as the load
	average and the date.  All this and it puts a much lighter load on
	the system (4-5% of a 750) - the speed comes from only having to do
	the kernel poking (namelist lookup, reading /dev, and other overhead)
	once, not every 10 or 30 seconds.  I'm still working on sysmon, but
	I'll be happy to send it to you if you want to use/include it.
	Rather than cutting up vmstat and ps, I put ifdefs into the sources,
	so the program can survive future memory management changes.
	
	Mark
_______________________________________________________________________________
vtroff--ucb			  jimbo@ucbic (Jim Kleckner)   11 Oct 83   +FIX
	" cat foo | vtroff -me - " will fail.  The "-" will be
	read as an option and then troff will read standard input
	before the font width tables.  Vtroff appends another "-"
	since it thinks that the file is missing (and is not).

    REPEAT BY:
	try the above.

    FIX:
	add the following case to the switch:
			....
		case -:			# This line matches the stdin arg.
			breaksw
		case -*:
			....
_______________________________________________________________________________
which.csh--ucb    !garfield!andrew@BERKELEY (Andrew Draskoy)   17 Jan 84   +FIX
	The which csh script won't tell you if a command is an alias,
	and will not read the path from the .cshrc as documented.  This
	is because it is exec'd with "csh -f", which does not read in the
	.cshrc file.

    REPEAT BY:
	Type "which xxx", where xxx is any alias defined in your .cshrc
	If the bug is present, "which" will not tell you that it is an
	alias.

    FIX:
	Take the "-f" out of the top line of the script.
_______________________________________________________________________________
whois--man		 jsq@ut-sally.ARPA (John Quarterman)   12 Jan 84   +FIX
	There was no manual entry for the whois command.

    REPEAT BY:
	man whois

    FIX:
		Here's a man entry:
	.\"	@(#) whois.1 1.2 84/01/12
	.TH whois 1 84/01/12
	.UC 4
	.SH NAME
	whois \- DARPA Internet user name directory service
	.SH SYNOPSIS
	.B whois
	name
	.SH DESCRIPTION
	.TP
	whois help
	Produces a helpful message similar to the following:
	.PP
	Please enter a name or a handle ("ident"), such as "Smith"
	or "SRI-NIC".
	Starting with a period forces a name-only search;
	starting with exclamation point forces handle-only.
	Examples:
	.nf
		Smith			[looks for name or handle SMITH	]
		!SRI-NIC		[looks for handle SRI-NIC only	]
		.Smith, John		[looks for name JOHN SMITH only	]
	.fi
	Adding "..." to the argument will match anything from that point,
	e.g. "ZU..." will match ZUL, ZUM, etc.
	.PP
	To have the ENTIRE membership list of a group or organization,
	if you are asking about a group or org, shown with the record, use
	an asterisk character "*" directly preceding the given argument.
	[CAUTION: If there are a lot of members this will take a long time!]
	You may of course use exclamation point and asterisk, or a period
	and asterisk together.
	.SH FILES
	/usr/doc/local/netinfo/rfc812
	.SH SEE ALSO
	RFC 812:  NICNAME/WHOIS
	.SH DIAGNOSTICS
	.SH BUGS
_______________________________________________________________________________

              GENERAL INFORMATION ON THE 4.2 BUGLIST FROM MT XINU

          _________________________________________________________________

                           --IMPORTANT DISCLAIMERS--

          Material in this announcement and the  accompanying  reports
          has been edited and organized by MT XINU as a service to the
          UNIX community on a non-profit,  non-commercial  basis.   MT
          XINU  MAKES  NO  WARRANTY,  EXPRESSED  OR IMPLIED, ABOUT THE
          ACCURACY, COMPLETENESS, OR FITNESS FOR USE FOR  ANY  PURPOSE
          OF ANY MATERIAL INCLUDED IN THESE REPORTS.

          MT XINU welcomes comments in writing about the  contents  of
          these reports via uucp or US mail.  MT XINU cannot, however,
          accept telephone calls or enter into telephone conversations
          about this material.

          _________________________________________________________________

          Legal  difficulties  which  have delayed the distribution of
          4.2bsd buglist summaries by MT XINU have been  resolved  and
          three versions of the buglist are now available.

          The current buglist has been derived from reports  submitted
          to  4bsd-bugs@BERKELEY  (not  from reports submitted only to
          net.bugs.4bsd, for example).  Reports  are  integrated  into
          the  buglist as they are received, so that any distributions
          are current to within a week or so.

          Buglists now being distributed are  essentially  "raw".   No
          judgment  has been passed as to whether the submitted bug is
          real or not or whether it has been fixed. Only minimal edit-
          ing  has  been  done  to produce a manageable list.  Reports
          which are complaints (rather than  bug  reports)  have  been
          eliminated;  obscenities  and  content-free flames have been
          eliminated; and duplicates have been combined.  The  result-
          ing collection contains over 500 bugs.


          Three versions of the buglist are now  ready  for  distribu-
          tion:

          2-Liners:
               Two lines per bug, including a concise description, the
               affected   module,  the  submittor.  Approximately  55K
               bytes, it is  being  distributed  to  net.sources  con-
               currently with this announcement.

          All-but-Source:
               All material, except that all but the most inocuous  of
               source  material  has been removed to meet AT&T license
               restrictions.   Nearly  a  mega-byte,  this   will   be
               distributed  to  net.sources in several 50K byte pieces
               later this week.

               A paper listing or mag  tape  is  also  available,  see
               below.

               Please note that local  usenet  size  restrictions  may
               prevent   large   files   from  being  received  and/or
               retransmitted.  MT XINU will not dump this material  on
               the  net  a  second time; if your site has not received
               material of interest to you within a  reasonable  time,
               please send for a paper or tape copy.

          All-with-Source (FOR SOURCE LICENSEES ONLY):

               4.2 licensees who also  have  a  suitable  AT&T  source
               license  can obtain a tape containing all the material,
               including proposed source fixes where such were submit-
               ted.

               Once again, MT XINU has not evaluated, tested or passed
               judgment  on proposed fixes; all we have done is organ-
               ize the collection and eliminate obvious  irrelevancies
               and duplications.


          A free paper copy of the All-but-Source list can be obtained
          by sending mail to:
                  MT XINU
                  739 Allston Way
                  Berkeley CA 94710

                  attn: buglist

          or electronic mail to:

                  ucbvax!mtxinu!buglist

          (Be sure to include your US mail address!)

          For a tape, send a check for $110 or a  purchase  order  for
          $150  to  cover  MT  XINU's costs to the address given above
          (California orders add sales tax).  For the  All-with-Source
          list, mail us a request for the details of license verifica-
          tion at either of the above addresses.