Skip to content

Commit ac0dfd7

Browse files
steven-bellockjyao1
authored andcommitted
Add SPDM version checks
Fix #3483. Signed-off-by: Steven Bellock <[email protected]>
1 parent 7e0037e commit ac0dfd7

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

library/spdm_responder_lib/libspdm_rsp_encap_response.c

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* Copyright Notice:
3-
* Copyright 2021-2025 DMTF. All rights reserved.
3+
* Copyright 2021-2026 DMTF. All rights reserved.
44
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
55
**/
66

@@ -290,6 +290,18 @@ libspdm_return_t libspdm_get_response_encapsulated_request(
290290
spdm_context, SPDM_ERROR_CODE_UNSUPPORTED_REQUEST,
291291
SPDM_GET_ENCAPSULATED_REQUEST, response_size, response);
292292
}
293+
294+
if (request_size < sizeof(spdm_get_encapsulated_request_request_t)) {
295+
return libspdm_generate_error_response(spdm_context,
296+
SPDM_ERROR_CODE_INVALID_REQUEST, 0,
297+
response_size, response);
298+
}
299+
if (spdm_request->header.spdm_version != libspdm_get_connection_version(spdm_context)) {
300+
return libspdm_generate_error_response(spdm_context,
301+
SPDM_ERROR_CODE_VERSION_MISMATCH, 0,
302+
response_size, response);
303+
}
304+
293305
if (spdm_context->response_state != LIBSPDM_RESPONSE_STATE_PROCESSING_ENCAP) {
294306
if (spdm_context->response_state == LIBSPDM_RESPONSE_STATE_NORMAL) {
295307
if (libspdm_get_connection_version(spdm_context) >= SPDM_MESSAGE_VERSION_13) {
@@ -327,12 +339,6 @@ libspdm_return_t libspdm_get_response_encapsulated_request(
327339
}
328340
}
329341

330-
if (request_size < sizeof(spdm_get_encapsulated_request_request_t)) {
331-
return libspdm_generate_error_response(spdm_context,
332-
SPDM_ERROR_CODE_INVALID_REQUEST, 0,
333-
response_size, response);
334-
}
335-
336342
libspdm_reset_message_buffer_via_request_code(spdm_context, NULL,
337343
spdm_request->header.request_response_code);
338344

@@ -394,6 +400,7 @@ libspdm_return_t libspdm_get_response_encapsulated_response_ack(
394400
spdm_context, SPDM_ERROR_CODE_UNSUPPORTED_REQUEST,
395401
SPDM_DELIVER_ENCAPSULATED_RESPONSE, response_size, response);
396402
}
403+
397404
if (spdm_context->response_state != LIBSPDM_RESPONSE_STATE_PROCESSING_ENCAP) {
398405
if (spdm_context->response_state == LIBSPDM_RESPONSE_STATE_NORMAL) {
399406
return libspdm_generate_error_response(
@@ -411,6 +418,11 @@ libspdm_return_t libspdm_get_response_encapsulated_response_ack(
411418
SPDM_ERROR_CODE_INVALID_REQUEST, 0,
412419
response_size, response);
413420
}
421+
if (spdm_request->header.spdm_version != libspdm_get_connection_version(spdm_context)) {
422+
return libspdm_generate_error_response(spdm_context,
423+
SPDM_ERROR_CODE_VERSION_MISMATCH, 0,
424+
response_size, response);
425+
}
414426

415427
spdm_request_size = request_size;
416428

unit_test/test_spdm_responder/encapsulated_request.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,8 @@ static void rsp_encapsulated_request_case7(void **State)
439439

440440
response_size = sizeof(response);
441441
status = libspdm_get_response_encapsulated_request(spdm_context,
442-
m_libspdm_encapsulated_request_t1_size,
443-
&m_libspdm_encapsulated_request_t1,
442+
m_libspdm_encapsulated_request_t2_size,
443+
&m_libspdm_encapsulated_request_t2,
444444
&response_size,
445445
response);
446446

0 commit comments

Comments
 (0)