Skip to content

Commit d0b79b3

Browse files
committed
Fixed vendor_id address in libspdm_get_vendor_defined_response
Modified libspdm_test_responder_receive_send_rsp_case2 test to use the new API libspdm_register_vendor_callback_func and parameters for VENDOR_DEFINED_RESPONSE Fixed type cast warning in libspdm_vendor_request Fixed type casting warning in libspdm_get_vendor_defined_response Signed-off-by: Ionut Ursachi <[email protected]>
1 parent 5e7e0b0 commit d0b79b3

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

library/spdm_requester_lib/libspdm_req_vendor_request.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ libspdm_return_t libspdm_vendor_request(void *spdm_context,
217217
status = libspdm_try_vendor_request(context,
218218
standard_id,
219219
vendor_id_len, (uint8_t *)vendor_id,
220-
(uint8_t *)request, request_len,
220+
(uint8_t *)request, (uint16_t)request_len,
221221
(uint8_t *)response, response_len);
222222
if ((status != LIBSPDM_STATUS_BUSY_PEER) || (retry == 0)) {
223223
return status;

library/spdm_responder_lib/libspdm_rsp_vendor_response.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ libspdm_return_t libspdm_get_vendor_defined_response(libspdm_context_t *spdm_con
6565
response_size, response);
6666
}
6767

68+
if (spdm_context->vendor_response_callback == NULL) {
69+
return libspdm_generate_error_response(spdm_context,
70+
SPDM_ERROR_CODE_INVALID_REQUEST, 0,
71+
response_size, response);
72+
}
73+
6874
libspdm_reset_message_buffer_via_request_code(spdm_context, NULL,
6975
spdm_request->header.request_response_code);
7076

@@ -107,8 +113,9 @@ libspdm_return_t libspdm_get_vendor_defined_response(libspdm_context_t *spdm_con
107113

108114
/* assign vendors from request
109115
* req_data advances by spdm_response->len */
116+
uint8_t* temp_vendor_ptr = vendor_id;
110117
for (i = 0; i < spdm_response->len; i++) {
111-
*vendor_id++ = *req_data++;
118+
*temp_vendor_ptr++ = *req_data++;
112119
}
113120

114121
/* advance by payload length, so callback gets actual payload */
@@ -127,8 +134,8 @@ libspdm_return_t libspdm_get_vendor_defined_response(libspdm_context_t *spdm_con
127134
resp_data, &response_capacity);
128135

129136
/* store back the response payload size */
130-
*((uint16_t*)(resp_data - sizeof(uint16_t))) = response_capacity;
131-
*response_size = response_capacity + header_length;
137+
*((uint16_t*)(resp_data - sizeof(uint16_t))) = (uint16_t)response_capacity;
138+
*response_size = response_capacity + (size_t)header_length;
132139

133140
/* We are not caching request and response with libspdm_append_message_b
134141
* as these are used for secure sessions, so out of scope for us */

unit_test/test_spdm_responder/receive_send.c

+10-5
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,17 @@
1212
#define CHUNK_GET_UNIT_TEST_OVERRIDE_DATA_TRANSFER_SIZE (64)
1313

1414
libspdm_return_t my_test_get_response_func(
15-
void *spdm_context, const uint32_t *session_id, bool is_app_message,
16-
size_t request_size, const void *request, size_t *response_size,
17-
void *response)
15+
void *spdm_context,
16+
uint16_t standard_id,
17+
uint8_t vendor_id_len,
18+
const void *vendor_id,
19+
const void *request,
20+
size_t request_len,
21+
void *resp,
22+
size_t *resp_len)
1823
{
1924
/* response message size is greater than the sending transmit buffer size of responder */
20-
*response_size = CHUNK_GET_UNIT_TEST_OVERRIDE_DATA_TRANSFER_SIZE + 1;
25+
*resp_len = CHUNK_GET_UNIT_TEST_OVERRIDE_DATA_TRANSFER_SIZE + 1;
2126
return LIBSPDM_STATUS_SUCCESS;
2227
}
2328

@@ -213,7 +218,7 @@ void libspdm_test_responder_receive_send_rsp_case2(void** state)
213218
libspdm_zero_mem(response, response_size);
214219

215220
/* Make response message size greater than the sending transmit buffer size of responder */
216-
spdm_context->get_response_func = (void *)my_test_get_response_func;
221+
libspdm_register_vendor_callback_func(spdm_context, my_test_get_response_func);
217222

218223
status = libspdm_build_response(spdm_context, NULL, false,
219224
&response_size, (void**)&response);

0 commit comments

Comments
 (0)