AuditLog: Use uniform signatures
This patch amends the Audit Logging service to use
Uniform Signatures.
Change-Id: If8a84b75b6ec5937ae27c62b2b8c43644a5b2505
Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
diff --git a/interface/src/tfm_audit_api.c b/interface/src/tfm_audit_api.c
index 9ce86ef..fd4fc67 100644
--- a/interface/src/tfm_audit_api.c
+++ b/interface/src/tfm_audit_api.c
@@ -5,71 +5,100 @@
*
*/
-#include "tfm_audit_veneers.h"
#include "psa_audit_api.h"
+#include "tfm_veneers.h"
#include "tfm_ns_lock.h"
-#include "audit_wrappers.h"
-enum psa_audit_err psa_audit_retrieve_record(const uint32_t record_index,
- const uint32_t buffer_size,
- const uint8_t *token,
- const uint32_t token_size,
- uint8_t *buffer,
- uint32_t *record_size)
+#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
+
+#define API_DISPATCH(sfn_name) \
+ tfm_ns_lock_dispatch((veneer_fn)tfm_##sfn_name##_veneer, \
+ (uint32_t)in_vec, (uint32_t)ARRAY_SIZE(in_vec), \
+ (uint32_t)out_vec, (uint32_t)ARRAY_SIZE(out_vec))
+
+#define API_DISPATCH_NO_INVEC(sfn_name) \
+ tfm_ns_lock_dispatch((veneer_fn)tfm_##sfn_name##_veneer, \
+ (uint32_t)NULL, 0, \
+ (uint32_t)out_vec, (uint32_t)ARRAY_SIZE(out_vec))
+
+#define API_DISPATCH_NO_OUTVEC(sfn_name) \
+ tfm_ns_lock_dispatch((veneer_fn)tfm_##sfn_name##_veneer, \
+ (uint32_t)in_vec, (uint32_t)ARRAY_SIZE(in_vec), \
+ (uint32_t)NULL, 0)
+
+psa_status_t psa_audit_retrieve_record(const uint32_t record_index,
+ const uint32_t buffer_size,
+ const uint8_t *token,
+ const uint32_t token_size,
+ uint8_t *buffer,
+ uint32_t *record_size)
{
- const struct audit_core_retrieve_input input_s =
- {.record_index = record_index,
- .buffer_size = buffer_size,
- .token = token,
- .token_size = token_size};
+ psa_status_t status;
+ psa_invec in_vec[] = {
+ {.base = &record_index, .len = sizeof(uint32_t)},
+ {.base = token, .len = token_size},
+ };
+ psa_outvec out_vec[] = {
+ {.base = buffer, .len = buffer_size},
+ };
- struct audit_core_retrieve_output output_s = {.buffer = buffer,
- .record_size = record_size};
+ status = API_DISPATCH(audit_core_retrieve_record);
- return (enum psa_audit_err) tfm_ns_lock_dispatch((veneer_fn)tfm_audit_veneer_retrieve_record,
- (uint32_t)&input_s,
- (uint32_t)&output_s,
- 0,
- 0);
+ *record_size = out_vec[0].len;
+
+ return status;
}
-enum psa_audit_err psa_audit_get_info(uint32_t *num_records,
- uint32_t *size)
+psa_status_t psa_audit_get_info(uint32_t *num_records, uint32_t *size)
{
- return (enum psa_audit_err) tfm_ns_lock_dispatch((veneer_fn)tfm_audit_veneer_get_info,
- (uint32_t)num_records,
- (uint32_t)size,
- 0,
- 0);
+ psa_status_t status;
+ psa_outvec out_vec[] = {
+ {.base = num_records, .len = sizeof(uint32_t)},
+ {.base = size, .len = sizeof(uint32_t)},
+ };
+
+ status = API_DISPATCH_NO_INVEC(audit_core_get_info);
+
+ return status;
}
-enum psa_audit_err psa_audit_get_record_info(const uint32_t record_index,
- uint32_t *size)
+psa_status_t psa_audit_get_record_info(const uint32_t record_index,
+ uint32_t *size)
{
- return (enum psa_audit_err) tfm_ns_lock_dispatch((veneer_fn)tfm_audit_veneer_get_record_info,
- (uint32_t)record_index,
- (uint32_t)size,
- 0,
- 0);
+ psa_status_t status;
+ psa_invec in_vec[] = {
+ {.base = &record_index, .len = sizeof(uint32_t)},
+ };
+ psa_outvec out_vec[] = {
+ {.base = size, .len = sizeof(uint32_t)},
+ };
+
+ status = API_DISPATCH(audit_core_get_record_info);
+
+ return status;
}
-enum psa_audit_err psa_audit_delete_record(const uint32_t record_index,
- const uint8_t *token,
- const uint32_t token_size)
+psa_status_t psa_audit_delete_record(const uint32_t record_index,
+ const uint8_t *token,
+ const uint32_t token_size)
{
- return (enum psa_audit_err) tfm_ns_lock_dispatch((veneer_fn)tfm_audit_veneer_delete_record,
- (uint32_t)record_index,
- (uint32_t)token,
- (uint32_t)token_size,
- 0);
+ psa_status_t status;
+ psa_invec in_vec[] = {
+ {.base = &record_index, .len = sizeof(uint32_t)},
+ {.base = token, .len = token_size},
+ };
+
+ status = API_DISPATCH_NO_OUTVEC(audit_core_delete_record);
+
+ return status;
}
-enum psa_audit_err psa_audit_add_record(const struct psa_audit_record *record)
+psa_status_t psa_audit_add_record(const struct psa_audit_record *record)
{
/* This API supports only Secure world calls. As this is the implementation
* of the Non-Secure interface, always directly return an error without
- * routing the call to TF-M in the Secure world
+ * routing the call to TF-M in the Secure world.
*/
(void)record;
- return PSA_AUDIT_ERR_NOT_SUPPORTED;
+ return PSA_ERROR_NOT_PERMITTED;
}