diff options
author | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2020-04-02 15:52:44 +0200 |
---|---|---|
committer | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2020-04-02 15:57:55 +0200 |
commit | afe62624c313b78778d4bb4962f5141ac5a0b728 (patch) | |
tree | 4f03bc8b116515187cd0dc803b00f4b83ce2f55c | |
parent | 6f8a2565593f602bfe9f6069f086960f8cc745cd (diff) | |
download | platform_external_arm-trusted-firmware-afe62624c313b78778d4bb4962f5141ac5a0b728.tar.gz platform_external_arm-trusted-firmware-afe62624c313b78778d4bb4962f5141ac5a0b728.tar.bz2 platform_external_arm-trusted-firmware-afe62624c313b78778d4bb4962f5141ac5a0b728.zip |
Check for out-of-bound accesses in the platform io policies
The platform io policies array is now always accessed through a fconf getter.
This gives us an ideal spot to check for out-of-bound accesses.
Remove the assertion in plat_get_image_source(), which is now redundant.
Change-Id: Iefe808d530229073b68cbd164d927b8b6662a217
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
-rw-r--r-- | include/plat/arm/common/arm_fconf_getter.h | 7 | ||||
-rw-r--r-- | plat/arm/common/arm_io_storage.c | 4 |
2 files changed, 6 insertions, 5 deletions
diff --git a/include/plat/arm/common/arm_fconf_getter.h b/include/plat/arm/common/arm_fconf_getter.h index 28913a43f..8fd8c7ada 100644 --- a/include/plat/arm/common/arm_fconf_getter.h +++ b/include/plat/arm/common/arm_fconf_getter.h @@ -7,10 +7,15 @@ #ifndef ARM_FCONF_GETTER #define ARM_FCONF_GETTER +#include <assert.h> + #include <lib/fconf/fconf.h> /* ARM io policies */ -#define arm__io_policies_getter(id) &policies[id] +#define arm__io_policies_getter(id) __extension__ ({ \ + assert((id) < MAX_NUMBER_IDS); \ + &policies[id]; \ +}) struct plat_io_policy { uintptr_t *dev_handle; diff --git a/plat/arm/common/arm_io_storage.c b/plat/arm/common/arm_io_storage.c index 6fcfbd6fb..34b4101e1 100644 --- a/plat/arm/common/arm_io_storage.c +++ b/plat/arm/common/arm_io_storage.c @@ -4,8 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include <assert.h> - #include <common/debug.h> #include <drivers/io/io_driver.h> #include <drivers/io/io_fip.h> @@ -116,8 +114,6 @@ int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle, int result; const struct plat_io_policy *policy; - assert(image_id < MAX_NUMBER_IDS); - policy = FCONF_GET_PROPERTY(arm, io_policies, image_id); result = policy->check(policy->image_spec); if (result == 0) { |