Skip to content
  • Marek Behún's avatar
    api: fix a potential serious bug caused by undef CONFIG_SYS_64BIT_LBA · d32211ee
    Marek Behún authored and Tom Rini's avatar Tom Rini committed
    
    
    The api_public.h header file undefined macro CONFIG_SYS_64BIT_LBA.
    
    But api/api_storage.c includes this header before including part.h,
    causing the type of lbaint_t and subsequently the type signature of
    blk_dread() and blk_dwrite() functions to change from the rest of U-Boot
    (if CONFIG_SYS_64BIT_LBA is defined for the board).
    
    This is of course wrong, because the call to blk_dread() / blk_dwrite()
    will receive mangled arguments.
    
    Fix this by removing the undef of macro CONFIG_SYS_64BIT_LBA and instead
    make the immediate code do what it would do as if the macro was not
    defined.
    
    Add a FIXME to whoever is maintaining this code.
    
    CI managed to trigger this bug when compiling for lsxhl_defconfig, which
    has CONFIG_API selected. The compiler complained about blk_dwrite() and
    blk_dread() not matching original declarations:
    
      include/blk.h:280:15: warning: type of ‘blk_dwrite’ does not match
                                     original declaration
    				 [-Wlto-type-mismatch]
      280 | unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t st
          |               ^
      drivers/block/blk-uclass.c:456:15: note: type mismatch in parameter 2
      456 | unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t st
          |               ^
    
    Signed-off-by: default avatarMarek Behún <marek.behun@nic.cz>
    Reviewed-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    d32211ee