Branch data Line data Source code
1 : : /**
2 : : * Copyright Notice:
3 : : * Copyright 2021-2022 DMTF. All rights reserved.
4 : : * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5 : : **/
6 : :
7 : : #include "internal/libspdm_responder_lib.h"
8 : :
9 : 574 : libspdm_return_t libspdm_generate_error_response(const void *spdm_context,
10 : : uint8_t error_code,
11 : : uint8_t error_data,
12 : : size_t *response_size,
13 : : void *response)
14 : : {
15 : : spdm_error_response_t *spdm_response;
16 : :
17 [ - + ]: 574 : LIBSPDM_ASSERT(*response_size >= sizeof(spdm_error_response_t));
18 : 574 : *response_size = sizeof(spdm_error_response_t);
19 : 574 : spdm_response = response;
20 : :
21 : 574 : spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
22 [ + + ]: 574 : if (spdm_response->header.spdm_version == 0) {
23 : : /* if version is not negotiated, then use default version 1.0 */
24 : 12 : spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_10;
25 : : }
26 : 574 : spdm_response->header.request_response_code = SPDM_ERROR;
27 : 574 : spdm_response->header.param1 = error_code;
28 : 574 : spdm_response->header.param2 = error_data;
29 : :
30 [ + + ]: 574 : if (spdm_response->header.spdm_version <= SPDM_MESSAGE_VERSION_11) {
31 [ + - - + ]: 373 : LIBSPDM_ASSERT ((error_code != SPDM_ERROR_CODE_RESPONSE_TOO_LARGE) &&
32 : : (error_code != SPDM_ERROR_CODE_LARGE_RESPONSE));
33 : : }
34 : :
35 : 574 : return LIBSPDM_STATUS_SUCCESS;
36 : : }
37 : :
38 : 19 : libspdm_return_t libspdm_generate_extended_error_response(
39 : : const void *spdm_context, uint8_t error_code, uint8_t error_data,
40 : : size_t extended_error_data_size, const uint8_t *extended_error_data,
41 : : size_t *response_size, void *response)
42 : : {
43 : : spdm_error_response_t *spdm_response;
44 : : size_t response_capacity;
45 : :
46 [ - + ]: 19 : LIBSPDM_ASSERT(*response_size >=
47 : : sizeof(spdm_error_response_t) + extended_error_data_size);
48 : 19 : response_capacity = *response_size;
49 : 19 : *response_size = sizeof(spdm_error_response_t) + extended_error_data_size;
50 : 19 : spdm_response = response;
51 : :
52 : 19 : spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
53 : 19 : spdm_response->header.request_response_code = SPDM_ERROR;
54 : 19 : spdm_response->header.param1 = error_code;
55 : 19 : spdm_response->header.param2 = error_data;
56 : 19 : libspdm_copy_mem(spdm_response + 1, response_capacity - sizeof(spdm_error_response_t),
57 : : extended_error_data, extended_error_data_size);
58 : :
59 : 19 : return LIBSPDM_STATUS_SUCCESS;
60 : : }
|