summary refs log tree commit diff
path: root/lib/rhashtable.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-03-13 12:54:10 +1100
committerDavid S. Miller <davem@davemloft.net>2015-03-12 23:02:30 -0400
commit393619474ec0ba2a16dee12ec78fd43164f1e9b7 (patch)
tree892a4eeba956db8f8abc28420ec29ac4cb0e7e53 /lib/rhashtable.c
parenta5b6846f9e1a080493210013385c28faecee36f0 (diff)
downloadlinux-393619474ec0ba2a16dee12ec78fd43164f1e9b7.tar.gz
rhashtable: Fix read-side crash during rehash
This patch fixes a typo rhashtable_lookup_compare where we fail
to recompute the hash when looking up the new table.  This causes
elements to be missed and potentially a crash during a resize.

Reported-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/rhashtable.c')
-rw-r--r--lib/rhashtable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index adea791ea3ab..fc0d451279f0 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -606,8 +606,8 @@ void *rhashtable_lookup_compare(struct rhashtable *ht, const void *key,
 	rcu_read_lock();
 
 	tbl = rht_dereference_rcu(ht->tbl, ht);
-	hash = key_hashfn(ht, tbl, key);
 restart:
+	hash = key_hashfn(ht, tbl, key);
 	rht_for_each_rcu(he, tbl, hash) {
 		if (!compare(rht_obj(ht, he), arg))
 			continue;