Reject zero-lengths in psa_crypto_copy_and_free()
Zero-length buffers should be represented in the
psa_crypto_buffer_copy_t struct as NULL if it was created in
psa_crypto_alloc_and_copy(), so reject non-NULL zero-length buffers.
Signed-off-by: David Horstmann <david.horstmann@arm.com>
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 02aa0eb..33068af 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -8521,7 +8521,17 @@
psa_status_t psa_crypto_copy_and_free(psa_crypto_buffer_copy_t *buffers)
{
+ if ((buffers->input != NULL) && (buffers->input_len == 0)) {
+ /* Reject zero-length buffers, these should have been represented by
+ * NULL in psa_crypto_alloc_and_copy() */
+ return PSA_ERROR_INVALID_ARGUMENT;
+ }
if (buffers->output != NULL) {
+ if (buffers->output_len == 0) {
+ /* Reject zero-length buffers, these should have been represented
+ * by NULL in psa_crypto_alloc_and_copy() */
+ return PSA_ERROR_INVALID_ARGUMENT;
+ }
if (buffers->output_original == NULL) {
/* Output is non-NULL but original output is NULL. The argument
* buffers is invalid. Return an error as we have no original to