From c643ad110e4eb8b8e76e863dd75d87759af697d8 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 | 4 +++- .../pci_tdisp_req_get_interface_state.c | 18 +++++++++-------- .../pci_tdisp_req_get_version.c | 20 ++++++++++--------- .../pci_tdisp_req_start_interface.c | 16 ++++++++------- .../pci_tdisp_req_stop_interface.c | 16 ++++++++------- 5 files changed, 42 insertions(+), 32 deletions(-) diff --git a/include/library/pci_tdisp_common_lib.h b/include/library/pci_tdisp_common_lib.h index d4dbe1c..f50b293 100644 --- a/include/library/pci_tdisp_common_lib.h +++ b/include/library/pci_tdisp_common_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 **/ @@ -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_interface_state.c b/library/pci_tdisp_requester_lib/pci_tdisp_req_get_interface_state.c index eca2fc2..4fe9948 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 @@ -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 **/ @@ -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 2b1886d..e2ad342 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 @@ -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 **/ @@ -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 41c0942..e2773a0 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 @@ -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 **/ @@ -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 9cd3f5a..8c22578 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 @@ -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 **/ @@ -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; }