summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@google.com>2021-08-31 10:58:35 -0700
committerCommit Bot <commit-bot@chromium.org>2021-09-02 18:15:16 +0000
commitab2f3d9a4b57bab1614d8a26be23adff25f41ccc (patch)
treee2c088837287abf4e386d2b0dcec27da981e6655
parenta7bb4d8f3ef3fd489d10c2a8ecb242cc308cdfb6 (diff)
downloadvboot-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.h4
-rw-r--r--tests/vb2_common_tests.c8
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),