Skip to content

Commit 3e706be

Browse files
committed
fix store delete_object header offset
F/724
1 parent f94d9d2 commit 3e706be

4 files changed

Lines changed: 70 additions & 2 deletions

File tree

src/pkcs11_store.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ static void check_vault(void)
227227

228228
static void delete_object(int32_t type, uint32_t tok_id, uint32_t obj_id)
229229
{
230-
struct obj_hdr *hdr = (struct obj_hdr *)cached_sector;
230+
struct obj_hdr *hdr = (struct obj_hdr *)(cached_sector + STORE_PRIV_HDR_OFFSET);
231231
check_vault();
232232
memcpy(cached_sector, vault_base, WOLFBOOT_SECTOR_SIZE);
233233

src/psa_store.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ static void check_vault(void)
226226

227227
static void delete_object(int32_t type, uint32_t tok_id, uint32_t obj_id)
228228
{
229-
struct obj_hdr *hdr = (struct obj_hdr *)cached_sector;
229+
struct obj_hdr *hdr = (struct obj_hdr *)(cached_sector + STORE_PRIV_HDR_OFFSET);
230230
check_vault();
231231
memcpy(cached_sector, vault_base, WOLFBOOT_SECTOR_SIZE);
232232

tools/unit-tests/unit-pkcs11_store.c

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

321+
START_TEST(test_delete_object_ignores_metadata_prefix)
322+
{
323+
const int32_t type = DYNAMIC_TYPE_RSA;
324+
const uint32_t tok_id = VAULT_HEADER_MAGIC;
325+
const uint32_t obj_id = 0x01020308U;
326+
uint32_t *words;
327+
uint8_t bitmap_before[BITMAP_SIZE];
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, 0xFF, keyvault_size);
334+
335+
words = (uint32_t *)vault_base;
336+
words[0] = VAULT_HEADER_MAGIC;
337+
words[1] = obj_id;
338+
words[2] = (uint32_t)type;
339+
words[3] = 0;
340+
words[4] = 0;
341+
342+
memcpy(bitmap_before, vault_base + sizeof(uint32_t), BITMAP_SIZE);
343+
344+
delete_object(type, tok_id, obj_id);
345+
346+
ck_assert_mem_eq(vault_base + sizeof(uint32_t), bitmap_before, BITMAP_SIZE);
347+
ck_assert_uint_eq(((uint32_t *)vault_base)[0], VAULT_HEADER_MAGIC);
348+
ck_assert_uint_eq(((uint32_t *)vault_base)[1], obj_id);
349+
}
350+
END_TEST
351+
321352
Suite *wolfboot_suite(void)
322353
{
323354
/* Suite initialization */
324355
Suite *s = suite_create("wolfBoot-pkcs11-store");
325356

326357
TCase* tcase_store_and_load_objs = tcase_create("store_and_load_objs");
327358
TCase* tcase_cross_sector_write = tcase_create("cross_sector_write");
359+
TCase* tcase_delete_object = tcase_create("delete_object");
328360
tcase_add_test(tcase_store_and_load_objs, test_store_and_load_objs);
329361
tcase_add_test(tcase_cross_sector_write, test_cross_sector_write_preserves_length);
362+
tcase_add_test(tcase_delete_object, test_delete_object_ignores_metadata_prefix);
330363
suite_add_tcase(s, tcase_store_and_load_objs);
331364
suite_add_tcase(s, tcase_cross_sector_write);
365+
suite_add_tcase(s, tcase_delete_object);
332366
return s;
333367
}
334368

tools/unit-tests/unit-psa_store.c

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

93+
START_TEST(test_delete_object_ignores_metadata_prefix)
94+
{
95+
enum { type = WOLFPSA_STORE_KEY };
96+
const uint32_t tok_id = VAULT_HEADER_MAGIC;
97+
const uint32_t obj_id = 0x01020308U;
98+
uint32_t *words;
99+
uint8_t bitmap_before[BITMAP_SIZE];
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, 0xFF, keyvault_size);
106+
107+
words = (uint32_t *)vault_base;
108+
words[0] = VAULT_HEADER_MAGIC;
109+
words[1] = obj_id;
110+
words[2] = (uint32_t)type;
111+
words[3] = 0;
112+
words[4] = 0;
113+
114+
memcpy(bitmap_before, vault_base + sizeof(uint32_t), BITMAP_SIZE);
115+
116+
delete_object(type, tok_id, obj_id);
117+
118+
ck_assert_mem_eq(vault_base + sizeof(uint32_t), bitmap_before, BITMAP_SIZE);
119+
ck_assert_uint_eq(((uint32_t *)vault_base)[0], VAULT_HEADER_MAGIC);
120+
ck_assert_uint_eq(((uint32_t *)vault_base)[1], obj_id);
121+
}
122+
END_TEST
123+
93124
Suite *wolfboot_suite(void)
94125
{
95126
Suite *s = suite_create("wolfBoot-psa-store");
96127
TCase *tcase_write = tcase_create("cross_sector_write");
128+
TCase *tcase_delete = tcase_create("delete_object");
97129

98130
tcase_add_test(tcase_write, test_cross_sector_write_preserves_length);
131+
tcase_add_test(tcase_delete, test_delete_object_ignores_metadata_prefix);
99132
suite_add_tcase(s, tcase_write);
133+
suite_add_tcase(s, tcase_delete);
100134
return s;
101135
}
102136

0 commit comments

Comments
 (0)