Adapt partitons

pull/9823/head
Oren Cohen 2019-02-22 20:31:48 +02:00 committed by Oren Cohen
parent aad114aa55
commit dfbc7b6b7a
9 changed files with 50 additions and 90 deletions

View File

@ -24,10 +24,10 @@ uint8_t data[MSG_BUF_SIZE] = {0};
void server_main(void *ptr)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
while (1) {
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(CLIENT_TESTS_PART1_WAIT_ANY_SID_MSK, PSA_BLOCK);
if (signals & PART1_ROT_SRV1_MSK) {
psa_get(PART1_ROT_SRV1_MSK, &msg);
switch (msg.type) {

View File

@ -36,7 +36,7 @@ static void init_num_of_tests()
void part1_main(void *ptr)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_status_t test_status = PSA_SUCCESS; // status of the api calls during the test
psa_status_t test_result = PSA_SUCCESS; // result of the critical section of the test
test_action_t action;
@ -44,9 +44,9 @@ void part1_main(void *ptr)
init_num_of_tests();
while (1) {
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(CONTROL_MSK, PSA_BLOCK);
if (0 == (signals & CONTROL_MSK)) {
SPM_PANIC("returned from psa_wait_any without CONTROL_ROT_SRV bit on signals=(0x%08x)\n", signals);
SPM_PANIC("returned from psa_wait without CONTROL_ROT_SRV bit on signals=(0x%08x)\n", signals);
}
psa_get(CONTROL_MSK, &msg);

View File

@ -25,14 +25,14 @@ static psa_msg_t msg = {0};
void part2_main(void *ptr)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t len = 0;
char *str = NULL;
while (1) {
signals = psa_wait_any(PSA_BLOCK);
if (0 == (signals & (ROT_SRV_REVERSE_MSK | ROT_SRV_DB_TST_MSK))) {
SPM_PANIC("returned from psa_wait_any without ROT_SRV_REVERSE_MSK or ROT_SRV_DB_TST_MSK bit on\n");
signals = psa_wait(SERVER_TEST_PART2_WAIT_ANY_SID_MSK, PSA_BLOCK);
if (0 == (signals & SERVER_TEST_PART2_WAIT_ANY_SID_MSK)) {
SPM_PANIC("returned from psa_wait without ROT_SRV_REVERSE_MSK or ROT_SRV_DB_TST_MSK bit on\n");
}
if (signals & ROT_SRV_REVERSE_MSK) {
psa_get(ROT_SRV_REVERSE_MSK, &msg);
@ -73,7 +73,7 @@ void part2_main(void *ptr)
psa_get(ROT_SRV_DB_TST_MSK, &msg);
switch (msg.type) {
case PSA_IPC_CALL: {
int32_t caller_part_id = psa_identity(msg.handle);
int32_t caller_part_id = msg.client_id;
// Doorbell contract is valid only between secure partitions
if (PSA_NSPE_IDENTIFIER == caller_part_id) {
SPM_PANIC("Caller partition is non secure\n");

View File

@ -31,7 +31,7 @@ static psa_status_t process_connect_request(void)
{
psa_status_t res = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = psa_wait_any(PSA_BLOCK);
psa_signal_t signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
res = PSA_TEST_ERROR;
}
@ -54,7 +54,7 @@ static psa_status_t process_disconnect_request(void)
{
psa_status_t res = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = psa_wait_any(PSA_BLOCK);
psa_signal_t signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
res = PSA_TEST_ERROR;
}
@ -72,8 +72,8 @@ static psa_status_t process_disconnect_request(void)
PSA_TEST_SERVER(wait_timeout)
{
psa_status_t test_status = PSA_SUCCESS;
uint32_t signals = psa_wait_any(7);
*status_ptr = ((signals & TEST_MSK) == 0) ? PSA_SUCCESS : PSA_TEST_ERROR;;
psa_signal_t signals = psa_wait(TEST_MSK, PSA_POLL);
*status_ptr = ((signals & TEST_MSK) == 0) ? PSA_SUCCESS : PSA_TEST_ERROR;
test_status = process_connect_request();
if (test_status != PSA_SUCCESS) {
@ -94,7 +94,7 @@ PSA_TEST_SERVER(identity_during_connect)
psa_msg_t msg = {0};
int32_t identity = 0;
uint32_t signals = psa_wait_any(PSA_BLOCK);
psa_signal_t signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -104,7 +104,7 @@ PSA_TEST_SERVER(identity_during_connect)
test_status = ((test_status != PSA_SUCCESS) ? test_status : PSA_TEST_ERROR);
}
identity = psa_identity(msg.handle);
identity = msg.client_id;
*status_ptr = (identity == -1) ? PSA_SUCCESS : PSA_TEST_ERROR;
psa_reply(msg.handle, PSA_SUCCESS);
@ -121,14 +121,14 @@ PSA_TEST_SERVER(identity_during_call)
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
int32_t identity = 0;
uint32_t signals = 0;
psa_signal_t signals = 0;
test_status = process_connect_request();
if (test_status != PSA_SUCCESS) {
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -138,7 +138,7 @@ PSA_TEST_SERVER(identity_during_call)
test_status = ((test_status != PSA_SUCCESS) ? test_status : PSA_TEST_ERROR);
}
identity = psa_identity(msg.handle);
identity = msg.client_id;
*status_ptr = (identity == -1) ? PSA_SUCCESS : PSA_TEST_ERROR;
psa_reply(msg.handle, PSA_SUCCESS);
@ -154,7 +154,7 @@ PSA_TEST_SERVER(msg_size_assertion)
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t read_size = 0;
char *buff = malloc(sizeof(char) * 11);
@ -169,7 +169,7 @@ PSA_TEST_SERVER(msg_size_assertion)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -201,7 +201,7 @@ PSA_TEST_SERVER(reject_connection)
{
psa_status_t res = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = psa_wait_any(PSA_BLOCK);
psa_signal_t signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
res = PSA_TEST_ERROR;
}
@ -218,7 +218,7 @@ PSA_TEST_SERVER(reject_connection)
PSA_TEST_SERVER(read_at_outofboud_offset)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
@ -229,7 +229,7 @@ PSA_TEST_SERVER(read_at_outofboud_offset)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -258,7 +258,7 @@ PSA_TEST_SERVER(msg_read_truncation)
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t read_size = 0;
char *buff = malloc(sizeof(char) * 11);
if (NULL == buff) {
@ -272,7 +272,7 @@ PSA_TEST_SERVER(msg_read_truncation)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -304,7 +304,7 @@ PSA_TEST_SERVER(skip_zero)
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t read_size = 0;
size_t skip_size = 0;
char *buff = malloc(sizeof(char) * 11);
@ -318,7 +318,7 @@ PSA_TEST_SERVER(skip_zero)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -350,7 +350,7 @@ PSA_TEST_SERVER(skip_some)
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t read_size1 = 0;
size_t read_size2 = 0;
size_t skip_size = 0;
@ -365,7 +365,7 @@ PSA_TEST_SERVER(skip_some)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -399,7 +399,7 @@ PSA_TEST_SERVER(skip_more_than_left)
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
psa_msg_t msg = {0};
uint32_t signals = 0;
psa_signal_t signals = 0;
size_t read_size1 = 0;
size_t read_size2 = 0;
size_t skip_size = 0;
@ -414,7 +414,7 @@ PSA_TEST_SERVER(skip_more_than_left)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -445,7 +445,7 @@ PSA_TEST_SERVER(skip_more_than_left)
PSA_TEST_SERVER(rhandle_factorial)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
factorial_data_t *num = NULL;
factorial_data_t *asserted_ptr = NULL;
@ -454,9 +454,9 @@ PSA_TEST_SERVER(rhandle_factorial)
uint32_t disconnect_count = 0;
while (1) {
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if (0 == (signals & TEST_MSK)) {
SPM_PANIC("returned from psa_wait_any without ROT_SRV_FACTORIAL bit on\n");
SPM_PANIC("returned from psa_wait without TEST_MSK bit on\n");
}
psa_get(TEST_MSK, &msg);
@ -535,7 +535,7 @@ PSA_TEST_SERVER(rhandle_factorial)
PSA_TEST_SERVER(cross_partition_call)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
@ -556,7 +556,7 @@ PSA_TEST_SERVER(cross_partition_call)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -606,7 +606,7 @@ PSA_TEST_SERVER(cross_partition_call)
// Test a common DOORBELL scenario
PSA_TEST_SERVER(doorbell_test)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
psa_status_t test_status = PSA_SUCCESS;
psa_status_t disconnect_status = PSA_SUCCESS;
@ -618,7 +618,7 @@ PSA_TEST_SERVER(doorbell_test)
return test_status;
}
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(TEST_MSK, PSA_BLOCK);
if ((signals & TEST_MSK) == 0) {
test_status = PSA_TEST_ERROR;
}
@ -640,7 +640,7 @@ PSA_TEST_SERVER(doorbell_test)
if (partition_call_status == PSA_SUCCESS) {
// Wait for doorball notification - Only after that call psa_reply() for the client called you
signals = psa_wait_interrupt(PSA_DOORBELL, PSA_BLOCK);
signals = psa_wait(PSA_DOORBELL, PSA_BLOCK);
if ((signals & PSA_DOORBELL) == 0) {
partition_call_status = PSA_TEST_ERROR;
}

View File

@ -45,7 +45,7 @@ void part1_main(void *ptr)
while (1) {
signals = psa_wait_any(PSA_BLOCK);
signals = psa_wait(ROT_SRV1_MSK, PSA_BLOCK);
if ((signals & ROT_SRV1_MSK) != ROT_SRV1_MSK) {
SPM_PANIC("Received unknown signal (0x%08x)\n", signals);
}
@ -54,7 +54,7 @@ void part1_main(void *ptr)
psa_get(ROT_SRV1_MSK, &msg);
if (msg.handle != PSA_NULL_HANDLE) {
client_id = psa_identity(msg.handle);
client_id = msg.client_id;
if (client_id != PSA_NSPE_IDENTIFIER) {
SPM_PANIC("Received message from unexpected source (0x%08x)\n", client_id);
}

View File

@ -246,11 +246,11 @@ void psa_get(psa_signal_t signum, psa_msg_t *msg)
// signum must be ONLY ONE of the bits of curr_partition->flags_rot_srv
bool is_one_bit = ((signum != 0) && !(signum & (signum - 1)));
if (!is_one_bit || !(signum & curr_partition->flags_rot_srv)) {
if (!is_one_bit || !(signum & curr_partition->flags)) {
SPM_PANIC(
"signum 0x%x must have only 1 bit ON and must be a subset of 0x%x!\n",
signum,
curr_partition->flags_rot_srv
curr_partition->flags
);
}
@ -540,7 +540,7 @@ void psa_eoi(uint32_t irq_signal)
SPM_PANIC("Try to clear an interrupt flag without declaring IRQ");
}
if (0 == (curr_partition->flags_interrupts & irq_signal)) {
if (0 == (curr_partition->flags & irq_signal)) {
SPM_PANIC("Signal %d not in irq range\n", irq_signal);
}

View File

@ -515,12 +515,7 @@ static void psa_hash_operation(void)
case PSA_HASH_CLONE_BEGIN: {
size_t index = 0;
#if defined(TARGET_MBED_SPM)
status = reserve_hash_clone(psa_identity(msg.handle), msg.rhandle, &index);
#else
status = reserve_hash_clone(msg.client_id, msg.rhandle, &index);
#endif
if (status == PSA_SUCCESS) {
psa_write(msg.handle, 0, &index, sizeof(index));
}
@ -536,11 +531,7 @@ static void psa_hash_operation(void)
SPM_PANIC("SPM read length mismatch");
}
#if defined(TARGET_MBED_SPM)
status = get_hash_clone(index, psa_identity(msg.handle), &hash_clone);
#else
status = get_hash_clone(index, msg.client_id, &hash_clone);
#endif
if (status == PSA_SUCCESS) {
status = psa_hash_clone(hash_clone->source_operation, msg.rhandle);
release_hash_clone(hash_clone);
@ -1695,12 +1686,8 @@ void psa_crypto_generator_operations(void)
void crypto_main(void *ptr)
{
while (1) {
uint32_t signals = 0;
#if defined(TARGET_MBED_SPM)
signals = psa_wait_any(PSA_BLOCK);
#else
psa_signal_t signals = 0;
signals = psa_wait(CRYPTO_SRV_WAIT_ANY_SID_MSK, PSA_BLOCK);
#endif
if (signals & PSA_CRYPTO_INIT) {
psa_crypto_init_operation();
}

View File

@ -87,15 +87,10 @@ static void message_handler(psa_msg_t *msg, SignalHandler handler)
void platform_partition_entry(void *ptr)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
while (1) {
#if defined(TARGET_MBED_SPM)
signals = psa_wait_any(PSA_BLOCK);
#else
signals = psa_wait(PLATFORM_WAIT_ANY_SID_MSK, PSA_BLOCK);
#endif
if ((signals & PSA_PLATFORM_LC_GET_MSK) != 0) {
psa_get(PSA_PLATFORM_LC_GET_MSK, &msg);
message_handler(&msg, lifecycle_get);

View File

@ -70,11 +70,8 @@ static psa_status_t storage_set(psa_msg_t *msg)
free(data);
return PSA_ERROR_STORAGE_FAILURE;
}
#if defined(TARGET_MBED_SPM)
psa_status_t status = psa_its_set_impl(psa_identity(msg->handle), key, alloc_size, data, flags);
#else
psa_status_t status = psa_its_set_impl(msg->client_id, key, alloc_size, data, flags);
#endif
memset(data, 0, alloc_size);
free(data);
return status;
@ -102,12 +99,7 @@ static psa_status_t storage_get(psa_msg_t *msg)
return PSA_ERROR_STORAGE_FAILURE;
}
#if defined(TARGET_MBED_SPM)
psa_status_t status = psa_its_get_impl(psa_identity(msg->handle), key, offset, msg->out_size[0], data);
#else
psa_status_t status = psa_its_get_impl(msg->client_id, key, offset, msg->out_size[0], data);
#endif
if (status == PSA_SUCCESS) {
psa_write(msg->handle, 0, data, msg->out_size[0]);
}
@ -130,12 +122,7 @@ static psa_status_t storage_info(psa_msg_t *msg)
return PSA_DROP_CONNECTION;
}
#if defined(TARGET_MBED_SPM)
psa_status_t status = psa_its_get_info_impl(psa_identity(msg->handle), key, &info);
#else
psa_status_t status = psa_its_get_info_impl(msg->client_id, key, &info);
#endif
if (status == PSA_SUCCESS) {
psa_write(msg->handle, 0, &info, msg->out_size[0]);
}
@ -155,11 +142,7 @@ static psa_status_t storage_remove(psa_msg_t *msg)
return PSA_DROP_CONNECTION;
}
#if defined(TARGET_MBED_SPM)
return psa_its_remove_impl(psa_identity(msg->handle), key);
#else
return psa_its_remove_impl(msg->client_id, key);
#endif
}
static psa_status_t storage_reset(psa_msg_t *msg)
{
@ -191,18 +174,13 @@ static void message_handler(psa_msg_t *msg, SignalHandler handler)
void its_entry(void *ptr)
{
uint32_t signals = 0;
psa_signal_t signals = 0;
psa_msg_t msg = {0};
while (1) {
#if defined(TARGET_MBED_SPM)
signals = psa_wait_any(PSA_BLOCK);
#else
signals = psa_wait(ITS_WAIT_ANY_SID_MSK, PSA_BLOCK);
#endif
// KVStore initiation:
// - Must be done after the psa_wait_any() call since only now we know OS initialization is done
// - Must be done after the psa_wait() call since only now we know OS initialization is done
// - Repeating calls has no effect
int kv_status = kv_init_storage_config();
if (kv_status != MBED_SUCCESS) {