kern/66248: [panic] bootloader is confused by booting from USB
flash, trashes main drives boot block
Hans Petter Selasky
hselasky at c2i.net
Mon Nov 8 09:20:21 PST 2004
The following reply was made to PR kern/66248; it has been noted by GNATS.
From: Hans Petter Selasky <hselasky at c2i.net>
To: jhb at freebsd.org, freebsd-gnats-submit at freebsd.org, bremner at unb.ca
Cc:
Subject: Re: kern/66248: [panic] bootloader is confused by booting from USB flash, trashes main drives boot block
Date: Mon, 8 Nov 2004 18:24:03 +0100
--SUOF0GtieIMvvwua
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi,
Attached patch for /src/sys/boot/i386/boot0/boot0.S closes kern/66248
Apply using: cat boot0.S.diff | patch -N -l
When the boot0 boot-manager is used on a floppy or USB drive, the floppy's or
USB's boot-sector gets written to the hdd!
Solution: Only update the boot-sector when there is a valid drive number or
the drive number is set manually.
To make the patch fit into the code I had to disable the "beep-signal".
Yours
-HPS
--SUOF0GtieIMvvwua
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="boot0.S.diff"
*** boot0.S.ref Wed Oct 20 17:24:19 2004
--- boot0.S Wed Oct 20 17:30:56 2004
***************
*** 103,112 ****
* Check what flags were loaded with us, specifically, Use a predefined Drive.
* If what the bios gives us is bad, use the '0' in the block instead, as well.
*/
! testb $0x20,_FLAGS(%bp) # Set number drive?
jnz main.1 # Yes
testb %dl,%dl # Drive number valid?
js main.2 # Possibly (0x80 set)
main.1: movb _SETDRV(%bp),%dl # Drive number to use
/*
* Whatever we decided to use, now store it into the fake
--- 103,117 ----
* Check what flags were loaded with us, specifically, Use a predefined Drive.
* If what the bios gives us is bad, use the '0' in the block instead, as well.
*/
! testb $0x20,_FLAGS(%bp) # Set drive number?
jnz main.1 # Yes
testb %dl,%dl # Drive number valid?
js main.2 # Possibly (0x80 set)
+ /*
+ * Only update the boot-sector when there is a valid drive number or
+ * the drive number is set manually.
+ */
+ orb $0x40,_FLAGS(%bp) # Disable updates
main.1: movb _SETDRV(%bp),%dl # Drive number to use
/*
* Whatever we decided to use, now store it into the fake
***************
*** 203,210 ****
/*
* Start of input loop. Beep and take note of time
*/
! main.10: movb $ASCII_BEL,%al # Signal
callw putchr # beep!
xorb %ah,%ah # BIOS: Get
int $0x1a # system time
movw %dx,%di # Ticks when
--- 208,218 ----
/*
* Start of input loop. Beep and take note of time
*/
! main.10:
! #ifdef BEL
! movb $ASCII_BEL,%al # Signal
callw putchr # beep!
+ #endif
xorb %ah,%ah # BIOS: Get
int $0x1a # system time
movw %dx,%di # Ticks when
--SUOF0GtieIMvvwua--
More information about the freebsd-usb
mailing list