Skip to content

Commit 19b8381

Browse files
author
itayzafrir
committed
Do not allocate zero sized buffers - keys
1 parent f3294ef commit 19b8381

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

components/TARGET_PSA/services/crypto/COMPONENT_SPE/psa_crypto_partition.c

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,26 +1212,25 @@ static void psa_key_management_operation(void)
12121212
size_t key_length = msg.in_size[1];
12131213
uint8_t *key = NULL;
12141214

1215-
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle,
1216-
partition_id)) {
1215+
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle, partition_id)) {
12171216
status = PSA_ERROR_INVALID_HANDLE;
12181217
break;
12191218
}
12201219

1221-
key = mbedtls_calloc(1, key_length);
1222-
if (key == NULL) {
1223-
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1224-
break;
1220+
if (key_length > 0) {
1221+
key = mbedtls_calloc(1, key_length);
1222+
if (key == NULL) {
1223+
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1224+
break;
1225+
}
12251226
}
12261227

12271228
bytes_read = psa_read(msg.handle, 1, key, key_length);
12281229
if (bytes_read != key_length) {
12291230
SPM_PANIC("SPM read length mismatch");
12301231
}
12311232

1232-
status = psa_import_key(psa_key_mng.handle,
1233-
psa_key_mng.type,
1234-
key, key_length);
1233+
status = psa_import_key(psa_key_mng.handle, psa_key_mng.type, key, key_length);
12351234
mbedtls_free(key);
12361235
break;
12371236
}
@@ -1277,26 +1276,25 @@ static void psa_key_management_operation(void)
12771276
size_t data_length;
12781277
uint8_t *key = NULL;
12791278

1280-
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle,
1281-
partition_id)) {
1279+
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle, partition_id)) {
12821280
status = PSA_ERROR_INVALID_HANDLE;
12831281
break;
12841282
}
12851283

1286-
key = mbedtls_calloc(1, key_length);
1287-
if (key == NULL) {
1288-
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1289-
break;
1284+
if (key_length > 0) {
1285+
key = mbedtls_calloc(1, key_length);
1286+
if (key == NULL) {
1287+
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1288+
break;
1289+
}
12901290
}
12911291

1292-
status = psa_export_key(psa_key_mng.handle, key,
1293-
key_length, &data_length);
1292+
status = psa_export_key(psa_key_mng.handle, key, key_length, &data_length);
12941293
if (status == PSA_SUCCESS) {
12951294
psa_write(msg.handle, 0, key, data_length);
12961295
}
1296+
psa_write(msg.handle, 1, &data_length, sizeof(size_t));
12971297

1298-
psa_write(msg.handle, 1,
1299-
&data_length, sizeof(size_t));
13001298
mbedtls_free(key);
13011299
break;
13021300
}
@@ -1306,26 +1304,25 @@ static void psa_key_management_operation(void)
13061304
size_t data_length;
13071305
uint8_t *key = NULL;
13081306

1309-
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle,
1310-
partition_id)) {
1307+
if (!psa_crypto_access_control_is_handle_permitted(psa_key_mng.handle, partition_id)) {
13111308
status = PSA_ERROR_INVALID_HANDLE;
13121309
break;
13131310
}
13141311

1315-
key = mbedtls_calloc(1, key_length);
1316-
if (key == NULL) {
1317-
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1318-
break;
1312+
if (key_length > 0) {
1313+
key = mbedtls_calloc(1, key_length);
1314+
if (key == NULL) {
1315+
status = PSA_ERROR_INSUFFICIENT_MEMORY;
1316+
break;
1317+
}
13191318
}
13201319

1321-
status = psa_export_public_key(psa_key_mng.handle, key,
1322-
key_length, &data_length);
1320+
status = psa_export_public_key(psa_key_mng.handle, key, key_length, &data_length);
13231321
if (status == PSA_SUCCESS) {
13241322
psa_write(msg.handle, 0, key, data_length);
13251323
}
1324+
psa_write(msg.handle, 1, &data_length, sizeof(size_t));
13261325

1327-
psa_write(msg.handle, 1,
1328-
&data_length, sizeof(size_t));
13291326
mbedtls_free(key);
13301327
break;
13311328
}

0 commit comments

Comments
 (0)