From 2fd9572f274ffac9c81081fc2e690e881c061a6b Mon Sep 17 00:00:00 2001 From: Valerio Setti Date: Mon, 17 Jun 2024 17:34:03 +0200 Subject: [PATCH 1/3] psasim-server: add function to reset operations slots When the client disconnects the server can clean operations slots so that upcoming clients will not hit the maximum slot limit (at least it's very unlikely to happen for normal clients). Signed-off-by: Valerio Setti --- tests/psa-client-server/psasim/src/psa_sim_crypto_server.c | 5 +++++ tests/psa-client-server/psasim/src/psa_sim_serialise.c | 6 ++++++ tests/psa-client-server/psasim/src/psa_sim_serialise.h | 2 ++ tests/psa-client-server/psasim/src/server.c | 2 ++ 4 files changed, 15 insertions(+) diff --git a/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c b/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c index da3adb0d3..30d4b26dc 100644 --- a/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c +++ b/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c @@ -2314,3 +2314,8 @@ psa_status_t psa_crypto_call(psa_msg_t msg) return ok ? PSA_SUCCESS : PSA_ERROR_GENERIC_ERROR; } + +void psa_crypto_close(void) +{ + psa_sim_serialize_reset(); +} diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.c b/tests/psa-client-server/psasim/src/psa_sim_serialise.c index 9e8c38bb5..e326637a6 100644 --- a/tests/psa-client-server/psasim/src/psa_sim_serialise.c +++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.c @@ -706,3 +706,9 @@ int psasim_deserialise_mbedtls_svc_key_id_t(uint8_t **pos, return 1; } + +void psa_sim_serialize_reset(void) +{ + memset(hash_operation_handles, 0, sizeof(hash_operation_handles)); + memset(hash_operations, 0, sizeof(hash_operations)); +} diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.h b/tests/psa-client-server/psasim/src/psa_sim_serialise.h index 9c69e65cc..721759585 100644 --- a/tests/psa-client-server/psasim/src/psa_sim_serialise.h +++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.h @@ -54,6 +54,8 @@ * don't contain pointers. */ +void psa_sim_serialize_reset(void); + /** Return how much buffer space is needed by \c psasim_serialise_begin(). * * \return The number of bytes needed in the buffer for diff --git a/tests/psa-client-server/psasim/src/server.c b/tests/psa-client-server/psasim/src/server.c index 77ce2694e..10ab5a287 100644 --- a/tests/psa-client-server/psasim/src/server.c +++ b/tests/psa-client-server/psasim/src/server.c @@ -54,6 +54,7 @@ int psa_server_main(int argc, char *argv[]) int client_disconnected = 0; char mbedtls_version[18]; extern psa_status_t psa_crypto_call(psa_msg_t msg); + extern psa_status_t psa_crypto_close(void); mbedtls_version_get_string_full(mbedtls_version); SERVER_PRINT("%s", mbedtls_version); @@ -81,6 +82,7 @@ int psa_server_main(int argc, char *argv[]) SERVER_PRINT("Got a disconnection message"); ret = PSA_SUCCESS; client_disconnected = 1; + psa_crypto_close(); break; default: SERVER_PRINT("Got an IPC call of type %d", msg.type); From aaf7e859a4bd6fdc2ed1bfa6d98430f1438bc798 Mon Sep 17 00:00:00 2001 From: Tom Cosgrove Date: Tue, 18 Jun 2024 12:31:57 +0100 Subject: [PATCH 2/3] Have psa_sim_generate.pl add psa_crypto_close() to psa_sim_crypto_server.c Signed-off-by: Tom Cosgrove --- tests/psa-client-server/psasim/src/psa_sim_generate.pl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/psa-client-server/psasim/src/psa_sim_generate.pl b/tests/psa-client-server/psasim/src/psa_sim_generate.pl index ee3894f0e..baa060e34 100755 --- a/tests/psa-client-server/psasim/src/psa_sim_generate.pl +++ b/tests/psa-client-server/psasim/src/psa_sim_generate.pl @@ -242,6 +242,16 @@ EOF return ok ? PSA_SUCCESS : PSA_ERROR_GENERIC_ERROR; } +EOF + + # Finally, add psa_crypto_close() + + print $fh < Date: Tue, 18 Jun 2024 12:32:57 +0100 Subject: [PATCH 3/3] Have psa_sim_serialise.pl generate psa_sim_serialize_reset() Signed-off-by: Tom Cosgrove --- .../psasim/src/psa_sim_serialise.c | 2 ++ .../psasim/src/psa_sim_serialise.h | 4 +++ .../psasim/src/psa_sim_serialise.pl | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.c b/tests/psa-client-server/psasim/src/psa_sim_serialise.c index e326637a6..f51133ceb 100644 --- a/tests/psa-client-server/psasim/src/psa_sim_serialise.c +++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.c @@ -711,4 +711,6 @@ void psa_sim_serialize_reset(void) { memset(hash_operation_handles, 0, sizeof(hash_operation_handles)); memset(hash_operations, 0, sizeof(hash_operations)); + memset(aead_operation_handles, 0, sizeof(aead_operation_handles)); + memset(aead_operations, 0, sizeof(aead_operations)); } diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.h b/tests/psa-client-server/psasim/src/psa_sim_serialise.h index 721759585..537730c1f 100644 --- a/tests/psa-client-server/psasim/src/psa_sim_serialise.h +++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.h @@ -54,6 +54,10 @@ * don't contain pointers. */ +/** Reset all operation slots. + * + * Should be called when all clients have disconnected. + */ void psa_sim_serialize_reset(void); /** Return how much buffer space is needed by \c psasim_serialise_begin(). diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.pl b/tests/psa-client-server/psasim/src/psa_sim_serialise.pl index e09bb818a..bbd946f24 100755 --- a/tests/psa-client-server/psasim/src/psa_sim_serialise.pl +++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.pl @@ -105,6 +105,7 @@ if ($which eq "h") { } } + print define_server_serialize_reset(@types); } else { die("internal error - shouldn't happen"); } @@ -329,6 +330,12 @@ sub h_header * don't contain pointers. */ +/** Reset all operation slots. + * + * Should be called when all clients have disconnected. + */ +void psa_sim_serialize_reset(void); + /** Return how much buffer space is needed by \c psasim_serialise_begin(). * * \return The number of bytes needed in the buffer for @@ -907,6 +914,33 @@ int psasim_deserialise_begin(uint8_t **pos, size_t *remaining) EOF } +# Return the code for psa_sim_serialize_reset() +sub define_server_serialize_reset +{ + my @types = @_; + + my $code = <