Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Philipp Tomsich's avatar
    c8e1ca3e
    tools: omapimage: fix corner-case in byteswap path · c8e1ca3e
    Philipp Tomsich authored
    
    Since commit 2614a208 ("common: command: tempory buffer should
    have size of command line buf"), there have been consistent Travis CI
    failures on my builds (interestingly not for Tom, even though building
    the same commit id) due to a SEGV in building the byteswapped
    omapimage:
         	    arm: pcm051_rev3
         make[2]: *** [MLO.byteswap] Error 139
         	      	  		       ^^^ error code for a SEGV
    
    Turns out that the word-based byte-swapping loop in omapimage.c is to
    blame. With the loop condition
           while (swapped <= (sbuf->st_size / sizeof(uint32_t)))
    there had been one-too-many iterations for all file sizes divisible by
    the sizeof(uint32_t).  I.e. we had 1 iteration for 0 bytes (and also 1
    through 3 bytes) and 2 iterations at 4 bytes... clearly overshooting
    on 0 and 4 bytes.
    
    This commit fixes the calculation of an up-rounded word-count and
    makes sure to keep the zero-based loop-counter below the number of
    words to be processed.
    
    References: 2614a208 ("common: command: tempory buffer should have size of command line buf")
    Fixes: 79b9ebb7 ("omapimage: Add support for byteswapped SPI images")
    Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
    Reviewed-by: default avatarMartin Elshuber <martin.elshuber@theobroma-systems.com>
    c8e1ca3e
    History
    tools: omapimage: fix corner-case in byteswap path
    Philipp Tomsich authored
    
    Since commit 2614a208 ("common: command: tempory buffer should
    have size of command line buf"), there have been consistent Travis CI
    failures on my builds (interestingly not for Tom, even though building
    the same commit id) due to a SEGV in building the byteswapped
    omapimage:
         	    arm: pcm051_rev3
         make[2]: *** [MLO.byteswap] Error 139
         	      	  		       ^^^ error code for a SEGV
    
    Turns out that the word-based byte-swapping loop in omapimage.c is to
    blame. With the loop condition
           while (swapped <= (sbuf->st_size / sizeof(uint32_t)))
    there had been one-too-many iterations for all file sizes divisible by
    the sizeof(uint32_t).  I.e. we had 1 iteration for 0 bytes (and also 1
    through 3 bytes) and 2 iterations at 4 bytes... clearly overshooting
    on 0 and 4 bytes.
    
    This commit fixes the calculation of an up-rounded word-count and
    makes sure to keep the zero-based loop-counter below the number of
    words to be processed.
    
    References: 2614a208 ("common: command: tempory buffer should have size of command line buf")
    Fixes: 79b9ebb7 ("omapimage: Add support for byteswapped SPI images")
    Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
    Reviewed-by: default avatarMartin Elshuber <martin.elshuber@theobroma-systems.com>