Skip to content

Commit 4625221

Browse files
authored
Merge pull request #10746 from davidsaada/david_fix_ps_flags
PSA protected storage: Add encrypt & RB protect flags by default to set.
2 parents eb12029 + dcd2c29 commit 4625221

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed

components/TARGET_PSA/services/storage/common/psa_storage_common_impl.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -185,24 +185,15 @@ static void generate_fn(char *tdb_filename, uint32_t tdb_filename_size, psa_stor
185185

186186
psa_status_t psa_storage_set_impl(KVStore *kvstore, int32_t pid, psa_storage_uid_t uid,
187187
uint32_t data_length, const void *p_data,
188-
psa_storage_create_flags_t create_flags)
188+
uint32_t kv_create_flags)
189189
{
190-
if ((create_flags & (~FLAGS_MSK)) != 0) {
191-
return PSA_ERROR_NOT_SUPPORTED;
192-
}
193-
194190
if (uid == 0) {
195191
return PSA_ERROR_INVALID_ARGUMENT;
196192
}
197193
// Generate KVStore key
198194
char kv_key[PSA_STORAGE_FILE_NAME_MAX] = {'\0'};
199195
generate_fn(kv_key, PSA_STORAGE_FILE_NAME_MAX, uid, pid);
200196

201-
uint32_t kv_create_flags = 0;
202-
if (create_flags & PSA_STORAGE_FLAG_WRITE_ONCE) {
203-
kv_create_flags = KVStore::WRITE_ONCE_FLAG;
204-
}
205-
206197
int status = kvstore->set(kv_key, p_data, data_length, kv_create_flags);
207198

208199
return convert_status(status);

components/TARGET_PSA/services/storage/common/psa_storage_common_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ typedef psa_status_t (*migrate_func_t)(mbed::KVStore *kvstore, const psa_storage
3636

3737
void psa_storage_handle_version(mbed::KVStore *kvstore, const char *version_key, const psa_storage_version_t *version,
3838
migrate_func_t migrate_func);
39-
psa_status_t psa_storage_set_impl(mbed::KVStore *kvstore, int32_t pid, psa_storage_uid_t uid, uint32_t data_length, const void *p_data, psa_storage_create_flags_t create_flags);
39+
psa_status_t psa_storage_set_impl(mbed::KVStore *kvstore, int32_t pid, psa_storage_uid_t uid, uint32_t data_length, const void *p_data, uint32_t kv_create_flags);
4040
psa_status_t psa_storage_get_impl(mbed::KVStore *kvstore, int32_t pid, psa_storage_uid_t uid, uint32_t data_offset, uint32_t data_length, void *p_data);
4141
psa_status_t psa_storage_get_info_impl(mbed::KVStore *kvstore, int32_t pid, psa_storage_uid_t uid, struct psa_storage_info_t *p_info);
4242
psa_status_t psa_storage_remove_impl(mbed::KVStore *kvstore, int32_t pid, psa_storage_uid_t uid);

components/TARGET_PSA/services/storage/its/COMPONENT_PSA_SRV_IMPL/pits_impl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ psa_status_t psa_its_set_impl(int32_t pid, psa_storage_uid_t uid, uint32_t data_
8787
its_init();
8888
}
8989

90+
if (create_flags & ~PSA_STORAGE_FLAG_WRITE_ONCE) {
91+
return PSA_ERROR_NOT_SUPPORTED;
92+
}
93+
9094
return psa_storage_set_impl(kvstore, pid, uid, data_length, p_data, create_flags);
9195
}
9296

components/TARGET_PSA/services/storage/ps/COMPONENT_NSPE/protected_storage.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ extern "C"
3939
#define PSA_PS_GLOBAL_PID 1
4040

4141
static KVStore *kvstore = NULL;
42+
static uint32_t def_kvstore_flags = 0;
4243

4344
MBED_WEAK psa_status_t ps_version_migrate(KVStore *kvstore,
4445
const psa_storage_version_t *old_version, const psa_storage_version_t *new_version)
@@ -61,12 +62,18 @@ static void ps_init(void)
6162
KVMap &kv_map = KVMap::get_instance();
6263
psa_storage_version_t version = {PSA_PS_API_VERSION_MAJOR, PSA_PS_API_VERSION_MINOR};
6364
kvstore = kv_map.get_main_kv_instance(STR_EXPAND(MBED_CONF_STORAGE_DEFAULT_KV));
64-
if (!kvstore) {
65+
KVStore *int_kvstore = kv_map.get_internal_kv_instance(STR_EXPAND(MBED_CONF_STORAGE_DEFAULT_KV));;
66+
if (!kvstore || !int_kvstore) {
6567
// Can only happen due to system misconfiguration.
6668
// Thus considered as unrecoverable error for runtime.
6769
error("Failed getting kvstore instance\n");
6870
}
6971

72+
def_kvstore_flags = 0;
73+
if (kvstore != int_kvstore) {
74+
def_kvstore_flags = KVStore::REQUIRE_CONFIDENTIALITY_FLAG | KVStore::REQUIRE_REPLAY_PROTECTION_FLAG;
75+
}
76+
7077
psa_storage_handle_version(kvstore, PS_VERSION_KEY, &version, ps_version_migrate);
7178
}
7279

@@ -83,7 +90,16 @@ psa_status_t psa_ps_set(psa_storage_uid_t uid, uint32_t data_length, const void
8390
ps_init();
8491
}
8592

86-
return psa_storage_set_impl(kvstore, PSA_PS_GLOBAL_PID, uid, data_length, p_data, create_flags);
93+
if (create_flags & ~PSA_STORAGE_FLAG_WRITE_ONCE) {
94+
return PSA_ERROR_NOT_SUPPORTED;
95+
}
96+
97+
uint32_t kv_create_flags = def_kvstore_flags;
98+
if (create_flags & PSA_STORAGE_FLAG_WRITE_ONCE) {
99+
kv_create_flags |= KVStore::WRITE_ONCE_FLAG;
100+
}
101+
102+
return psa_storage_set_impl(kvstore, PSA_PS_GLOBAL_PID, uid, data_length, p_data, kv_create_flags);
87103
}
88104

89105
psa_status_t psa_ps_get(psa_storage_uid_t uid, uint32_t data_offset, uint32_t data_length, void *p_data)

0 commit comments

Comments
 (0)