pvattest: build_attestation_v1_ioctl: make the code more robust

...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 <mhartmay@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Marc Hartmayer
2022-09-29 10:39:04 +00:00
committed by Jan Höppner
parent 4e02dc8751
commit d69b9fab4a

View File

@@ -9,6 +9,7 @@
*/
/* Must be included before any other header */
#include "config.h"
#include "lib/zt_common.h"
#ifdef PVATTEST_COMPILE_PERFORM
#include <stdio.h>
@@ -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));