@@ -377,13 +377,18 @@ size_t libspdm_fill_measurement_device_mode_block (
377377 return sizeof (spdm_measurement_block_dmtf_t ) + sizeof (device_mode );
378378}
379379
380+ bool g_check_measurement_request_context = false;
381+ uint64_t g_measurement_request_context ;
382+
380383libspdm_return_t libspdm_measurement_collection (
381384 void * spdm_context ,
382385 spdm_version_number_t spdm_version ,
383386 uint8_t measurement_specification ,
384387 uint32_t measurement_hash_algo ,
385388 uint8_t measurements_index ,
386389 uint8_t request_attribute ,
390+ size_t request_context_size ,
391+ const void * request_context ,
387392 uint8_t * content_changed ,
388393 uint8_t * measurements_count ,
389394 void * measurements ,
@@ -396,12 +401,21 @@ libspdm_return_t libspdm_measurement_collection(
396401 bool use_bit_stream ;
397402 size_t measurement_block_size ;
398403
399- if ((measurement_specification !=
400- SPDM_MEASUREMENT_SPECIFICATION_DMTF ) ||
404+ if ((measurement_specification != SPDM_MEASUREMENT_SPECIFICATION_DMTF ) ||
401405 (measurement_hash_algo == 0 )) {
402406 return LIBSPDM_STATUS_UNSUPPORTED_CAP ;
403407 }
404408
409+ if (g_check_measurement_request_context ) {
410+ if ((spdm_version >> SPDM_VERSION_NUMBER_SHIFT_BIT ) >= SPDM_MESSAGE_VERSION_13 ) {
411+ LIBSPDM_ASSERT (request_context_size == SPDM_REQ_CONTEXT_SIZE );
412+ LIBSPDM_ASSERT (libspdm_read_uint64 (request_context ) == g_measurement_request_context );
413+ } else {
414+ LIBSPDM_ASSERT (request_context_size == 0 );
415+ LIBSPDM_ASSERT (request_context == NULL );
416+ }
417+ }
418+
405419 hash_size = libspdm_get_measurement_hash_size (measurement_hash_algo );
406420 LIBSPDM_ASSERT (hash_size != 0 );
407421
@@ -615,13 +629,25 @@ bool libspdm_measurement_opaque_data(
615629 uint32_t measurement_hash_algo ,
616630 uint8_t measurement_index ,
617631 uint8_t request_attribute ,
632+ size_t request_context_size ,
633+ const void * request_context ,
618634 void * opaque_data ,
619635 size_t * opaque_data_size )
620636{
621637 size_t index ;
622638
623639 LIBSPDM_ASSERT (libspdm_secret_lib_meas_opaque_data_size <= * opaque_data_size );
624640
641+ if (g_check_measurement_request_context ) {
642+ if ((spdm_version >> SPDM_VERSION_NUMBER_SHIFT_BIT ) >= SPDM_MESSAGE_VERSION_13 ) {
643+ LIBSPDM_ASSERT (request_context_size == SPDM_REQ_CONTEXT_SIZE );
644+ LIBSPDM_ASSERT (libspdm_read_uint64 (request_context ) == g_measurement_request_context );
645+ } else {
646+ LIBSPDM_ASSERT (request_context_size == 0 );
647+ LIBSPDM_ASSERT (request_context == NULL );
648+ }
649+ }
650+
625651 * opaque_data_size = libspdm_secret_lib_meas_opaque_data_size ;
626652
627653 for (index = 0 ; index < * opaque_data_size ; index ++ )
@@ -669,6 +695,8 @@ bool libspdm_generate_measurement_summary_hash(
669695 measurement_hash_algo ,
670696 0xFF , /* Get all measurements*/
671697 0 ,
698+ 0 ,
699+ NULL ,
672700 NULL ,
673701 & device_measurement_count , device_measurement ,
674702 & device_measurement_size );
0 commit comments