Skip to content

Commit 916d954

Browse files
committed
clear store handles on close
F/1105
1 parent 7e64e91 commit 916d954

4 files changed

Lines changed: 74 additions & 6 deletions

File tree

src/pkcs11_store.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -436,9 +436,7 @@ int wolfPKCS11_Store_Open(int type, CK_ULONG id1, CK_ULONG id2, int read,
436436
void wolfPKCS11_Store_Close(void* store)
437437
{
438438
struct store_handle *handle = store;
439-
/* This removes all flags (including STORE_FLAGS_OPEN) */
440-
handle->flags = 0;
441-
handle->hdr = NULL;
439+
memset(handle, 0, sizeof(*handle));
442440
}
443441

444442
int wolfPKCS11_Store_Read(void* store, unsigned char* buffer, int len)

src/psa_store.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,7 @@ int wolfPSA_Store_OpenSz(int type, unsigned long id1, unsigned long id2, int rea
442442
void wolfPSA_Store_Close(void* store)
443443
{
444444
struct store_handle *handle = store;
445-
/* This removes all flags (including STORE_FLAGS_OPEN) */
446-
handle->flags = 0;
447-
handle->hdr = NULL;
445+
memset(handle, 0, sizeof(*handle));
448446
}
449447

450448
int wolfPSA_Store_Read(void* store, unsigned char* buffer, int len)

tools/unit-tests/unit-pkcs11_store.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,39 @@ START_TEST(test_cross_sector_write_preserves_length)
318318
}
319319
END_TEST
320320

321+
START_TEST(test_close_clears_handle_state)
322+
{
323+
const int type = DYNAMIC_TYPE_RSA;
324+
const CK_ULONG id_tok = 17;
325+
const CK_ULONG id_obj = 21;
326+
void *store = NULL;
327+
struct store_handle *handle;
328+
int ret;
329+
330+
ret = mmap_file("/tmp/wolfboot-unit-keyvault.bin", vault_base,
331+
keyvault_size, NULL);
332+
ck_assert_int_eq(ret, 0);
333+
memset(vault_base, 0xEE, keyvault_size);
334+
335+
ret = wolfPKCS11_Store_Open(type, id_tok, id_obj, 0, &store);
336+
ck_assert_int_eq(ret, 0);
337+
ck_assert_ptr_nonnull(store);
338+
339+
handle = store;
340+
ck_assert_ptr_nonnull(handle->buffer);
341+
ck_assert_ptr_nonnull(handle->hdr);
342+
ck_assert_uint_ne(handle->in_buffer_offset, 0);
343+
344+
wolfPKCS11_Store_Close(store);
345+
346+
ck_assert_uint_eq(handle->flags, 0);
347+
ck_assert_uint_eq(handle->pos, 0);
348+
ck_assert_ptr_null(handle->buffer);
349+
ck_assert_ptr_null(handle->hdr);
350+
ck_assert_uint_eq(handle->in_buffer_offset, 0);
351+
}
352+
END_TEST
353+
321354
START_TEST(test_delete_object_ignores_metadata_prefix)
322355
{
323356
const int32_t type = DYNAMIC_TYPE_RSA;
@@ -356,12 +389,15 @@ Suite *wolfboot_suite(void)
356389

357390
TCase* tcase_store_and_load_objs = tcase_create("store_and_load_objs");
358391
TCase* tcase_cross_sector_write = tcase_create("cross_sector_write");
392+
TCase* tcase_close = tcase_create("close_state");
359393
TCase* tcase_delete_object = tcase_create("delete_object");
360394
tcase_add_test(tcase_store_and_load_objs, test_store_and_load_objs);
361395
tcase_add_test(tcase_cross_sector_write, test_cross_sector_write_preserves_length);
396+
tcase_add_test(tcase_close, test_close_clears_handle_state);
362397
tcase_add_test(tcase_delete_object, test_delete_object_ignores_metadata_prefix);
363398
suite_add_tcase(s, tcase_store_and_load_objs);
364399
suite_add_tcase(s, tcase_cross_sector_write);
400+
suite_add_tcase(s, tcase_close);
365401
suite_add_tcase(s, tcase_delete_object);
366402
return s;
367403
}

tools/unit-tests/unit-psa_store.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,39 @@ START_TEST(test_cross_sector_write_preserves_length)
9090
}
9191
END_TEST
9292

93+
START_TEST(test_close_clears_handle_state)
94+
{
95+
enum { type = WOLFPSA_STORE_KEY };
96+
const unsigned long id1 = 17;
97+
const unsigned long id2 = 21;
98+
void *store = NULL;
99+
struct store_handle *handle;
100+
int ret;
101+
102+
ret = mmap_file("/tmp/wolfboot-unit-psa-keyvault.bin", vault_base,
103+
keyvault_size, NULL);
104+
ck_assert_int_eq(ret, 0);
105+
memset(vault_base, 0xEE, keyvault_size);
106+
107+
ret = wolfPSA_Store_Open(type, id1, id2, 0, &store);
108+
ck_assert_int_eq(ret, 0);
109+
ck_assert_ptr_nonnull(store);
110+
111+
handle = store;
112+
ck_assert_ptr_nonnull(handle->buffer);
113+
ck_assert_ptr_nonnull(handle->hdr);
114+
ck_assert_uint_ne(handle->in_buffer_offset, 0);
115+
116+
wolfPSA_Store_Close(store);
117+
118+
ck_assert_uint_eq(handle->flags, 0);
119+
ck_assert_uint_eq(handle->pos, 0);
120+
ck_assert_ptr_null(handle->buffer);
121+
ck_assert_ptr_null(handle->hdr);
122+
ck_assert_uint_eq(handle->in_buffer_offset, 0);
123+
}
124+
END_TEST
125+
93126
START_TEST(test_delete_object_ignores_metadata_prefix)
94127
{
95128
enum { type = WOLFPSA_STORE_KEY };
@@ -125,11 +158,14 @@ Suite *wolfboot_suite(void)
125158
{
126159
Suite *s = suite_create("wolfBoot-psa-store");
127160
TCase *tcase_write = tcase_create("cross_sector_write");
161+
TCase *tcase_close = tcase_create("close_state");
128162
TCase *tcase_delete = tcase_create("delete_object");
129163

130164
tcase_add_test(tcase_write, test_cross_sector_write_preserves_length);
165+
tcase_add_test(tcase_close, test_close_clears_handle_state);
131166
tcase_add_test(tcase_delete, test_delete_object_ignores_metadata_prefix);
132167
suite_add_tcase(s, tcase_write);
168+
suite_add_tcase(s, tcase_close);
133169
suite_add_tcase(s, tcase_delete);
134170
return s;
135171
}

0 commit comments

Comments
 (0)