Subject: Re: port-i386/7608: i386 1.4 sysinst upgrade fall down go BOOM!
To: None <>
From: Chris G. Demetriou <>
List: netbsd-bugs
Date: 06/18/1999 01:06:24 writes:
> 	sysinst blew up (Floating Point Exception, core dump) after
> 	installing the installation binaries on the hard disk and running
> 	installboot.  I ran sysinst with logging and scripting turned
> 	on, and the last thing in the script was:

I investigated this some more.

The problem is trivially reproducable (if you have a disk to nuke 8-):

	* boot the 1.3.2 install floppy, install NetBSD.
	  standard + x, whole disk.  have it clobber the disk.
	  when it gets to the point of trying to install sets,

	* boot the 1.4 install floppy, upgrade.  follow the prompts,

I dug into the problem some more, and found that when writing the
upgraded MBR, convert_mbr_chs() was called with cyl == head == sec ==
0.  Since these arguments' values come from globals which are
initialized when the BIOS geometry is figured in md_bios_info(), it
would seem that md_bios_info() should be being called but isn't.

Unfortunately, I'm not really familiar enough with the way this should
work to know where it should be called.  (However, this doesn't sound
like a configuration-specific bug...  was the upgrade code _ever_
tested by the people hacking on it?!)

Things which I noticed which also caused me concern:

in md_upgrade_mbrtype(), read_mbr() is called.  If an error occurs
md_upgrade_mbrtype gives up (but doesn't signal an error -- should it
be able to?  probably it should be _able_ to, if not for this case
then for the case where write_mbr fails).  However, if no error occurs
bu the MBR is not actually valid, it continues merrily along.  It's
not clear to me that this is 'right'.

in md_get_info(), the return value from read_mbr() is ignored
completely, but valid_mbr() is checked...  This seems like it might be
OK, but consistency and carefulness are better than the lack

Chris Demetriou - -
Disclaimer: Not speaking for NetBSD, just expressing my own opinion.