Skip to content

Commit 3d3a558

Browse files
author
Seppo Takalo
committed
SecureStore: Validate internal header size before using its values.
1 parent a79e260 commit 3d3a558

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

features/storage/kvstore/securestore/SecureStore.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ int SecureStore::do_get(const char *key, void *buffer, size_t buffer_size, size_
530530
uint8_t *dest_buf;
531531
bool enc_started = false, auth_started = false;
532532
uint32_t create_flags;
533+
size_t read_len;
533534

534535
if (!is_valid_key(key)) {
535536
return MBED_ERROR_INVALID_ARGUMENT;
@@ -548,7 +549,7 @@ int SecureStore::do_get(const char *key, void *buffer, size_t buffer_size, size_
548549
}
549550
}
550551

551-
ret = _underlying_kv->get(key, &ih->metadata, sizeof(record_metadata_t));
552+
ret = _underlying_kv->get(key, &ih->metadata, sizeof(record_metadata_t), &read_len);
552553
if (ret) {
553554
// In case we have the key in the RBP KV, then even if the key wasn't found in
554555
// the underlying KV, we may have been exposed to an attack. Return an RBP authentication error.
@@ -558,6 +559,12 @@ int SecureStore::do_get(const char *key, void *buffer, size_t buffer_size, size_
558559
goto end;
559560
}
560561

562+
// Validate header size
563+
if ((read_len != sizeof(record_metadata_t)) || (ih->metadata.metadata_size != sizeof(record_metadata_t))) {
564+
ret = MBED_ERROR_RBP_AUTHENTICATION_FAILED;
565+
goto end;
566+
}
567+
561568
create_flags = ih->metadata.create_flags;
562569
if (!_rbp_kv) {
563570
create_flags &= ~REQUIRE_REPLAY_PROTECTION_FLAG;

0 commit comments

Comments
 (0)