[U-Boot] [U-Boot, v1] disk: part_efi: fix check of the max partition size

Tom Rini trini at konsulko.com
Mon May 30 19:56:21 CEST 2016


On Mon, May 02, 2016 at 02:43:33PM +0200, Patrick Delaunay wrote:

> the last value acceptable value for offset is last_usable_lba + 1
> and not last_usable_lba - 1
> 
> 
> issue found with SDCARD partition commands on u-boot 2015.10
> but this part of code don't change
> 
> 1- create GPT partion on all the card
>   > gpt write mmc 0 name=test,start=0,size=0
>   > part list mmc 0
> 
> Partition Map for MMC device 0  --   Partition Type: EFI
> 
> Part      Start LBA          End LBA                       Name
>             Attributes
>             Type GUID
>             Partition GUID
>   1        0x00000022       0x003a9fde       "test"
>             attrs:     0x0000000000000000
>             type:     ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>             type:     data
>             guid:     b710eb04-45b9-e94a-8d0b-21458d596f54
> 
> => Start = 0x22*512 = 0x4400
> => Size = (0x003a9fde-0x22+1) * 512  = 0x753F7A00
> 
> 2- try to recreate the same partition with the next command
>    (block size:512 bytes = 0x200)
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7A00
>     Writing GPT: Partitions layout exceds disk size
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7800
>     Writing GPT: Partitions layout exceds disk size
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7600
>     Writing GPT: success!
> 
> Partition Map for MMC device 0  --   Partition Type: EFI
> 
> Part      Start LBA          End LBA                       Name
>             Attributes
>             Type GUID
>             Partition GUID
>   1        0x00000022       0x003a9fdc       "test"
>             attrs:     0x0000000000000000
>             type:     ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>             type:     data
>             guid:     36ec30ef-7ca4-cd48-97cd-ea9fb95185d0
> 
> the max LBA when the size is indicated (0x003a9fdc) is lower than
> when u-boot compute the max allowed value with size=0 (0x003a9fde)
> 
> in the code :
> 
>      /* partition ending lba */
>      if ((i == parts - 1) && (partitions[i].size == 0))
> 		/* extend the last partition to maximuim */
> 		gpt_e[i].ending_lba = gpt_h->last_usable_lba;
>      else
> 		gpt_e[i].ending_lba = cpu_to_le64(offset - 1);
> 
> so offset = gpt_h->last_usable_lba + 1 is acceptable !
> but the test (offset >= last_usable_lba) cause the error
> 
> END
> 
> Signed-off-by: Patrick Delaunay <patrick.delaunay73 at gmail.com>disk: part_efi: fix check of the max partition size
> the last value acceptable value for offset is (last_usable_lba + 1)
> and not (last_usable_lba - 1)
> 
> 
> issue found with SDCARD partition commands on u-boot 2015.10
> but this part of code don't change
> 
> 1- I create GPT partion on all the card (start and size undefined)
> 
>   > gpt write mmc 0 name=test,start=0,size=0
>   > part list mmc 0
> 
> Partition Map for MMC device 0  --   Partition Type: EFI
> 
> Part      Start LBA          End LBA                       Name
>             Attributes
>             Type GUID
>             Partition GUID
>   1        0x00000022       0x003a9fde       "test"
>             attrs:     0x0000000000000000
>             type:     ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>             type:     data
>             guid:     b710eb04-45b9-e94a-8d0b-21458d596f54
> 
> => Start = 0x22*512 = 0x4400
> => Size = (0x003a9fde-0x22+1) * 512  = 0x753F7A00
> 
> 2- I try to recreate the same partition with the command gpt write
>    and with start and size values (block size:512 bytes = 0x200)
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7A00
>     Writing GPT: Partitions layout exceds disk size
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7800
>     Writing GPT: Partitions layout exceds disk size
> 
>   > gpt write mmc 0 name=test,start=0x4400,size=0x753F7600
>     Writing GPT: success!
> 
>   I check the partition created :
> 
>   > part list mmc 0
> 
> Partition Map for MMC device 0  --   Partition Type: EFI
> 
> Part      Start LBA          End LBA                       Name
>             Attributes
>             Type GUID
>             Partition GUID
>   1        0x00000022       0x003a9fdc       "test"
>             attrs:     0x0000000000000000
>             type:     ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>             type:     data
>             guid:     36ec30ef-7ca4-cd48-97cd-ea9fb95185d0
> 
> => but the max LBA when the size is indicated (0x003a9fdc) is lower than
>    when u-boot compute the max allowed value with size=0 (0x003a9fde)
> 
> 3- in the code, just after my patch, line 446
> 
>      /* partition ending lba */
>      if ((i == parts - 1) && (partitions[i].size == 0))
> 		/* extend the last partition to maximuim */
> 		gpt_e[i].ending_lba = gpt_h->last_usable_lba;
>      else
> 		gpt_e[i].ending_lba = cpu_to_le64(offset - 1);
> 
>   so offset = gpt_h->last_usable_lba + 1 is acceptable !
>   (it the value used when size is 0)
> 
>   but today the test (offset >= last_usable_lba) cause the error
>   my patch only solve this issue
> 
> END
> 
> Signed-off-by: Patrick Delaunay <patrick.delaunay73 at gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160530/08ff5e8d/attachment.sig>


More information about the U-Boot mailing list