Assume bucket->used is 1, and element 0 is deleted. We shouldn't access any
memory above (entry + 1) in this case. Likewise, if bucked->used is 2, only
one element should be shifted, etc.
Fixes: 7db0865 ("Add simple hash implementation")
Signed-off-by: Martin Wilck <martin_wilck@gmx.de>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/257
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
hash->free_value((void *)entry->value);
entry_end = bucket->entries + bucket->used;
- memmove(entry, entry + 1, (entry_end - entry) * sizeof(struct hash_entry));
+ memmove(entry, entry + 1, (entry_end - entry - 1) * sizeof(struct hash_entry));
bucket->used--;
hash->count--;
return 0;
}
-DEFINE_TEST(test_hash_del, .description = "test add / delete a single element",
- .expected_fail = true);
+DEFINE_TEST(test_hash_del, .description = "test add / delete a single element");
static int test_hash_free(const struct test *t)
{