The data-offset, data-position and data-size FIT properties are
stored as 32-bit unsigned values (fdt32_t), but the accessors
fit_image_get_data_offset(), fit_image_get_data_position() and
fit_image_get_data_size() return them through a signed int.

Switch the accessors and their callers to u32. This removes the
special-processing of "negative" values in fit_image_get_data().

Signed-off-by: Anton Ivanov <[email protected]>
---
 boot/image-fit.c               | 29 ++++++++++-------------------
 common/spl/spl_fit.c           |  4 ++--
 common/splash_source.c         |  2 +-
 drivers/fpga/socfpga_arria10.c |  3 ++-
 include/image.h                |  6 +++---
 test/py/tests/test_vboot.py    |  6 +-----
 6 files changed, 19 insertions(+), 31 deletions(-)

diff --git a/boot/image-fit.c b/boot/image-fit.c
index ef90c5abd18..26e9323da06 100644
--- a/boot/image-fit.c
+++ b/boot/image-fit.c
@@ -963,7 +963,7 @@ int fit_image_get_emb_data(const void *fit, int noffset, 
const void **data,
  *     0, on success
  *     -ENOENT if the property could not be found
  */
-int fit_image_get_data_offset(const void *fit, int noffset, int *data_offset)
+int fit_image_get_data_offset(const void *fit, int noffset, u32 *data_offset)
 {
        const fdt32_t *val;
 
@@ -988,7 +988,7 @@ int fit_image_get_data_offset(const void *fit, int noffset, 
int *data_offset)
  *     -ENOENT if the property could not be found
  */
 int fit_image_get_data_position(const void *fit, int noffset,
-                               int *data_position)
+                               u32 *data_position)
 {
        const fdt32_t *val;
 
@@ -1012,7 +1012,7 @@ int fit_image_get_data_position(const void *fit, int 
noffset,
  *     0, on success
  *     -ENOENT if the property could not be found
  */
-int fit_image_get_data_size(const void *fit, int noffset, int *data_size)
+int fit_image_get_data_size(const void *fit, int noffset, u32 *data_size)
 {
        const fdt32_t *val;
 
@@ -1070,18 +1070,13 @@ int fit_image_get_data(const void *fit, int noffset, 
const void **data,
                       size_t *size)
 {
        bool external_data = false;
-       int offset;
-       int len;
        int ret;
        size_t fdt_total_size_aligned;
+       u32 offset;
+       u32 len;
        uintptr_t max_offset;
 
        if (!fit_image_get_data_position(fit, noffset, &offset)) {
-               if (offset < 0) {
-                       printf("Invalid external data position: %d\n", offset);
-                       return -EINVAL;
-               }
-
                external_data = true;
        } else if (!fit_image_get_data_offset(fit, noffset, &offset)) {
                /*
@@ -1090,9 +1085,9 @@ int fit_image_get_data(const void *fit, int noffset, 
const void **data,
                 * for the data-offset properties in each image.
                 */
                fdt_total_size_aligned = ((fdt_totalsize(fit) + 3) & ~3);
-               /* The resulting offset cannot exceed INT_MAX */
-               if (offset < 0 || fdt_total_size_aligned > INT_MAX - offset) {
-                       printf("Invalid external data offset: %d\n", offset);
+               /* The resulting offset cannot exceed UINT32_MAX */
+               if (fdt_total_size_aligned > UINT32_MAX - offset) {
+                       printf("Invalid external data offset: %u\n", offset);
                        return -EINVAL;
                }
                offset += fdt_total_size_aligned;
@@ -1106,16 +1101,12 @@ int fit_image_get_data(const void *fit, int noffset, 
const void **data,
                max_offset = UINTPTR_MAX - (uintptr_t)fit;
                /* Check that external data offset is within the addressable 
range */
                if (offset > max_offset) {
-                       printf("Invalid external data offset: %d\n", offset);
+                       printf("Invalid external data offset: %u\n", offset);
                        return -EINVAL;
                }
 
                ret = fit_image_get_data_size(fit, noffset, &len);
                if (!ret) {
-                       if (len < 0) {
-                               printf("Invalid external data size: %d\n", len);
-                               return -EINVAL;
-                       }
                        /*
                         * For non-signed FIT images, we can only check that
                         * (offset + len) doesn't exceed the addressable range.
@@ -1135,7 +1126,7 @@ int fit_image_get_data(const void *fit, int noffset, 
const void **data,
                            len > CONFIG_VAL(FIT_SIGNATURE_MAX_SIZE) - offset
 #endif
                        ) {
-                               printf("FIT external data is out of bounds 
(offset=%d, size=%d)\n",
+                               printf("FIT external data is out of bounds 
(offset=%u, size=%u)\n",
                                       offset, len);
                                return -EINVAL;
                        }
diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
index 18bff7b8d4a..9b16f91cc6f 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -216,9 +216,9 @@ static int load_simple_fit(struct spl_load_info *info, 
ulong fit_offset,
                           const struct spl_fit_info *ctx, int node,
                           struct spl_image_info *image_info, ulong max_size)
 {
-       int offset;
+       u32 offset;
+       u32 len;
        size_t length;
-       int len;
        ulong size;
        ulong load_addr;
        void *load_ptr;
diff --git a/common/splash_source.c b/common/splash_source.c
index e02f9be05e4..a5ed7431b8e 100644
--- a/common/splash_source.c
+++ b/common/splash_source.c
@@ -351,7 +351,7 @@ static int splash_load_fit(struct splash_location 
*location, ulong bmp_load_addr
        const void *internal_splash_data;
        size_t internal_splash_size;
        int external_splash_addr;
-       int external_splash_size;
+       u32 external_splash_size;
        bool is_splash_external = false;
        struct legacy_img_hdr *img_header;
        const u32 *fit_header;
diff --git a/drivers/fpga/socfpga_arria10.c b/drivers/fpga/socfpga_arria10.c
index e9822b2bb0e..e397b37adf0 100644
--- a/drivers/fpga/socfpga_arria10.c
+++ b/drivers/fpga/socfpga_arria10.c
@@ -547,7 +547,8 @@ static int first_loading_rbf_to_buffer(struct udevice *dev,
        u32 *loadable = buffer_p;
        size_t buffer_size = *buffer_bsize;
        size_t fit_size;
-       int ret, i, count, confs_noffset, images_noffset, rbf_offset, rbf_size;
+       int ret, i, count, confs_noffset, images_noffset;
+       u32 rbf_offset, rbf_size;
        const char *fpga_node_name = NULL;
        const char *uname = NULL;
 
diff --git a/include/image.h b/include/image.h
index 4149ebbcce9..d082dac5035 100644
--- a/include/image.h
+++ b/include/image.h
@@ -1263,10 +1263,10 @@ int fit_image_get_load(const void *fit, int noffset, 
ulong *load);
 int fit_image_get_entry(const void *fit, int noffset, ulong *entry);
 int fit_image_get_emb_data(const void *fit, int noffset, const void **data,
                           size_t *size);
-int fit_image_get_data_offset(const void *fit, int noffset, int *data_offset);
+int fit_image_get_data_offset(const void *fit, int noffset, u32 *data_offset);
 int fit_image_get_data_position(const void *fit, int noffset,
-                               int *data_position);
-int fit_image_get_data_size(const void *fit, int noffset, int *data_size);
+                               u32 *data_position);
+int fit_image_get_data_size(const void *fit, int noffset, u32 *data_size);
 int fit_image_get_data_size_unciphered(const void *fit, int noffset,
                                       size_t *data_size);
 int fit_image_get_data(const void *fit, int noffset, const void **data,
diff --git a/test/py/tests/test_vboot.py b/test/py/tests/test_vboot.py
index 4b6707caf70..e1c6b7c9ec3 100644
--- a/test/py/tests/test_vboot.py
+++ b/test/py/tests/test_vboot.py
@@ -700,12 +700,8 @@ def test_vboot_ext_data_bounds(ubman):
         fd.write(500 * b'\0')
 
     testcases = [
-        ('negative data-position',
-         {'data-position': 0xffffffff}, 'Invalid external data position'),
-        ('negative data-offset',
+        ('invalid data-offset',
          {'data-offset': 0xffffffff}, 'Invalid external data offset'),
-        ('negative data-size',
-         {'data-size': 0xffffffff}, 'Invalid external data size'),
         ('off-bounds data-position',
          {'data-position': 0x7fffffff}, 'FIT external data is out of bounds'),
         ('off-bounds data-offset',

-- 
2.51.0

Reply via email to