diff --git a/core/crypto/signed_hdr.c b/core/crypto/signed_hdr.c index f134a153161..fc88e4b3fd1 100644 --- a/core/crypto/signed_hdr.c +++ b/core/crypto/signed_hdr.c @@ -11,11 +11,14 @@ #include #include #include +#include struct shdr *shdr_alloc_and_copy(const struct shdr *img, size_t img_size) { size_t shdr_size; struct shdr *shdr; + vaddr_t img_va = (vaddr_t)img; + vaddr_t tmp = 0; if (img_size < sizeof(struct shdr)) return NULL; @@ -24,6 +27,9 @@ struct shdr *shdr_alloc_and_copy(const struct shdr *img, size_t img_size) if (img_size < shdr_size) return NULL; + if (ADD_OVERFLOW(img_va, shdr_size, &tmp)) + return NULL; + shdr = malloc(shdr_size); if (!shdr) return NULL;