Skip to content

Commit 6ea62c2

Browse files
Li-Aaronjyao1
authored andcommitted
add libspdm_meas_log_reset_callback_func
fix #2816 Signed-off-by: Aaron Li <[email protected]>
1 parent a2a2ded commit 6ea62c2

File tree

6 files changed

+71
-0
lines changed

6 files changed

+71
-0
lines changed

include/internal/libspdm_common_lib.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,10 @@ typedef struct {
685685
#if (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && (LIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT)
686686
libspdm_get_endpoint_info_callback_func get_endpoint_info_callback;
687687
#endif /* (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && (LIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT) */
688+
689+
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
690+
libspdm_meas_log_reset_callback_func spdm_meas_log_reset_callback;
691+
#endif /* LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP */
688692
} libspdm_context_t;
689693

690694
#define LIBSPDM_CONTEXT_SIZE_WITHOUT_SECURED_CONTEXT (sizeof(libspdm_context_t))

include/library/spdm_common_lib.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,21 @@ typedef libspdm_return_t (*libspdm_get_endpoint_info_callback_func)(
10351035
const void *endpoint_info);
10361036
#endif /* LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP && LIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT */
10371037

1038+
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
1039+
/**
1040+
* A Callback function to notify integrator measurement log is reset.
1041+
* This is used to support the "Content changed" field in the MEASUREMENTS response.
1042+
*
1043+
* @param spdm_context A pointer to the SPDM context.
1044+
* @param session_id A pointer to the session ID.
1045+
* If non-NULL then message is within a secure session.
1046+
* If NULL then message is outside a secure session.
1047+
**/
1048+
typedef void (*libspdm_meas_log_reset_callback_func)(
1049+
void *spdm_context,
1050+
const uint32_t *session_id);
1051+
#endif /* LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP */
1052+
10381053
#ifdef __cplusplus
10391054
}
10401055
#endif

include/library/spdm_responder_lib.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,21 @@ libspdm_return_t libspdm_register_get_endpoint_info_callback_func(
315315
void *spdm_context, libspdm_get_endpoint_info_callback_func get_endpoint_info_callback);
316316
#endif /* LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP && LIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT */
317317

318+
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
319+
/**
320+
* This function registers the callback function for notify
321+
* integrator L1L2 is reset.
322+
*
323+
* @param spdm_context A pointer to the SPDM context.
324+
* @param spdm_meas_log_reset_callback L1L2 reset callback function
325+
*
326+
* @retval LIBSPDM_STATUS_SUCCESS Success
327+
* @retval LIBSPDM_STATUS_INVALID_PARAMETER Some parameters invalid or NULL
328+
*/
329+
libspdm_return_t libspdm_register_meas_log_reset_callback(
330+
void *spdm_context, libspdm_meas_log_reset_callback_func spdm_meas_log_reset_callback);
331+
#endif /* LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP */
332+
318333
/**
319334
* This function allows the consumer to terminate a session.
320335
* For example, it can be used when watchdog fires.

library/spdm_common_lib/libspdm_com_context_data.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,6 +1366,12 @@ void libspdm_reset_message_m(libspdm_context_t *spdm_context, void *session_info
13661366
}
13671367
}
13681368
#endif
1369+
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
1370+
if (spdm_context->spdm_meas_log_reset_callback != NULL) {
1371+
spdm_context->spdm_meas_log_reset_callback(
1372+
spdm_context, spdm_session_info == NULL ? NULL : &spdm_session_info->session_id);
1373+
}
1374+
#endif /* LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP */
13691375
}
13701376

13711377
/**

library/spdm_responder_lib/libspdm_rsp_measurements.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@
77
#include "internal/libspdm_responder_lib.h"
88

99
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
10+
11+
libspdm_return_t libspdm_register_meas_log_reset_callback(
12+
void *spdm_context, libspdm_meas_log_reset_callback_func spdm_meas_log_reset_callback)
13+
{
14+
libspdm_context_t *context = (libspdm_context_t *)spdm_context;
15+
context->spdm_meas_log_reset_callback = spdm_meas_log_reset_callback;
16+
return LIBSPDM_STATUS_SUCCESS;
17+
}
18+
1019
bool libspdm_generate_measurement_signature(libspdm_context_t *spdm_context,
1120
libspdm_session_info_t *session_info,
1221
uint8_t slot_id,

unit_test/test_spdm_responder/measurements.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,27 @@
1010

1111
#if LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
1212

13+
void spdm_meas_log_reset_callback (
14+
void *spdm_context,
15+
const uint32_t *session_id)
16+
{
17+
libspdm_context_t *context = spdm_context;
18+
if (session_id == NULL) {
19+
#if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
20+
assert_int_equal(context->transcript.message_m.buffer_size, 0);
21+
#else
22+
assert_null(context->transcript.digest_context_l1l2);
23+
#endif
24+
} else {
25+
libspdm_session_info_t* session_info = &context->session_info[0];
26+
#if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
27+
assert_int_equal(session_info->session_transcript.message_m.buffer_size, 0);
28+
#else
29+
assert_null(session_info->session_transcript.digest_context_l1l2);
30+
#endif
31+
}
32+
}
33+
1334
spdm_get_measurements_request_t m_libspdm_get_measurements_request1 = {
1435
{ SPDM_MESSAGE_VERSION_10, SPDM_GET_MEASUREMENTS, 0,
1536
SPDM_GET_MEASUREMENTS_REQUEST_MEASUREMENT_OPERATION_TOTAL_NUMBER_OF_MEASUREMENTS },
@@ -147,6 +168,7 @@ static void rsp_measurements_case1(void **state)
147168
m_libspdm_use_measurement_spec;
148169
spdm_context->connection_info.algorithm.measurement_hash_algo =
149170
m_libspdm_use_measurement_hash_algo;
171+
spdm_context->spdm_meas_log_reset_callback = spdm_meas_log_reset_callback;
150172
libspdm_reset_message_m(spdm_context, NULL);
151173

152174
libspdm_secret_lib_meas_opaque_data_size = 0;

0 commit comments

Comments
 (0)