Subject: bin/26708: disklabel -wr deletes the bootcode from the netbsd partition
To: None <gnats-bugs@gnats.netbsd.org>
From: None <dsl@netbsd.org>
List: netbsd-bugs
Date: 08/18/2004 22:07:34
>Number:         26708
>Category:       bin
>Synopsis:       disklabel -wr deletes the bootcode from the netbsd partition
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Aug 18 21:07:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     David Laight
>Release:        NetBSD 2.0
>Organization:
	netbsd
>Environment:
	Current as of 18 Aug 2004
Architecture: i386
Machine: i386
>Description:
	disklabel is compiled with SAVEBOOTAREA, the intention of this code
	is to preserve the disk's boot code.
	However the effect is entirely different!
	The SAVEBOOTAREA code reads 8k from the sector 0, and zeros out
	the part that (is expected to) contain the label.
	The new label is then written into the space, and the entire 8k
	written to the beginning of partition 2.
	The effect is to replace the partition boot code of whichever
	partition the user said was the mbr (type 169) partition with the
	mbr boot code.

	When you try to boot that partition, the bootselect code just
	re-reads another copy of the mbr code - and redisplays the menu.
>How-To-Repeat:
	Run sysinst and install multiple copies of netbsd.
>Fix:
	Simplify disklabel, and rework its logic so that the write is
	done as a 'read modify write'.
	The disklabel should also be written to all of the NetBSD mbr
	partition that exist onthe disk.
	Maybe just fix it to find the old sectors using the same rules
	as are used to write the label.
>Release-Note:
>Audit-Trail:
>Unformatted: