From c42451adbdf8158f73202310e49c01fd6df88daf Mon Sep 17 00:00:00 2001 From: Steven Bellock Date: Sat, 20 Jan 2024 17:12:30 -0800 Subject: [PATCH] Document maximum size of `MeasurementRecordLength` Fix #2469. Signed-off-by: Steven Bellock --- include/hal/library/responder/measlib.h | 1 + include/industry_standard/spdm.h | 2 ++ library/spdm_responder_lib/libspdm_rsp_measurements.c | 1 + 3 files changed, 4 insertions(+) diff --git a/include/hal/library/responder/measlib.h b/include/hal/library/responder/measlib.h index ff1cf77daf7..be2b9c6fdfd 100644 --- a/include/hal/library/responder/measlib.h +++ b/include/hal/library/responder/measlib.h @@ -62,6 +62,7 @@ * On input, indicates the size in bytes of the destination buffer. * On output, indicates the total size in bytes of all device measurement * blocks in the buffer. This field should only be modified if "measurement_index" is non-zero. + * The maximum size is SPDM_MAX_MEASUREMENT_RECORD_LENGTH (2^24 - 1 bytes). **/ extern libspdm_return_t libspdm_measurement_collection( spdm_version_number_t spdm_version, diff --git a/include/industry_standard/spdm.h b/include/industry_standard/spdm.h index 00b76ce4e85..349143e5cc9 100644 --- a/include/industry_standard/spdm.h +++ b/include/industry_standard/spdm.h @@ -19,6 +19,8 @@ #define SPDM_MAX_SLOT_COUNT 8 #define SPDM_MAX_OPAQUE_DATA_SIZE 1024 #define SPDM_MAX_CSR_TRACKING_TAG 7 +/* MeasurementRecordLength is 3 bytes. */ +#define SPDM_MAX_MEASUREMENT_RECORD_LENGTH 0xFFFFFF #define SPDM_NONCE_SIZE 32 #define SPDM_RANDOM_DATA_SIZE 32 diff --git a/library/spdm_responder_lib/libspdm_rsp_measurements.c b/library/spdm_responder_lib/libspdm_rsp_measurements.c index 1cd75b5b621..b89a987ff43 100644 --- a/library/spdm_responder_lib/libspdm_rsp_measurements.c +++ b/library/spdm_responder_lib/libspdm_rsp_measurements.c @@ -243,6 +243,7 @@ libspdm_return_t libspdm_get_response_measurements(libspdm_context_t *spdm_conte measurements, &measurements_size); + LIBSPDM_ASSERT(measurements_size <= SPDM_MAX_MEASUREMENT_RECORD_LENGTH); LIBSPDM_ASSERT(measurements_size <= meas_opaque_buffer_size); if (LIBSPDM_STATUS_IS_ERROR(status)) {