table: fix pointer calculations at initialization
authorBalazs Nemeth <balazs.nemeth@intel.com>
Fri, 26 Sep 2014 09:37:40 +0000 (09:37 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 24 Nov 2014 12:17:49 +0000 (13:17 +0100)
commit5bc3c265cbae9485eef5534516ec9a7b1df475ff
tree5730af2ab39f1bda19b9ddb881cbda71f44b2b04
parent8595428e50e70d982e4a47784557d345913c4a56
table: fix pointer calculations at initialization

During initialization of rte_table_hash_ext and rte_table_hash_lru, a
contiguous region of memory is allocated to store meta data, buckets,
extended buckets, keys, stack of keys, stack of extended buckets and
data entries. The size of each region depends on the hash table
configuration.

The address of each region is calculated using offsets relative to the
beginning of the memory region. Without this patch, the offsets
contain the size of the table meta data (sizeof(struct
rte_table_hash)). These addresses are stored in pointers which are
used when entries are added or deleted and lookups are performed.

Instead of adding these offsets to the address of the beginning of the
memory region, they are added to the address of the end of the meta
data (= address of the beginning of the memory region + sizeof(struct
rte_table_hash)). The resulting addresses are off by sizeof(struct
rte_table_hash) bytes. As a consequence, memory past the allocated
region can be accessed by the add, delete and lookup operations.

This patch corrects the address calculation by not including the size
of the meta data in the offsets.

Signed-off-by: Balazs Nemeth <balazs.nemeth@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
lib/librte_table/rte_table_hash_ext.c
lib/librte_table/rte_table_hash_lru.c