[dpdk-dev] table: fix a crash during key8 and key32 overload
Commit Message
hash_key8_ext and hash_key32_ext tables allocate cache entries to
support table overload cases. The crash can occur when cache entry is
free after use. The problem is with computing the index of the free
cache entry. The same case for key16 was fixed with earlier patch.
Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
---
lib/librte_table/rte_table_hash_key32.c | 5 ++---
lib/librte_table/rte_table_hash_key8.c | 5 ++---
2 files changed, 4 insertions(+), 6 deletions(-)
@@ -540,9 +540,8 @@ rte_table_hash_entry_delete_key32_ext(
memset(bucket, 0,
sizeof(struct rte_bucket_4_32));
- bucket_index = (bucket -
- ((struct rte_bucket_4_32 *)
- f->memory)) - f->n_buckets;
+ bucket_index = (((uint8_t *)bucket -
+ (uint8_t *)f->memory)/f->bucket_size) - f->n_buckets;
f->stack[f->stack_pos++] = bucket_index;
}
@@ -528,9 +528,8 @@ rte_table_hash_entry_delete_key8_ext(
memset(bucket, 0,
sizeof(struct rte_bucket_4_8));
- bucket_index = (bucket -
- ((struct rte_bucket_4_8 *)
- f->memory)) - f->n_buckets;
+ bucket_index = (((uint8_t *)bucket -
+ (uint8_t *)f->memory)/f->bucket_size) - f->n_buckets;
f->stack[f->stack_pos++] = bucket_index;
}