svn commit: r335254 - in head/stand/i386: libi386 zfsboot

O. Hartmann ohartmann at walstatt.org
Sun Jun 17 11:03:58 UTC 2018


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Am Sat, 16 Jun 2018 15:16:03 +0000 (UTC)
Allan Jude <allanjude at FreeBSD.org> schrieb:

> Author: allanjude
> Date: Sat Jun 16 15:16:02 2018
> New Revision: 335254
> URL: https://svnweb.freebsd.org/changeset/base/335254
> 
> Log:
>   Avoid reading past the end of the disk in zfsboot.c and biosdisk.c
>   
>   The GELI boot code rounds reads up to 4k, since the encrypted sectors are
>   4k, and must be decrypted as a unit. With oddball sized disks (almost
>   always virtual), this can lead to reading past the end of the disk.
>   
>   Reviewed by:	imp, tsoome
>   Sponsored by:	Klara Systems
>   Differential Revision:	https://reviews.freebsd.org/D15844
> 
> Modified:
>   head/stand/i386/libi386/biosdisk.c
>   head/stand/i386/zfsboot/zfsboot.c
> 
> Modified: head/stand/i386/libi386/biosdisk.c
> ==============================================================================
> --- head/stand/i386/libi386/biosdisk.c	Sat Jun 16 15:05:05 2018	(r335253)
> +++ head/stand/i386/libi386/biosdisk.c	Sat Jun 16 15:16:02 2018	(r335254)
> @@ -882,6 +882,12 @@ bd_read(struct disk_devdesc *dev, daddr_t dblk, int bl
>  			}
>  		}
>  
> +		if (alignlba + alignblks > BD(dev).bd_sectors) {
> +			DEBUG("Shorted read at %llu from %d to %llu blocks",
> +			    alignlba, alignblks, BD(dev).bd_sectors - alignlba);
> +			alignblks = BD(dev).bd_sectors - alignlba;
> +		}
> +
>  		err = bd_io(dev, alignlba, alignblks, tmpbuf, 0);
>  		if (err)
>  			return (err);
> 
> Modified: head/stand/i386/zfsboot/zfsboot.c
> ==============================================================================
> --- head/stand/i386/zfsboot/zfsboot.c	Sat Jun 16 15:05:05 2018	(r335253)
> +++ head/stand/i386/zfsboot/zfsboot.c	Sat Jun 16 15:16:02 2018	(r335254)
> @@ -209,6 +209,12 @@ vdev_read(void *xvdev, void *priv, off_t off, void *bu
>  		alignnb = roundup2(nb * DEV_BSIZE + diff, DEV_GELIBOOT_BSIZE)
>  		    / DEV_BSIZE;
>  
> +		if (dsk->size > 0 && alignlba + alignnb > dsk->size + dsk->start) {
> +			printf("Shortening read at %lld from %d to %lld\n", alignlba,
> +			    alignnb, (dsk->size + dsk->start) - alignlba);
> +			alignnb = (dsk->size + dsk->start) - alignlba;
> +		}
> +
>  		if (drvread(dsk, dmadat->rdbuf, alignlba, alignnb))
>  			return -1;
>  #ifdef LOADER_GELI_SUPPORT
> @@ -694,7 +700,7 @@ main(void)
>      dsk->slice = *(uint8_t *)PTOV(ARGS + 1) + 1;
>      dsk->part = 0;
>      dsk->start = 0;
> -    dsk->size = 0;
> +    dsk->size = drvsize_ext(dsk);
>  
>      bootinfo.bi_version = BOOTINFO_VERSION;
>      bootinfo.bi_size = sizeof(bootinfo);
> @@ -745,7 +751,7 @@ main(void)
>  	dsk->slice = 0;
>  	dsk->part = 0;
>  	dsk->start = 0;
> -	dsk->size = 0;
> +	dsk->size = drvsize_ext(dsk);
>  	probe_drive(dsk);
>      }
>  
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"

Hello Allan,

are there any chances that these changes to "stand" have influences (in a bad way)
booting off AMD64 GPT/MBR disks?

I realised that CURRENT r335222 from Friday, 10th June 2018 booted without problems
(NanoBSD, slightly modified to boot off GPT/UEFI partitions, but in general a simple
"gpart bootcode -b pmbr -p /boot/gptboot -i 2 mmcsd0" preparation of a dd'd image).
Another try with recent r335282 on a APU 2C4, freshly build NanoBSD, fails to boot
firststage: the (most recent) SEABios stopps for ever at telling "Booting from hard
disk"; were usually a carret starts to spinn there is vast emptyness. Preparing the boot
partition with an older bootcode on that very same SD card via "gpart bootcode -b pmbr
- -p /boot/gptboot -i 2 mmcsd0" with an older booted image of CURRENT has solved the
problem. The layout of the SD card is as follows, just for the record:

#: gpart show mmcsd0
=>      40  60751792  mmcsd0  GPT  (29G)
        40      1024       2  freebsd-boot  (512K)
      1064   2205944       3  freebsd-ufs  (1.1G)
   2207008   2210127       4  freebsd-ufs  (1.1G)
   4417135   1048576       5  freebsd-ufs  (512M)
   5465711  55286121          - free -  (26G)

Kind regards,

oh

- -- 
O. Hartmann

Ich widerspreche der Nutzung oder Übermittlung meiner Daten für
Werbezwecke oder für die Markt- oder Meinungsforschung (§ 28 Abs. 4 BDSG).
-----BEGIN PGP SIGNATURE-----

iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWyZADgAKCRDS528fyFhY
lIQNAfwOt0In9GkuIamrlvLOpyXJas4h0soqv/39GQYrmeP7eB1+c4fTdmIbBtsG
LQH6715pdXc/AO8Ra6JOygu8lzniAgCFaufuLGIHAamNXD60GvpeRLrxVUdR6H14
Rq5k9hsrAzkH0mO0UGPrjwn6RXXS+7cIHa0hYT1GgXF2VtqrNDcS
=8uo4
-----END PGP SIGNATURE-----


More information about the svn-src-head mailing list