tpm2-tss
4.2.0
TPM Software stack 2.0 TCG spec compliant implementation
ifapi_macros.h
1
/* SPDX-License-Identifier: BSD-2-Clause */
2
/*******************************************************************************
3
* Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4
* All rights reserved.
5
*******************************************************************************/
6
#ifndef IFAPI_MACROS_H
7
#define IFAPI_MACROS_H
8
9
#include <string.h>
// IWYU pragma: keep
10
11
#define strdup_check(dest, str, r, label) \
12
if (str) { \
13
(dest) = strdup(str); \
14
if (!(dest)) { \
15
(r) = TSS2_FAPI_RC_MEMORY; \
16
LOG_ERROR("Out of memory."); \
17
goto label; \
18
} \
19
} else { \
20
(dest) = NULL; \
21
}
22
23
#define calloc_check(dest, size, r, label) \
24
{ \
25
(dest) = callock(size, 1); \
26
if (!(dest)) { \
27
(r) = TSS2_FAPI_RC_MEMORY; \
28
LOG_ERROR("Out of memory."); \
29
goto label; \
30
} \
31
}
32
33
#define goto_if_null2(p, msg, r, ec, label, ...) \
34
if ((p) == NULL) { \
35
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(ec), ##__VA_ARGS__); \
36
r = (ec); \
37
goto label; \
38
}
39
40
#define goto_if_error2(r, msg, label, ...) \
41
if (r != TSS2_RC_SUCCESS) { \
42
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
43
goto label; \
44
}
45
46
#define return_if_error2(r, msg, ...) \
47
if (r != TSS2_RC_SUCCESS) { \
48
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
49
return r; \
50
}
51
52
#define try_again_or_error(r, msg, ...) \
53
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) \
54
return TSS2_FAPI_RC_TRY_AGAIN; \
55
if (r != TSS2_RC_SUCCESS) { \
56
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
57
return r; \
58
}
59
60
#define try_again_or_error_goto(r, msg, label, ...) \
61
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) \
62
return TSS2_FAPI_RC_TRY_AGAIN; \
63
if (r != TSS2_RC_SUCCESS) { \
64
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
65
goto label; \
66
}
67
68
#define return_error2(r, msg, ...) \
69
{ \
70
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
71
return (r); \
72
}
73
74
#define return_if_error_reset_state(r, msg, ...) \
75
if (r != TSS2_RC_SUCCESS) { \
76
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
77
context->state = FAPI_STATE_INIT; \
78
return r; \
79
}
80
81
#define goto_if_error_reset_state(r, msg, label, ...) \
82
if (r != TSS2_RC_SUCCESS) { \
83
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
84
context->state = FAPI_STATE_INIT; \
85
goto label; \
86
}
87
88
#define goto_error_reset_state(r, v, msg, label) \
89
{ \
90
(r) = v; \
91
LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
92
context->state = FAPI_STATE_INIT; \
93
goto label; \
94
}
95
96
#define goto_if_null_reset_state(p, msg, r, ec, label) \
97
if ((p) == NULL) { \
98
LOG_ERROR("%s ", (msg)); \
99
context->state = FAPI_STATE_INIT; \
100
(r) = (ec); \
101
goto label; \
102
}
103
104
#define return_try_again(r) \
105
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) { \
106
LOG_TRACE("Received TRY_AGAIN; returning TRY_AGAIN"); \
107
return TSS2_FAPI_RC_TRY_AGAIN; \
108
}
109
110
#define check_not_null(X) \
111
if ((X) == NULL) { \
112
LOG_ERROR(str(X) " is NULL: BAD_REFERENCE"); \
113
return TSS2_FAPI_RC_BAD_REFERENCE; \
114
}
115
116
#define check_in_bounds(X, upper) \
117
{ \
118
const size_t _size = (X); \
119
const size_t _upper = (upper); \
120
if (_size > _upper) { \
121
LOG_ERROR(str(X) " is larger than %zi", _upper); \
122
return TSS2_FAPI_RC_BAD_VALUE; \
123
} \
124
}
125
126
#define check_oom(X) \
127
if ((X) == NULL) { \
128
LOG_ERROR("Out of memory"); \
129
return TSS2_FAPI_RC_MEMORY; \
130
}
131
132
#if defined __GNUC__ && __GNUC__ < 7
133
#define fallthrough \
134
{}
135
#else
136
#define fallthrough __attribute__((fallthrough))
137
#endif
138
139
#define statecase(VAR, STATE) \
140
case STATE: \
141
LOG_TRACE("State " str(VAR) " reached " str(STATE)); \
142
(VAR) = STATE;
143
144
#define general_failure(VAR) \
145
default: \
146
LOG_ERROR("Bad state for " str(VAR)); \
147
return TSS2_FAPI_RC_GENERAL_FAILURE;
148
149
#define statecasedefault(VAR) \
150
default: \
151
LOG_ERROR("Bad state for " str(VAR) ": %i", VAR); \
152
return TSS2_FAPI_RC_BAD_SEQUENCE;
153
154
#define statecasedefault_error(VAR, r, label) \
155
default: \
156
LOG_ERROR("Bad state for " str(VAR) ": %i", VAR); \
157
(r) = TSS2_FAPI_RC_BAD_SEQUENCE; \
158
goto label;
159
160
#endif
/* IFAPI_MACROS_H */
src
tss2-fapi
ifapi_macros.h
Generated by
1.15.0