• Patrick Delaunay's avatar
    disk: part_efi: fix check of the max partition size · a5653867
    Patrick Delaunay authored
    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@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: 's avatarPatrick Delaunay <patrick.delaunay73@gmail.com>
    a5653867
Name
Last commit
Last update
..
Makefile Loading commit data...
part.c Loading commit data...
part_amiga.c Loading commit data...
part_amiga.h Loading commit data...
part_dos.c Loading commit data...
part_dos.h Loading commit data...
part_efi.c Loading commit data...
part_iso.c Loading commit data...
part_iso.h Loading commit data...
part_mac.c Loading commit data...
part_mac.h Loading commit data...