On Tue, 2017-04-18 at 18:07 +0000, Toomas Soome wrote:
> Author: tsoome
> Date: Tue Apr 18 18:07:54 2017
> New Revision: 317097
> URL: https://svnweb.freebsd.org/changeset/base/317097
> 
> Log:
>   loader: F_READ/F_WRITE should be checked against masked flag
>   
>   The work to make it possible to avoid bcache via using F_NORA
> modifier did
>   miss the fact that not all loader platforms are using the bcache,
> and so
>   it is possible the modifier is not cleared, as bcache strategy
> function is
>   not used.
>   
>   For fix, we make sure the checks are dont with masked flag.
>   
>   This patch does fix boot for platforms which do not use bcache.
>   
>   Reported by:        emaste
>   Reviewed by:        emaste
>   Differential Revision:      https://reviews.freebsd.org/D10422
> 

Now the boot fails on arm with:

Found U-Boot device: disk
  Checking unit=0 slice=<auto> partition=<auto>...disk0: real size != size

-- Ian

> Modified:
>   head/sys/boot/common/md.c
>   head/sys/boot/efi/libefi/efipart.c
>   head/sys/boot/i386/libi386/bioscd.c
>   head/sys/boot/i386/libi386/biosdisk.c
>   head/sys/boot/mips/beri/loader/beri_disk_cfi.c
>   head/sys/boot/mips/beri/loader/beri_disk_sdcard.c
>   head/sys/boot/powerpc/ps3/ps3cdrom.c
>   head/sys/boot/powerpc/ps3/ps3disk.c
>   head/sys/boot/uboot/lib/disk.c
>   head/sys/boot/usb/storage/umass_loader.c
>   head/sys/boot/userboot/userboot/userboot_disk.c
> 
> Modified: head/sys/boot/common/md.c
> =====================================================================
> =========
> --- head/sys/boot/common/md.c Tue Apr 18 17:39:20 2017        
> (r317096)
> +++ head/sys/boot/common/md.c Tue Apr 18 18:07:54 2017        
> (r317097)
> @@ -106,7 +106,7 @@ md_strategy(void *devdata, int rw, daddr
>       if (rsize != NULL)
>               *rsize = size;
>  
> -     switch (rw) {
> +     switch (rw & F_MASK) {
>       case F_READ:
>               bcopy(md_image.start + ofs, buf, size);
>               return (0);
> 
> Modified: head/sys/boot/efi/libefi/efipart.c
> =====================================================================
> =========
> --- head/sys/boot/efi/libefi/efipart.c        Tue Apr 18 17:39:20
> 2017  (r317096)
> +++ head/sys/boot/efi/libefi/efipart.c        Tue Apr 18 18:07:54
> 2017  (r317097)
> @@ -819,7 +819,7 @@ efipart_readwrite(EFI_BLOCK_IO *blkio, i
>       if ((blk + nblks - 1) > blkio->Media->LastBlock)
>               return (EIO);
>  
> -     switch (rw) {
> +     switch (rw & F_MASK) {
>       case F_READ:
>               status = blkio->ReadBlocks(blkio, blkio->Media-
> >MediaId, blk,
>                   nblks * blkio->Media->BlockSize, buf);
> 
> Modified: head/sys/boot/i386/libi386/bioscd.c
> =====================================================================
> =========
> --- head/sys/boot/i386/libi386/bioscd.c       Tue Apr 18 17:39:20
> 2017  (r317096)
> +++ head/sys/boot/i386/libi386/bioscd.c       Tue Apr 18 18:07:54
> 2017  (r317097)
> @@ -268,7 +268,7 @@ bc_realstrategy(void *devdata, int rw, d
>               return (EINVAL);
>  #endif
>  
> -     if (rw != F_READ)
> +     if ((rw & F_MASK) != F_READ)
>               return(EROFS);
>       dev = (struct i386_devdesc *)devdata;
>       unit = dev->d_unit;
> 
> Modified: head/sys/boot/i386/libi386/biosdisk.c
> =====================================================================
> =========
> --- head/sys/boot/i386/libi386/biosdisk.c     Tue Apr 18 17:39:20
> 2017  (r317096)
> +++ head/sys/boot/i386/libi386/biosdisk.c     Tue Apr 18 18:07:54
> 2017  (r317097)
> @@ -618,7 +618,7 @@ bd_realstrategy(void *devdata, int rw, d
>       DEBUG("short read %d", blks);
>      }
>  
> -    switch(rw){
> +    switch (rw & F_MASK) {
>      case F_READ:
>       DEBUG("read %d from %lld to %p", blks, dblk, buf);
>  
> 
> Modified: head/sys/boot/mips/beri/loader/beri_disk_cfi.c
> =====================================================================
> =========
> --- head/sys/boot/mips/beri/loader/beri_disk_cfi.c    Tue Apr 18
> 17:39:20 2017 (r317096)
> +++ head/sys/boot/mips/beri/loader/beri_disk_cfi.c    Tue Apr 18
> 18:07:54 2017 (r317097)
> @@ -73,6 +73,7 @@ beri_cfi_disk_strategy(void *devdata, in
>  {
>       int error;
>  
> +     flag &= F_MASK;
>       if (flag == F_WRITE)
>               return (EROFS);
>       if (flag != F_READ)
> 
> Modified: head/sys/boot/mips/beri/loader/beri_disk_sdcard.c
> =====================================================================
> =========
> --- head/sys/boot/mips/beri/loader/beri_disk_sdcard.c Tue Apr
> 18 17:39:20 2017      (r317096)
> +++ head/sys/boot/mips/beri/loader/beri_disk_sdcard.c Tue Apr
> 18 18:07:54 2017      (r317097)
> @@ -73,6 +73,7 @@ beri_sdcard_disk_strategy(void *devdata,
>  {
>       int error;
>  
> +     flag &= F_MASK;
>       if (flag == F_WRITE)
>               return (EROFS);
>       if (flag != F_READ)
> 
> Modified: head/sys/boot/powerpc/ps3/ps3cdrom.c
> =====================================================================
> =========
> --- head/sys/boot/powerpc/ps3/ps3cdrom.c      Tue Apr 18 17:39:20
> 2017  (r317096)
> +++ head/sys/boot/powerpc/ps3/ps3cdrom.c      Tue Apr 18 18:07:54
> 2017  (r317097)
> @@ -83,6 +83,7 @@ static int ps3cdrom_strategy(void *devda
>  
>       DEBUG("d_unit=%u dblk=%llu size=%u", dev->d_unit, dblk,
> size);
>  
> +     flag &= F_MASK;
>       if (flag != F_READ) {
>               dev_printf(dev, "write operation is not
> supported!");
>               return EROFS;
> 
> Modified: head/sys/boot/powerpc/ps3/ps3disk.c
> =====================================================================
> =========
> --- head/sys/boot/powerpc/ps3/ps3disk.c       Tue Apr 18 17:39:20
> 2017  (r317096)
> +++ head/sys/boot/powerpc/ps3/ps3disk.c       Tue Apr 18 18:07:54
> 2017  (r317097)
> @@ -115,6 +115,7 @@ static int ps3disk_strategy(void *devdat
>       struct open_dev *od = (struct open_dev *) dev->d_disk.data;
>       int err;
>  
> +     flag &= F_MASK;
>       if (flag != F_READ) {
>               dev_printf(dev, "write operation is not
> supported!\n");
>               return EROFS;
> 
> Modified: head/sys/boot/uboot/lib/disk.c
> =====================================================================
> =========
> --- head/sys/boot/uboot/lib/disk.c    Tue Apr 18 17:39:20 2017        
> (r317096)
> +++ head/sys/boot/uboot/lib/disk.c    Tue Apr 18 18:07:54 2017        
> (r317097)
> @@ -149,6 +149,7 @@ stor_strategy(void *devdata, int rw, dad
>       daddr_t bcount;
>       int err;
>  
> +     rw &= F_MASK;
>       if (rw != F_READ) {
>               stor_printf("write attempt, operation not
> supported!\n");
>               return (EROFS);
> 
> Modified: head/sys/boot/usb/storage/umass_loader.c
> =====================================================================
> =========
> --- head/sys/boot/usb/storage/umass_loader.c  Tue Apr 18
> 17:39:20 2017 (r317096)
> +++ head/sys/boot/usb/storage/umass_loader.c  Tue Apr 18
> 18:07:54 2017 (r317097)
> @@ -92,6 +92,7 @@ umass_disk_strategy(void *devdata, int f
>       if (rsizep != NULL)
>               *rsizep = 0;
>  
> +     flag &= F_MASK;
>       if (flag == F_WRITE) {
>               if (usb_msc_write_10(umass_uaa.device, 0, dblk, size
> >> 9, buf) != 0)
>                       return (EINVAL);
> 
> Modified: head/sys/boot/userboot/userboot/userboot_disk.c
> =====================================================================
> =========
> --- head/sys/boot/userboot/userboot/userboot_disk.c   Tue Apr 18
> 17:39:20 2017 (r317096)
> +++ head/sys/boot/userboot/userboot/userboot_disk.c   Tue Apr 18
> 18:07:54 2017 (r317097)
> @@ -211,6 +211,7 @@ userdisk_realstrategy(void *devdata, int
>       size_t          resid;
>       int             rc;
>  
> +     rw &= F_MASK;
>       if (rw == F_WRITE)
>               return (EROFS);
>       if (rw != F_READ)
> 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to