BUG: 9.0 stage 2 boot (/boot/boot)

rank1seeker at gmail.com rank1seeker at gmail.com
Fri Feb 24 14:05:58 UTC 2012


----- Original Message -----
From: John Baldwin <jhb at freebsd.org>
To: freebsd-hackers at freebsd.org
Cc: rank1seeker at gmail.com, Roman Divacky <rdivacky at freebsd.org>
Date: Thu, 23 Feb 2012 08:02:04 -0500
Subject: Re: BUG: 9.0 stage 2 boot (/boot/boot)

> On Friday, February 17, 2012 2:43:55 am rank1seeker at gmail.com wrote:
> > Anyway, after upgrading to 9.0, my USB stick, when created, started to hang 
> at stage 2 boot.
> > I have a custom setup, where BSD label 'a', has a content of /boot/*
> > So when 'a' is being hit by stage 2 boot, there is boot.config waiting for 
> it.
> > After it reads it and displays it's content, it echos 'No' and hangs.
> > 
> > I stare at it and can't believe as boot.config's information is correct!
> > I hit '?' and it list all files in 'a'.
> > Then I simply RE-type what is displayed on screen (content of boot.config -> 
> path to loader)
> > And loader kicks in!
> > 
> > I do this a few times more and EACH time I have to RE-type correct info!
> > Tested on other machine, same thing.
> > 
> > However, this same custom layout works for HDD's, but NOT for USB stick.
> > 
> > I've extracted binary installs of 8.2 and 9.0 R:
> > MD5 (8_boot) = adb1e84e96bd434e51cafaaa0ef22584
> > MD5 (9_boot) = 40f3f6403ebd5e131259d1336b4b50ad
> > 
> > Then:
> > # gpart bootcode -b 8_boot da0s2
> > And sudenly that USB stick boots, without ANY other change!
> > Just an "old" stage 2 boot code, from R8 was enough.
> 
> Looks like it is thinking that 'kname' is empty.  Ah, I think Roman broke this
> in 219186:
> 
>  @@ -474,11 +461,7 @@ parse()
>  			     ? DRV_HARD : 0) + drv;
>  		dsk_meta = 0;
>  	    }
> -	    if ((i = ep - arg)) {
> -		if ((size_t)i >= sizeof(kname))
> -		    return -1;
> -		memcpy(kname, arg, i + 1);
> -	    }
> +            kname = arg;
>  	}
>  	arg = p;
>      }
> 
> Before it only set kname if it wasn't an empty string.  Now it always sets
> kname.  Try this change:
> 
> Index: boot2.c
> ===================================================================
> --- boot2.c	(revision 231983)
> +++ boot2.c	(working copy)
> @@ -457,7 +457,8 @@ parse()
>  			     ? DRV_HARD : 0) + drv;
>  		dsk_meta = 0;
>  	    }
> -            kname = arg;
> +	    if (*arg != '\0')
> +		    kname = arg;
>  	}
>  	arg = p;
>      }
> 
> -- 
> John Baldwin
> 


It still doesn't work!

And please, next time attach patch in a file (unified format), so I would  have a less hassle (to avoid manuall patch application)
Thx in advance.


Domagoj Smolčić



More information about the freebsd-hackers mailing list