Skip to content

Commit 96c0e9c

Browse files
authored
Merge pull request #12875 from OpenNuvoton/nuvoton_kvstore_devicekey_buffer_overrun
KVStore: Fix buffer overrun when device key size doesn't match
2 parents e3b5f35 + 405ee47 commit 96c0e9c

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

features/device_key/TESTS/device_key/functionality/main.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void generate_derived_key_consistency_16_byte_key_long_consistency_test(char *ke
106106
int ret = inner_store->reset();
107107
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
108108

109-
ret = DeviceKey::get_instance().generate_root_of_trust();
109+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_16BYTE);
110110
if (ret != DEVICEKEY_SUCCESS) {
111111
ret = inject_dummy_rot_key();
112112
}
@@ -170,7 +170,7 @@ void generate_derived_key_consistency_32_byte_key_long_consistency_test(char *ke
170170
int ret = inner_store->reset();
171171
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
172172

173-
ret = DeviceKey::get_instance().generate_root_of_trust();
173+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_32BYTE);
174174
if (ret != DEVICEKEY_SUCCESS) {
175175
ret = inject_dummy_rot_key();
176176
}
@@ -326,7 +326,7 @@ void generate_derived_key_consistency_16_byte_key_test()
326326
int ret = inner_store->reset();
327327
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
328328

329-
ret = DeviceKey::get_instance().generate_root_of_trust();
329+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_16BYTE);
330330
if (ret != DEVICEKEY_SUCCESS) {
331331
ret = inject_dummy_rot_key();
332332
}
@@ -366,7 +366,7 @@ void generate_derived_key_consistency_32_byte_key_test()
366366
int ret = inner_store->reset();
367367
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
368368

369-
ret = DeviceKey::get_instance().generate_root_of_trust();
369+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_32BYTE);
370370
if (ret != DEVICEKEY_SUCCESS) {
371371
ret = inject_dummy_rot_key();
372372
}
@@ -406,7 +406,7 @@ void generate_derived_key_key_type_16_test()
406406
int ret = inner_store->reset();
407407
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
408408

409-
ret = DeviceKey::get_instance().generate_root_of_trust();
409+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_16BYTE);
410410
if (ret != DEVICEKEY_SUCCESS) {
411411
ret = inject_dummy_rot_key();
412412
}
@@ -442,7 +442,7 @@ void generate_derived_key_key_type_32_test()
442442
int ret = inner_store->reset();
443443
TEST_ASSERT_EQUAL_INT(DEVICEKEY_SUCCESS, ret);
444444

445-
ret = DeviceKey::get_instance().generate_root_of_trust();
445+
ret = DeviceKey::get_instance().generate_root_of_trust(DEVICE_KEY_32BYTE);
446446
if (ret != DEVICEKEY_SUCCESS) {
447447
ret = inject_dummy_rot_key();
448448
}

features/storage/kvstore/tdbstore/TDBStore.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,9 @@ int TDBStore::do_reserved_data_get(void *reserved_data, size_t reserved_data_buf
14241424
if (crc == trailer.crc) {
14251425
// Correct data, copy it and return to caller
14261426
if (reserved_data) {
1427+
if (reserved_data_buf_size < trailer.data_size) {
1428+
return MBED_ERROR_INVALID_SIZE;
1429+
}
14271430
memcpy(reserved_data, buf, trailer.data_size);
14281431
}
14291432
if (actual_data_size) {

0 commit comments

Comments
 (0)