ck_hs: Explicitly disallow tables of size smaller than L1 probe length.

ck_pring
Samy Al Bahra 12 years ago
parent abd504823d
commit 6d0b9fc4b7

@ -168,6 +168,9 @@ ck_hs_map_create(struct ck_hs *hs, unsigned long entries)
unsigned long size, n_entries, prefix, limit;
n_entries = ck_internal_power_2(entries);
if (n_entries < CK_HS_PROBE_L1)
return NULL;
size = sizeof(struct ck_hs_map) + (sizeof(void *) * n_entries + CK_MD_CACHELINE - 1);
if (hs->mode & CK_HS_MODE_DELETE) {
@ -196,7 +199,7 @@ ck_hs_map_create(struct ck_hs *hs, unsigned long entries)
map->n_entries = 0;
/* Align map allocation to cache line. */
map->entries = (void *)(((uintptr_t)(map + 1) + prefix +
map->entries = (void *)(((uintptr_t)&map[1] + prefix +
CK_MD_CACHELINE - 1) & ~(CK_MD_CACHELINE - 1));
memset(map->entries, 0, sizeof(void *) * n_entries);
@ -204,7 +207,7 @@ ck_hs_map_create(struct ck_hs *hs, unsigned long entries)
if (hs->mode & CK_HS_MODE_DELETE) {
map->probe_bound = (CK_HS_WORD *)&map[1];
memset(map->probe_bound, 0, sizeof(CK_HS_WORD) * n_entries);
memset(map->probe_bound, 0, prefix);
} else {
map->probe_bound = NULL;
}

Loading…
Cancel
Save