PSA crypto sim's server wrappers need to free deseraliased buffers when they're no longer needed

Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com>
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 7a80682..7e874d1 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
@@ -57,6 +57,7 @@
 
 fail:
     free(result);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -125,6 +126,7 @@
 
 fail:
     free(result);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -200,6 +202,7 @@
 
 fail:
     free(result);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -274,10 +277,17 @@
     *out_params = result;
     *out_params_len = result_size;
 
+    free(input);
+    free(hash);
+
     return 1;   // success
 
 fail:
     free(result);
+
+    free(input);
+    free(hash);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -371,10 +381,17 @@
     *out_params = result;
     *out_params_len = result_size;
 
+    free(input);
+    free(hash);
+
     return 1;   // success
 
 fail:
     free(result);
+
+    free(input);
+    free(hash);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -466,10 +483,15 @@
     *out_params = result;
     *out_params_len = result_size;
 
+    free(hash);
+
     return 1;   // success
 
 fail:
     free(result);
+
+    free(hash);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -545,6 +567,7 @@
 
 fail:
     free(result);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -617,10 +640,15 @@
     *out_params = result;
     *out_params_len = result_size;
 
+    free(input);
+
     return 1;   // success
 
 fail:
     free(result);
+
+    free(input);
+
     return 0;       // This shouldn't happen!
 }
 
@@ -693,10 +721,15 @@
     *out_params = result;
     *out_params_len = result_size;
 
+    free(hash);
+
     return 1;   // success
 
 fail:
     free(result);
+
+    free(hash);
+
     return 0;       // This shouldn't happen!
 }
 
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 9eef1e5..7fea72c 100755
--- a/tests/psa-client-server/psasim/src/psa_sim_generate.pl
+++ b/tests/psa-client-server/psasim/src/psa_sim_generate.pl
@@ -484,6 +484,8 @@
     my $ret_name = $f->{return}->{name};
     my $ret_default = $f->{return}->{default};
 
+    my @buffers = ();           # We need to free() these on exit
+
     print $fh <<EOF;
 
 // Returns 1 for success, 0 for failure
@@ -509,6 +511,7 @@
     uint8_t *$n1 = NULL;
     size_t $n2;
 EOF
+            push(@buffers, $n1);        # Add to the list to be free()d at end
         } else {
             $argname =~ s/^\*//;        # Remove any leading *
             print $fh <<EOF;
@@ -672,15 +675,19 @@
         }
     }
 
+    my $free_buffers = join("", map { "    free($_);\n" } @buffers);
+    $free_buffers = "\n" . $free_buffers if length($free_buffers);
+
     print $fh <<EOF;
 
     *out_params = result;
     *out_params_len = result_size;
-
+$free_buffers
     return 1;   // success
 
 fail:
     free(result);
+$free_buffers
     return 0;       // This shouldn't happen!
 }
 EOF