Skip to content

Commit

Permalink
Ensure error version of 1.0
Browse files Browse the repository at this point in the history
Fix #163.

Signed-off-by: Steven Bellock <[email protected]>
  • Loading branch information
steven-bellock committed Jul 18, 2023
1 parent 55f5141 commit ab0e006
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
20 changes: 17 additions & 3 deletions library/spdm_responder_lib/libspdm_rsp_version.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ typedef struct {
} libspdm_version_response_mine_t;
#pragma pack()

static libspdm_return_t generate_invalid_version_error(void *response)
{
spdm_error_response_t *spdm_response;

spdm_response = response;

spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_10;
spdm_response->header.request_response_code = SPDM_ERROR;
spdm_response->header.param1 = SPDM_ERROR_CODE_VERSION_MISMATCH;
spdm_response->header.param2 = 0;

return LIBSPDM_STATUS_SUCCESS;
}

libspdm_return_t libspdm_get_response_version(libspdm_context_t *spdm_context, size_t request_size,
const void *request,
size_t *response_size,
Expand All @@ -40,9 +54,9 @@ libspdm_return_t libspdm_get_response_version(libspdm_context_t *spdm_context, s
}

if (spdm_request->header.spdm_version != SPDM_MESSAGE_VERSION_10) {
return libspdm_generate_error_response(spdm_context,
SPDM_ERROR_CODE_VERSION_MISMATCH, 0,
response_size, response);
/* If the GET_VERSION request is improperly formed then the version of the error message
* must be 1.0, regardless of what the negotiated version is. */
return generate_invalid_version_error(response);
}

libspdm_set_connection_state(spdm_context, LIBSPDM_CONNECTION_STATE_NOT_STARTED);
Expand Down
7 changes: 3 additions & 4 deletions unit_test/test_spdm_responder/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,9 @@ void libspdm_test_responder_version_case6(void **state)
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(response_size, sizeof(spdm_error_response_t));
spdm_response = (void *)response;
assert_int_equal(spdm_response->header.request_response_code,
SPDM_ERROR);
assert_int_equal(spdm_response->header.param1,
SPDM_ERROR_CODE_VERSION_MISMATCH);
assert_int_equal(spdm_response->header.spdm_version, SPDM_MESSAGE_VERSION_10);
assert_int_equal(spdm_response->header.request_response_code, SPDM_ERROR);
assert_int_equal(spdm_response->header.param1, SPDM_ERROR_CODE_VERSION_MISMATCH);
assert_int_equal(spdm_response->header.param2, 0);
assert_int_equal(spdm_context->connection_info.connection_state,
LIBSPDM_CONNECTION_STATE_AUTHENTICATED);
Expand Down

0 comments on commit ab0e006

Please sign in to comment.