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>
This commit is contained in:
Tom Cosgrove 2024-05-29 22:48:45 +01:00
parent ca0c147354
commit 8bfb758e87
2 changed files with 41 additions and 1 deletions

View File

@ -57,6 +57,7 @@ int psa_crypto_init_wrapper(
fail:
free(result);
return 0; // This shouldn't happen!
}
@ -125,6 +126,7 @@ int psa_hash_abort_wrapper(
fail:
free(result);
return 0; // This shouldn't happen!
}
@ -200,6 +202,7 @@ int psa_hash_clone_wrapper(
fail:
free(result);
return 0; // This shouldn't happen!
}
@ -274,10 +277,17 @@ int psa_hash_compare_wrapper(
*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 @@ int psa_hash_compute_wrapper(
*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 @@ int psa_hash_finish_wrapper(
*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 @@ int psa_hash_setup_wrapper(
fail:
free(result);
return 0; // This shouldn't happen!
}
@ -617,10 +640,15 @@ int psa_hash_update_wrapper(
*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 @@ int psa_hash_verify_wrapper(
*out_params = result;
*out_params_len = result_size;
free(hash);
return 1; // success
fail:
free(result);
free(hash);
return 0; // This shouldn't happen!
}

View File

@ -484,6 +484,8 @@ sub output_server_wrapper
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 @@ EOF
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 @@ EOF
}
}
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