Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jul 2011 12:24:41 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Jason Hellenthal <jhell@DataIX.net>
Cc:        "Andrey V. Elsukov" <ae@FreeBSD.org>, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, svn-src-stable-8@FreeBSD.org, svn-src-stable@FreeBSD.org
Subject:   Re: svn commit: r224464 - in stable/8/sys: geom/part sys
Message-ID:  <4E312AD9.3020703@FreeBSD.org>
In-Reply-To: <20110728024007.GB55550@DataIX.net>
References:  <201107270410.p6R4AXc3040342@svn.freebsd.org> <20110728024007.GB55550@DataIX.net>

next in thread | previous in thread | raw e-mail | index | archive | help
on 28/07/2011 05:40 Jason Hellenthal said the following:
> 
> 
> On Wed, Jul 27, 2011 at 04:10:33AM +0000, Andrey V. Elsukov wrote:
>> Author: ae Date: Wed Jul 27 04:10:32 2011 New Revision: 224464 URL:
>> http://svn.freebsd.org/changeset/base/224464
>> 
>> Log: MFC r223587: MS Windows NT+ uses 4 bytes at offset 0x1b8 in the MBR to
>> identify disk drive. The boot0cfg(8) utility preserves these 4 bytes when
>> it is writing bootcode to keep a multiboot ability. Change gpart's bootcode
>> method to keep DSN if it is not zero. Also do not allow writing bootcode
>> with size not equal to MBRSIZE.
>> 
>> PR:		kern/157819
>> 
>> Modified: stable/8/sys/geom/part/g_part_mbr.c stable/8/sys/sys/diskmbr.h 
>> Directory Properties: stable/8/sys/   (props changed) 
>> stable/8/sys/amd64/include/xen/   (props changed) 
>> stable/8/sys/cddl/contrib/opensolaris/   (props changed) 
>> stable/8/sys/contrib/dev/acpica/   (props changed) stable/8/sys/contrib/pf/
>> (props changed) stable/8/sys/geom/label/   (props changed)
>> 
>> Modified: stable/8/sys/geom/part/g_part_mbr.c 
>> ==============================================================================
>>
>> 
--- stable/8/sys/geom/part/g_part_mbr.c	Wed Jul 27 01:57:24 2011	(r224463)
>> +++ stable/8/sys/geom/part/g_part_mbr.c	Wed Jul 27 04:10:32 2011	(r224464) 
>> @@ -234,14 +234,16 @@ static int g_part_mbr_bootcode(struct g_part_table
>> *basetable, struct g_part_parms *gpp) { struct g_part_mbr_table *table; -
>> size_t codesz; +	uint32_t dsn; + +	if (gpp->gpp_codesize != MBRSIZE) +
>> return (ENODEV);
> 
> Is it known for an absolute fact that the size being written is always going
> to be the size of MBRSIZE ? never less ? wouldnt ">=" greater-than or equal
> make sense here ? though I would seriously doubt it needs to return on equal
> too as that could be written.
> 
>> 
>> -	codesz = DOSPARTOFF; table = (struct g_part_mbr_table *)basetable; -
>> bzero(table->mbr, codesz); -	codesz = MIN(codesz,  gpp->gpp_codesize); -	if
>> (codesz > 0) -		bcopy(gpp->gpp_codeptr, table->mbr, codesz); +	dsn =
>> *(uint32_t *)(table->mbr + DOSDSNOFF); +	bcopy(gpp->gpp_codeptr,
>> table->mbr, DOSPARTOFF); +	if (dsn != 0)
> 
> Shit happens... any case that the product might return less than 0 causing
> this to still fall through and process... ? ">" ?

Not with unsigned types :-)

>> +		*(uint32_t *)(table->mbr + DOSDSNOFF) = dsn; return (0); }
>> 
>> 
>> Modified: stable/8/sys/sys/diskmbr.h 
>> ==============================================================================
>>
>> 
--- stable/8/sys/sys/diskmbr.h	Wed Jul 27 01:57:24 2011	(r224463)
>> +++ stable/8/sys/sys/diskmbr.h	Wed Jul 27 04:10:32 2011	(r224464) @@ -36,6
>> +36,7 @@ #include <sys/ioccom.h>
>> 
>> #define	DOSBBSECTOR	0	/* DOS boot block relative sector number */ +#define
>> DOSDSNOFF	440	/* WinNT/2K/XP Drive Serial Number offset */ #define
>> DOSPARTOFF	446 #define	DOSPARTSIZE	16 #define	NDOSPART	4

-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E312AD9.3020703>