From 6b2fd0f0c200c03c87fd1cacc2c047b0ae4802b1 Mon Sep 17 00:00:00 2001 From: Jiewen Yao Date: Thu, 17 Oct 2024 15:04:41 +0800 Subject: [PATCH] TDISP enlarge response buffer for error message. Signed-off-by: Jiewen Yao --- include/library/pci_tdisp_common_lib.h | 2 ++ .../pci_tdisp_req_get_capabilities.c | 16 +++++++++------- .../pci_tdisp_req_get_interface_state.c | 16 +++++++++------- .../pci_tdisp_req_get_version.c | 18 ++++++++++-------- .../pci_tdisp_req_start_interface.c | 14 ++++++++------ .../pci_tdisp_req_stop_interface.c | 14 ++++++++------ 6 files changed, 46 insertions(+), 34 deletions(-) diff --git a/include/library/pci_tdisp_common_lib.h b/include/library/pci_tdisp_common_lib.h index d4dbe1cc..4c0825c9 100644 --- a/include/library/pci_tdisp_common_lib.h +++ b/include/library/pci_tdisp_common_lib.h @@ -14,4 +14,6 @@ #define LIBTDISP_INTERFACE_REPORT_PORTION_LEN 0x40 +#define LIBTDISP_ERROR_MESSAGE_MAX_SIZE (sizeof(pci_tdisp_error_response_t)) + #endif diff --git a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_capabilities.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_capabilities.c index 7c614621..5c547186 100644 --- a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_capabilities.c +++ b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_capabilities.c @@ -30,7 +30,8 @@ libspdm_return_t pci_tdisp_get_capabilities(const void *pci_doe_context, libspdm_return_t status; pci_tdisp_get_capabilities_request_t request; size_t request_size; - pci_tdisp_capabilities_response_t response; + uint8_t res_buf[LIBTDISP_ERROR_MESSAGE_MAX_SIZE]; + pci_tdisp_capabilities_response_t *response; size_t response_size; libspdm_zero_mem (&request, sizeof(request)); @@ -40,10 +41,11 @@ libspdm_return_t pci_tdisp_get_capabilities(const void *pci_doe_context, libspdm_copy_mem (&request.req_caps, sizeof(request.req_caps), req_caps, sizeof(*req_caps)); request_size = sizeof(request); - response_size = sizeof(response); + response = (void *)res_buf; + response_size = sizeof(res_buf); status = pci_tdisp_send_receive_data(spdm_context, session_id, &request, request_size, - &response, &response_size); + response, &response_size); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } @@ -51,17 +53,17 @@ libspdm_return_t pci_tdisp_get_capabilities(const void *pci_doe_context, if (response_size != sizeof(pci_tdisp_capabilities_response_t)) { return LIBSPDM_STATUS_INVALID_MSG_SIZE; } - if (response.header.version != request.header.version) { + if (response->header.version != request.header.version) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.message_type != PCI_TDISP_CAPABILITIES) { + if (response->header.message_type != PCI_TDISP_CAPABILITIES) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.interface_id.function_id != request.header.interface_id.function_id) { + if (response->header.interface_id.function_id != request.header.interface_id.function_id) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - libspdm_copy_mem (rsp_caps, sizeof(*rsp_caps), &response.rsp_caps, sizeof(response.rsp_caps)); + libspdm_copy_mem (rsp_caps, sizeof(*rsp_caps), &response->rsp_caps, sizeof(response->rsp_caps)); return LIBSPDM_STATUS_SUCCESS; } diff --git a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_interface_state.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_interface_state.c index eca2fc2d..98ef2953 100644 --- a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_interface_state.c +++ b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_interface_state.c @@ -29,7 +29,8 @@ libspdm_return_t pci_tdisp_get_interface_state(const void *pci_doe_context, libspdm_return_t status; pci_tdisp_get_device_interface_state_request_t request; size_t request_size; - pci_tdisp_device_interface_state_response_t response; + uint8_t res_buf[LIBTDISP_ERROR_MESSAGE_MAX_SIZE]; + pci_tdisp_device_interface_state_response_t *response; size_t response_size; libspdm_zero_mem (&request, sizeof(request)); @@ -38,10 +39,11 @@ libspdm_return_t pci_tdisp_get_interface_state(const void *pci_doe_context, request.header.interface_id.function_id = interface_id->function_id; request_size = sizeof(request); - response_size = sizeof(response); + response = (void *)res_buf; + response_size = sizeof(res_buf); status = pci_tdisp_send_receive_data(spdm_context, session_id, &request, request_size, - &response, &response_size); + response, &response_size); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } @@ -49,17 +51,17 @@ libspdm_return_t pci_tdisp_get_interface_state(const void *pci_doe_context, if (response_size != sizeof(pci_tdisp_device_interface_state_response_t)) { return LIBSPDM_STATUS_INVALID_MSG_SIZE; } - if (response.header.version != request.header.version) { + if (response->header.version != request.header.version) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.message_type != PCI_TDISP_DEVICE_INTERFACE_STATE) { + if (response->header.message_type != PCI_TDISP_DEVICE_INTERFACE_STATE) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.interface_id.function_id != request.header.interface_id.function_id) { + if (response->header.interface_id.function_id != request.header.interface_id.function_id) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - *tdi_state = response.tdi_state; + *tdi_state = response->tdi_state; return LIBSPDM_STATUS_SUCCESS; } diff --git a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_version.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_version.c index 2b1886d2..87e3c56d 100644 --- a/library/pci_tdisp_requester_lib/pci_tdisp_req_get_version.c +++ b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_version.c @@ -36,7 +36,8 @@ libspdm_return_t pci_tdisp_get_version(const void *pci_doe_context, libspdm_return_t status; pci_tdisp_get_version_request_t request; size_t request_size; - pci_tdisp_version_response_mine_t response; + uint8_t res_buf[LIBTDISP_ERROR_MESSAGE_MAX_SIZE]; + pci_tdisp_version_response_mine_t *response; size_t response_size; libspdm_zero_mem (&request, sizeof(request)); @@ -45,10 +46,11 @@ libspdm_return_t pci_tdisp_get_version(const void *pci_doe_context, request.header.interface_id.function_id = interface_id->function_id; request_size = sizeof(request); - response_size = sizeof(response); + response = (void *)res_buf; + response_size = sizeof(res_buf); status = pci_tdisp_send_receive_data(spdm_context, session_id, &request, request_size, - &response, &response_size); + response, &response_size); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } @@ -56,20 +58,20 @@ libspdm_return_t pci_tdisp_get_version(const void *pci_doe_context, if (response_size != sizeof(pci_tdisp_version_response_mine_t)) { return LIBSPDM_STATUS_INVALID_MSG_SIZE; } - if (response.header.version != request.header.version) { + if (response->header.version != request.header.version) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.message_type != PCI_TDISP_VERSION) { + if (response->header.message_type != PCI_TDISP_VERSION) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.interface_id.function_id != request.header.interface_id.function_id) { + if (response->header.interface_id.function_id != request.header.interface_id.function_id) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.version_num_count != 1) { + if (response->version_num_count != 1) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.version_num_entry[0] != PCI_TDISP_MESSAGE_VERSION_10) { + if (response->version_num_entry[0] != PCI_TDISP_MESSAGE_VERSION_10) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } diff --git a/library/pci_tdisp_requester_lib/pci_tdisp_req_start_interface.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_start_interface.c index 41c0942b..fb74c894 100644 --- a/library/pci_tdisp_requester_lib/pci_tdisp_req_start_interface.c +++ b/library/pci_tdisp_requester_lib/pci_tdisp_req_start_interface.c @@ -29,7 +29,8 @@ libspdm_return_t pci_tdisp_start_interface(const void *pci_doe_context, libspdm_return_t status; pci_tdisp_start_interface_request_t request; size_t request_size; - pci_tdisp_start_interface_response_t response; + uint8_t res_buf[LIBTDISP_ERROR_MESSAGE_MAX_SIZE]; + pci_tdisp_start_interface_response_t *response; size_t response_size; libspdm_zero_mem (&request, sizeof(request)); @@ -40,10 +41,11 @@ libspdm_return_t pci_tdisp_start_interface(const void *pci_doe_context, start_interface_nonce, PCI_TDISP_START_INTERFACE_NONCE_SIZE); request_size = sizeof(request); - response_size = sizeof(response); + response = (void *)res_buf; + response_size = sizeof(res_buf); status = pci_tdisp_send_receive_data(spdm_context, session_id, &request, request_size, - &response, &response_size); + response, &response_size); libspdm_zero_mem (&request.start_interface_nonce, sizeof(request.start_interface_nonce)); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; @@ -52,13 +54,13 @@ libspdm_return_t pci_tdisp_start_interface(const void *pci_doe_context, if (response_size != sizeof(pci_tdisp_start_interface_response_t)) { return LIBSPDM_STATUS_INVALID_MSG_SIZE; } - if (response.header.version != request.header.version) { + if (response->header.version != request.header.version) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.message_type != PCI_TDISP_START_INTERFACE_RSP) { + if (response->header.message_type != PCI_TDISP_START_INTERFACE_RSP) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.interface_id.function_id != request.header.interface_id.function_id) { + if (response->header.interface_id.function_id != request.header.interface_id.function_id) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } diff --git a/library/pci_tdisp_requester_lib/pci_tdisp_req_stop_interface.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_stop_interface.c index 9cd3f5a0..bd551c10 100644 --- a/library/pci_tdisp_requester_lib/pci_tdisp_req_stop_interface.c +++ b/library/pci_tdisp_requester_lib/pci_tdisp_req_stop_interface.c @@ -28,7 +28,8 @@ libspdm_return_t pci_tdisp_stop_interface(const void *pci_doe_context, libspdm_return_t status; pci_tdisp_stop_interface_request_t request; size_t request_size; - pci_tdisp_stop_interface_response_t response; + uint8_t res_buf[LIBTDISP_ERROR_MESSAGE_MAX_SIZE]; + pci_tdisp_stop_interface_response_t *response; size_t response_size; libspdm_zero_mem (&request, sizeof(request)); @@ -37,10 +38,11 @@ libspdm_return_t pci_tdisp_stop_interface(const void *pci_doe_context, request.header.interface_id.function_id = interface_id->function_id; request_size = sizeof(request); - response_size = sizeof(response); + response = (void *)res_buf; + response_size = sizeof(res_buf); status = pci_tdisp_send_receive_data(spdm_context, session_id, &request, request_size, - &response, &response_size); + response, &response_size); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } @@ -48,13 +50,13 @@ libspdm_return_t pci_tdisp_stop_interface(const void *pci_doe_context, if (response_size != sizeof(pci_tdisp_stop_interface_response_t)) { return LIBSPDM_STATUS_INVALID_MSG_SIZE; } - if (response.header.version != request.header.version) { + if (response->header.version != request.header.version) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.message_type != PCI_TDISP_STOP_INTERFACE_RSP) { + if (response->header.message_type != PCI_TDISP_STOP_INTERFACE_RSP) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; } - if (response.header.interface_id.function_id != request.header.interface_id.function_id) { + if (response->header.interface_id.function_id != request.header.interface_id.function_id) { return LIBSPDM_STATUS_INVALID_MSG_FIELD; }