diff options
author | Vadim Bendebury <vbendeb@google.com> | 2021-08-31 10:58:35 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-02 18:15:16 +0000 |
commit | ab2f3d9a4b57bab1614d8a26be23adff25f41ccc (patch) | |
tree | e2c088837287abf4e386d2b0dcec27da981e6655 | |
parent | a7bb4d8f3ef3fd489d10c2a8ecb242cc308cdfb6 (diff) | |
download | vboot-ab2f3d9a4b57bab1614d8a26be23adff25f41ccc.tar.gz |
run2tests: fix more compilation problems
The compiler is too zealous when deciding which addresses are allowed
to be accessed. While it is correct in principal, in some controlled
cases the code indeed needs to calculate addresses which are beyond
the structures boundaries.
This patch modifies the code to placate the compiler.
BRANCH=none
BUG=none
TEST='make run2tests' inside chroot does not fail to compile and
passes.
Change-Id: Iba99714da569a5f28ae95939e93ee1d09da20caa
Signed-off-by: Vadim Bendebury <vbendeb@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3133544
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
-rw-r--r-- | firmware/2lib/include/2common.h | 4 | ||||
-rw-r--r-- | tests/vb2_common_tests.c | 8 |
2 files changed, 8 insertions, 4 deletions
diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h index 181cf4c1..695f50d1 100644 --- a/firmware/2lib/include/2common.h +++ b/firmware/2lib/include/2common.h @@ -298,7 +298,7 @@ static inline uint8_t *vb2_packed_key_data_mutable( static inline const uint8_t *vb2_packed_key_data( const struct vb2_packed_key *key) { - return (const uint8_t *)key + key->key_offset; + return (const uint8_t *)((uintptr_t)key + key->key_offset); } /** @@ -331,7 +331,7 @@ static inline uint8_t *vb2_signature_data_mutable( static inline const uint8_t *vb2_signature_data( const struct vb2_signature *sig) { - return (const uint8_t *)sig + sig->sig_offset; + return (const uint8_t *)((uintptr_t)sig + sig->sig_offset); } /** diff --git a/tests/vb2_common_tests.c b/tests/vb2_common_tests.c index 11d183cf..d76c4023 100644 --- a/tests/vb2_common_tests.c +++ b/tests/vb2_common_tests.c @@ -276,9 +276,11 @@ static void test_helper_functions(void) { struct vb2_packed_key k = {.key_offset = sizeof(k), .key_size = 128}; + const void *lower_base; TEST_SUCC(vb2_verify_packed_key_inside(&k, sizeof(k)+128, &k), "vb2_packed_key_inside() ok 1"); - TEST_SUCC(vb2_verify_packed_key_inside(&k - 1, + lower_base = (const void *)((uintptr_t)&k - sizeof(k)); + TEST_SUCC(vb2_verify_packed_key_inside(lower_base, 2*sizeof(k)+128, &k), "vb2_packed_key_inside() ok 2"); TEST_EQ(vb2_verify_packed_key_inside(&k, 128, &k), @@ -297,9 +299,11 @@ static void test_helper_functions(void) { struct vb2_signature s = {.sig_offset = sizeof(s), .sig_size = 128}; + const void *lower_base; TEST_SUCC(vb2_verify_signature_inside(&s, sizeof(s)+128, &s), "vb2_verify_signature_inside() ok 1"); - TEST_SUCC(vb2_verify_signature_inside(&s - 1, + lower_base = (const void *)((uintptr_t)&s - sizeof(s)); + TEST_SUCC(vb2_verify_signature_inside(lower_base, 2*sizeof(s)+128, &s), "vb2_verify_signature_inside() ok 2"); TEST_EQ(vb2_verify_signature_inside(&s, 128, &s), |