diff --git a/include/internal/libspdm_requester_lib.h b/include/internal/libspdm_requester_lib.h index f358dee5a72..6c5a1752777 100644 --- a/include/internal/libspdm_requester_lib.h +++ b/include/internal/libspdm_requester_lib.h @@ -1,6 +1,6 @@ /** * Copyright Notice: - * Copyright 2021-2022 DMTF. All rights reserved. + * Copyright 2021-2024 DMTF. All rights reserved. * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md **/ diff --git a/library/spdm_requester_lib/libspdm_req_get_event_types.c b/library/spdm_requester_lib/libspdm_req_get_event_types.c index bacaa0f81e0..ac372a5688e 100644 --- a/library/spdm_requester_lib/libspdm_req_get_event_types.c +++ b/library/spdm_requester_lib/libspdm_req_get_event_types.c @@ -66,7 +66,7 @@ static libspdm_return_t libspdm_try_get_event_types(libspdm_context_t *spdm_cont spdm_request->header.request_response_code = SPDM_GET_SUPPORTED_EVENT_TYPES; spdm_request->header.param1 = 0; spdm_request->header.param2 = 0; - spdm_request_size = sizeof(spdm_heartbeat_request_t); + spdm_request_size = sizeof(spdm_get_supported_event_types_request_t); /* -=[Send Request Phase]=- */ status = libspdm_send_spdm_request(spdm_context, &session_id, spdm_request_size, spdm_request); @@ -125,6 +125,11 @@ static libspdm_return_t libspdm_try_get_event_types(libspdm_context_t *spdm_cont status = LIBSPDM_STATUS_BUFFER_TOO_SMALL; goto receive_done; } + if (spdm_response_size != sizeof(spdm_supported_event_types_response_t) + + (uint64_t)spdm_response->supported_event_groups_list_len) { + status = LIBSPDM_STATUS_INVALID_MSG_SIZE; + goto receive_done; + } /* -=[Process Response Phase]=- */ *event_group_count = spdm_response->header.param1; diff --git a/library/spdm_responder_lib/libspdm_rsp_supported_event_types.c b/library/spdm_responder_lib/libspdm_rsp_supported_event_types.c index 0e97839fc13..339cc2e6f80 100644 --- a/library/spdm_responder_lib/libspdm_rsp_supported_event_types.c +++ b/library/spdm_responder_lib/libspdm_rsp_supported_event_types.c @@ -27,7 +27,7 @@ libspdm_return_t libspdm_get_response_supported_event_types(libspdm_context_t *s spdm_request = request; /* -=[Check Parameters Phase]=- */ - LIBSPDM_ASSERT(spdm_request->header.request_response_code == SPDM_SUPPORTED_EVENT_TYPES); + LIBSPDM_ASSERT(spdm_request->header.request_response_code == SPDM_GET_SUPPORTED_EVENT_TYPES); /* -=[Verify State Phase]=- */ if (spdm_context->response_state != LIBSPDM_RESPONSE_STATE_NORMAL) { diff --git a/unit_test/test_spdm_requester/get_event_types.c b/unit_test/test_spdm_requester/get_event_types.c index 689d3af2638..1a919477827 100644 --- a/unit_test/test_spdm_requester/get_event_types.c +++ b/unit_test/test_spdm_requester/get_event_types.c @@ -214,8 +214,14 @@ static libspdm_return_t receive_message( generate_dmtf_event_group(spdm_response + 1, &event_group_total_bytes, true, true, true, true); - spdm_response->supported_event_groups_list_len = event_group_total_bytes; + { + /* Workaround. See issue https://github.com/DMTF/libspdm/issues/2645. The below code + * can be removed when the issue has been resolved. */ + event_group_total_bytes += 2; + } + + spdm_response->supported_event_groups_list_len = event_group_total_bytes; spdm_response_size = sizeof(spdm_supported_event_types_response_t) + event_group_total_bytes; diff --git a/unit_test/test_spdm_responder/error_test/supported_event_types_err.c b/unit_test/test_spdm_responder/error_test/supported_event_types_err.c index 1535f07fc10..39eb9618b6c 100644 --- a/unit_test/test_spdm_responder/error_test/supported_event_types_err.c +++ b/unit_test/test_spdm_responder/error_test/supported_event_types_err.c @@ -81,7 +81,7 @@ static void libspdm_test_responder_supported_event_types_err_case1(void **state) spdm_context->local_context.capability.flags &= ~SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_EVENT_CAP; spdm_request.header.spdm_version = SPDM_MESSAGE_VERSION_13; - spdm_request.header.request_response_code = SPDM_SUPPORTED_EVENT_TYPES; + spdm_request.header.request_response_code = SPDM_GET_SUPPORTED_EVENT_TYPES; spdm_request.header.param1 = 0; spdm_request.header.param2 = 0; diff --git a/unit_test/test_spdm_responder/supported_event_types.c b/unit_test/test_spdm_responder/supported_event_types.c index 712ac27f71c..d3407e486c9 100644 --- a/unit_test/test_spdm_responder/supported_event_types.c +++ b/unit_test/test_spdm_responder/supported_event_types.c @@ -78,7 +78,7 @@ static void libspdm_test_responder_supported_event_types_case1(void **state) set_standard_state(spdm_context); spdm_request.header.spdm_version = SPDM_MESSAGE_VERSION_13; - spdm_request.header.request_response_code = SPDM_SUPPORTED_EVENT_TYPES; + spdm_request.header.request_response_code = SPDM_GET_SUPPORTED_EVENT_TYPES; spdm_request.header.param1 = 0; spdm_request.header.param2 = 0;