1. 23 8月, 2019 1 次提交
  2. 17 7月, 2019 1 次提交
    • H
      disk: efi: avoid unaligned pointer error · 06e921b1
      Heinrich Schuchardt 提交于
      When building with GCC 9.1 an error occurs:
      
      disk/part_efi.c: In function ‘gpt_verify_partitions’:
      disk/part_efi.c:737:49: error: taking address of packed member of
      ‘struct _gpt_entry’ may result in an unaligned pointer value
      [-Werror=address-of-packed-member]
        737 |   gpt_convert_efi_name_to_char(efi_str, gpt_e[i].partition_name,
            |                                         ~~~~~~~~^~~~~~~~~~~~~~~
      cc1: all warnings being treated as errors
      make[1]: *** [scripts/Makefile.build:279: disk/part_efi.o] Error 1
      make: *** [Makefile:1594: disk] Error 2
      
      Adjust gpt_convert_efi_name_to_char() to accept unaligned strings.
      Reported-by: NRamon Fried <rfried.dev@gmail.com>
      Signed-off-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
      06e921b1
  3. 07 7月, 2019 1 次提交
  4. 03 5月, 2019 2 次提交
    • E
      disk: efi: Fix memory leak on 'gpt verify' · 716f919d
      Eugeniu Rosca 提交于
      Below is what happens on R-Car H3ULCB-KF using clean U-Boot
      v2019.04-00810-g6aebc0d1 and r8a7795_ulcb_defconfig:
      
       => ### interrupt autoboot
       => gpt verify mmc 1
       No partition list provided - only basic check
       Verify GPT: success!
       => ### keep calling 'gpt verify mmc 1'
       => ### on 58th call, we are out of memory:
       => gpt verify mmc 1
       alloc_read_gpt_entries: ERROR: Can't allocate 0X4000 bytes for GPT Entries
       GPT: Failed to allocate memory for PTE
       gpt_verify_headers: *** ERROR: Invalid Backup GPT ***
       Verify GPT: error!
      
      This is caused by calling is_gpt_valid() twice (hence allocating pte
      also twice via alloc_read_gpt_entries()) while freeing pte only _once_
      in the caller of gpt_verify_headers(). Fix that by freeing the pte
      allocated and populated for primary GPT _before_ allocating and
      populating the pte for backup GPT. The latter will be freed by the
      caller of gpt_verify_headers().
      
      With the fix applied, the reproduction scenario [1-2] has been run
      hundreds of times in a loop w/o running into OOM.
      
      [1] gpt verify mmc 1
      [2] gpt verify mmc 1 $partitions
      
      Fixes: cef68bf9 ("gpt: part: Definition and declaration of GPT verification functions")
      Signed-off-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Reviewed-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
      716f919d
    • E
      disk: efi: Fix memory leak on 'gpt guid' · 1cfe9694
      Eugeniu Rosca 提交于
      Below is what happens on R-Car H3ULCB-KF using clean U-Boot
      v2019.04-00810-g6aebc0d1 and r8a7795_ulcb_defconfig:
      
       => ### interrupt autoboot
       => gpt guid mmc 1
       21200400-0804-0146-9dcc-a8c51255994f
       success!
       => ### keep calling 'gpt guid mmc 1'
       => ### on 59th call, we are out of memory:
       => gpt guid mmc 1
       alloc_read_gpt_entries: ERROR: Can't allocate 0X4000 bytes for GPT Entries
       GPT: Failed to allocate memory for PTE
       get_disk_guid: *** ERROR: Invalid GPT ***
       alloc_read_gpt_entries: ERROR: Can't allocate 0X4000 bytes for GPT Entries
       GPT: Failed to allocate memory for PTE
       get_disk_guid: *** ERROR: Invalid Backup GPT ***
       error!
      
      After some inspection, it looks like get_disk_guid(), added via v2017.09
      commit 73d6d18b ("GPT: add accessor function for disk GUID"),
      unlike other callers of is_gpt_valid(), doesn't free the memory pointed
      out by 'gpt_entry *gpt_pte'. The latter is allocated by is_gpt_valid()
      via alloc_read_gpt_entries().
      
      With the fix applied, the reproduction scenario has been run hundreds
      of times ('while true; do gpt guid mmc 1; done') w/o running into OOM.
      
      Fixes: 73d6d18b ("GPT: add accessor function for disk GUID")
      Signed-off-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Reviewed-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
      1cfe9694
  5. 18 1月, 2019 1 次提交
  6. 09 10月, 2018 1 次提交
  7. 11 9月, 2018 1 次提交
  8. 14 6月, 2018 1 次提交
    • H
      efi_loader: avoid initializer element is not constant · 44ab2d32
      Heinrich Schuchardt 提交于
      When building with -pedantic the current definition of EFI_GUID() causes
      an error 'initializer element is not constant'.
      
      Currently EFI_GUID() is used both as an anonymous constant and as an
      intializer. A conversion to efi_guid_t is not allowable when using
      EFI_GUID() as an initializer. But it is needed when using it as an
      anonymous constant.
      
      We should not use EFI_GUID() for anything but an initializer. So let's
      introduce a variable where needed and remove the conversion.
      Signed-off-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      44ab2d32
  9. 05 6月, 2018 1 次提交
    • S
      disk: efi: Correct backing up the MBR boot code · 955575c8
      Sam Protsenko 提交于
      In commit e163a931 ("cmd: gpt: backup boot code before writing MBR")
      there was added the procedure for storing old boot code when doing "gpt
      write". But instead of storing just backup code, the whole MBR was
      stored, and only specific fields were replaced further, keeping
      everything else intact. That's obviously not what we want.
      
      Fix the code to actually store only old boot code and zero out
      everything else. This fixes next testing case:
      
          => mmc write $loadaddr 0x0 0x7b
          => gpt write mmc 1 $partitions
      
      In case when $loadaddr address and further memory contains 0xff, the
      board was bricked (ROM-code probably didn't like partition entries that
      were clobbered with 0xff). With this patch applied, commands above don't
      brick the board.
      Signed-off-by: NSam Protsenko <semen.protsenko@linaro.org>
      Cc: Alejandro Hernandez <ajhernandez@ti.com>
      Tested-by: NAndy Shevchenko <andy.shevchenko@gmail.com>
      955575c8
  10. 07 5月, 2018 1 次提交
    • T
      SPDX: Convert all of our single license tags to Linux Kernel style · 83d290c5
      Tom Rini 提交于
      When U-Boot started using SPDX tags we were among the early adopters and
      there weren't a lot of other examples to borrow from.  So we picked the
      area of the file that usually had a full license text and replaced it
      with an appropriate SPDX-License-Identifier: entry.  Since then, the
      Linux Kernel has adopted SPDX tags and they place it as the very first
      line in a file (except where shebangs are used, then it's second line)
      and with slightly different comment styles than us.
      
      In part due to community overlap, in part due to better tag visibility
      and in part for other minor reasons, switch over to that style.
      
      This commit changes all instances where we have a single declared
      license in the tag as both the before and after are identical in tag
      contents.  There's also a few places where I found we did not have a tag
      and have introduced one.
      Signed-off-by: NTom Rini <trini@konsulko.com>
      83d290c5
  11. 09 2月, 2018 1 次提交
  12. 30 11月, 2017 1 次提交
  13. 06 11月, 2017 1 次提交
    • L
      gpt: Use cache aligned buffers for gpt_h and gpt_e · bb021013
      Lukasz Majewski 提交于
      Before this patch one could receive following errors when executing
      "gpt write" command on machine with cache enabled:
      
      display5 factory > gpt write mmc ${mmcdev} ${partitions}
      Writing GPT:
      CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
      CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
      CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
      CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
      success!
      
      To alleviate this problem - the calloc()s have been replaced with
      malloc_cache_aligned() and memset().
      
      After those changes the buffers are properly aligned (with both start
      address and size) to SoC cache line.
      Signed-off-by: NLukasz Majewski <lukma@denx.de>
      bb021013
  14. 24 10月, 2017 1 次提交
    • P
      disk: efi: correct the overlap check on GPT header and PTE · ae0e0228
      Patrick Delaunay 提交于
      the partition starting at 0x4400 is refused with overlap error:
        $> gpt write mmc 0 "name=test,start=0x4400,size=0"
        Writing GPT: Partition overlap
        error!
      
      even if the 0x4400 is the first available offset for LBA35 with default
      value:
      - MBR=LBA1
      - GPT header=LBA2
      - PTE= 32 LBAs (128 entry), 3 to 34
      
      And the command to have one partition for all the disk failed also :
        $> gpt write mmc 0 "name=test,size=0"
      
      After the patch :
      
        $> gpt write mmc 0 "name=test,size=0"
        Writing GPT: success!
        $> 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	0x01ce9fde	"test"
      	attrs:	0x0000000000000000
      	type:	ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
      	type:	data
      	guid:	b4b84b8a-04e3-4000-0036-aff5c9c495b1
      
      And 0x22 = 34 LBA => offset = 0x4400 is accepted as expected
      Reviewed-by: NŁukasz Majewski <lukma@denx.de>
      Tested-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NPatrick Delaunay <patrick.delaunay@st.com>
      ae0e0228
  15. 16 10月, 2017 1 次提交
  16. 04 10月, 2017 1 次提交
    • M
      treewide: replace with error() with pr_err() · 9b643e31
      Masahiro Yamada 提交于
      U-Boot widely uses error() as a bit noisier variant of printf().
      
      This macro causes name conflict with the following line in
      include/linux/compiler-gcc.h:
      
        # define __compiletime_error(message) __attribute__((error(message)))
      
      This prevents us from using __compiletime_error(), and makes it
      difficult to fully sync BUILD_BUG macros with Linux.  (Notice
      Linux's BUILD_BUG_ON_MSG is implemented by using compiletime_assert().)
      
      Let's convert error() into now treewide-available pr_err().
      
      Done with the help of Coccinelle, excluing tools/ directory.
      
      The semantic patch I used is as follows:
      
      // <smpl>
      @@@@
      -error
      +pr_err
       (...)
      // </smpl>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: NSimon Glass <sjg@chromium.org>
      [trini: Re-run Coccinelle]
      Signed-off-by: NTom Rini <trini@konsulko.com>
      9b643e31
  17. 20 9月, 2017 1 次提交
  18. 03 9月, 2017 4 次提交
  19. 04 8月, 2017 2 次提交
  20. 21 3月, 2017 1 次提交
    • P
      part_efi: support padding between the GPT header and partition entries · 02e43537
      Philipp Tomsich 提交于
      Some architectures require their SPL loader at a fixed address within
      the first 16KB of the disk. To avoid an overlap with the partition
      entries of the EFI partition table, the first safe offset (in bytes,
      from the start of the device) for the entries can be set through
      CONFIG_EFI_PARTITION_ENTRIES_OFF (via Kconfig)
      
      When formatting a device with an EFI partition table, we may need to
      leave a gap between the GPT header (always in LBA 1) and the partition
      entries. The GPT header already contains a field to specify the
      on-disk location, which has so far always been set to LBA 2. With this
      change, a configurable offset will be translated into a LBA address
      indicating where to put the entries.
      
      Now also allows an override via device-tree using a config-node (see
      doc/device-tree-bindings/config.txt for documentation).
      
      Tested (exporting an internal MMC formatted with this) against Linux,
      MacOS X and Windows.
      Signed-off-by: NPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
      Reviewed-by: NSimon Glass <sjg@chromium.org>
      [trini: __maybe_unused on config_offset to avoid warning]
      Signed-off-by: NTom Rini <trini@konsulko.com>
      02e43537
  21. 18 3月, 2017 1 次提交
  22. 09 2月, 2017 1 次提交
  23. 28 1月, 2017 2 次提交
  24. 02 10月, 2016 1 次提交
    • P
      disk: part: implement generic function part_get_info_by_name() · 87b8530f
      Petr Kulhavy 提交于
      So far partition search by name has been supported only on the EFI partition
      table. This patch extends the search to all partition tables.
      
      Rename part_get_info_efi_by_name() to part_get_info_by_name(), move it from
      part_efi.c into part.c and make it a generic function which traverses all part
      drivers and searches all partitions (in the order given by the linked list).
      
      For this a new variable struct part_driver.max_entries is added, which limits
      the number of partitions searched. For EFI this was GPT_ENTRY_NUMBERS.
      Similarly the limit is defined for DOS, ISO, MAC and AMIGA partition tables.
      Signed-off-by: NPetr Kulhavy <brain@jikos.cz>
      Reviewed-by: NTom Rini <trini@konsulko.com>
      Acked-by: NSteve Rae <steve.rae@raedomain.com>
      87b8530f
  25. 06 8月, 2016 1 次提交
  26. 26 7月, 2016 1 次提交
  27. 27 5月, 2016 1 次提交
    • P
      disk: part_efi: fix check of the max partition size · a5653867
      Patrick Delaunay 提交于
      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: NPatrick Delaunay <patrick.delaunay73@gmail.com>
      a5653867
  28. 23 3月, 2016 2 次提交
  29. 15 3月, 2016 5 次提交