api: fix a potential serious bug caused by undef CONFIG_SYS_64BIT_LBA
authorMarek Behún <marek.behun@nic.cz>
Sat, 6 Mar 2021 22:43:22 +0000 (23:43 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 19 Mar 2021 14:36:06 +0000 (10:36 -0400)
commitd32211ee95a2fd4a322599346e572fc91c1ba9b5
tree852dd527a9fcbd93d85037d61abcb504fff5d579
parentccc58b4d324b768d1d629890a218ab32cde5b378
api: fix a potential serious bug caused by undef CONFIG_SYS_64BIT_LBA

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: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
include/api_public.h