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));