util/hash_table: Fix hashing in clears on 32-bit
authorTomeu Vizoso <tomeu.vizoso@collabora.com>
Mon, 5 Aug 2019 09:22:49 +0000 (11:22 +0200)
committerTomeu Vizoso <tomeu.vizoso@collabora.com>
Thu, 8 Aug 2019 05:42:52 +0000 (07:42 +0200)
commit5804d75b9c413ddac8f5f5ada6043b5ee854e3d3
tree77771702ef50d6c44a6c5836d14110062e43401c
parentaba57b11ee8c6d4be225f6e22ae00d96b1833d73
util/hash_table: Fix hashing in clears on 32-bit

Some hash functions (eg. key_u64_hash) will attempt to dereference the
key, causing an invalid access when passed DELETED_KEY_VALUE (0x1) or
FREED_KEY_VALUE (0x0).

When in 32-bit arch a 64-bit key value doesn't fit into a pointer, so
hash_table_u64 internally use a pointer to a struct containing the
64-bit key value.

Fix _mesa_hash_table_u64_clear() to handle the 32-bit case by creating a
temporary hash_key_u64 to pass to the hash function.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Suggested-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Cc: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Cc: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/util/hash_table.c