From d69b9fab4a9e46c347238ed4e0d55ba33d90d4da Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Thu, 29 Sep 2022 10:39:04 +0000 Subject: [PATCH] pvattest: build_attestation_v1_ioctl: make the code more robust MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...by adding a compile time assertion about the buffer size. While at it, report the actual user data size in case of an error. Signed-off-by: Marc Hartmayer Reviewed-by: Steffen Eiden Signed-off-by: Jan Höppner --- pvattest/src/uvio.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pvattest/src/uvio.c b/pvattest/src/uvio.c index d68997be..1f784067 100644 --- a/pvattest/src/uvio.c +++ b/pvattest/src/uvio.c @@ -9,6 +9,7 @@ */ /* Must be included before any other header */ #include "config.h" +#include "lib/zt_common.h" #ifdef PVATTEST_COMPILE_PERFORM #include @@ -47,14 +48,17 @@ uvio_attest_t *build_attestation_v1_ioctl(GBytes *serialized_arcb, GBytes *user_ g_steal_pointer(&serialized_arcb); if (user_data) { - if (g_bytes_get_size(user_data) > sizeof(uvio_attest->user_data)) { + size_t user_data_size = g_bytes_get_size(user_data); + + if (user_data_size > sizeof(uvio_attest->user_data)) { g_set_error(error, ATT_ERROR, ATT_ERR_INVALID_USER_DATA, - _("User data larger than %li bytes"), - sizeof(uvio_attest->user_data)); + _("User data %li bytes is larger than %li bytes"), + user_data_size, sizeof(uvio_attest->user_data)); return NULL; } - uvio_attest->user_data_len = (uint16_t)g_bytes_get_size(user_data); - pv_gbytes_memcpy(uvio_attest->user_data, uvio_attest->user_data_len, user_data); + pv_gbytes_memcpy(uvio_attest->user_data, sizeof(uvio_attest->user_data), user_data); + STATIC_ASSERT(sizeof(uvio_attest->user_data) <= UINT16_MAX); + uvio_attest->user_data_len = (uint16_t)user_data_size; } uvio_attest->meas_addr = PTR_TO_U64(g_malloc0(measurement_size));