Revision 35a9393c95b31870a74f51a3e7455f33f5657b6f authored by Peter Zijlstra on 26 February 2015, 15:23:11 UTC, committed by Ingo Molnar on 23 March 2015, 09:49:07 UTC
Module unload calls lockdep_free_key_range(), which removes entries
from the data structures. Most of the lockdep code OTOH assumes the
data structures are append only; in specific see the comments in
add_lock_to_list() and look_up_lock_class().

Clearly this has only worked by accident; make it work proper. The
actual scenario to make it go boom would involve the memory freed by
the module unlock being re-allocated and re-used for a lock inside of
a rcu-sched grace period. This is a very unlikely scenario, still
better plug the hole.

Use RCU list iteration in all places and ammend the comments.

Change lockdep_free_key_range() to issue a sync_sched() between
removal from the lists and returning -- which results in the memory
being freed. Further ensure the callers are placed correctly and
comment the requirements.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Tsyvarev <tsyvarev@ispras.ru>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent bc465aa
History
File Mode Size
asymmetric_keys
async_tx
842.c -rw-r--r-- 4.6 KB
Kconfig -rw-r--r-- 43.8 KB
Makefile -rw-r--r-- 3.9 KB
ablk_helper.c -rw-r--r-- 4.2 KB
ablkcipher.c -rw-r--r-- 17.8 KB
aead.c -rw-r--r-- 14.0 KB
aes_generic.c -rw-r--r-- 62.0 KB
af_alg.c -rw-r--r-- 9.4 KB
ahash.c -rw-r--r-- 14.8 KB
algapi.c -rw-r--r-- 20.1 KB
algboss.c -rw-r--r-- 6.4 KB
algif_hash.c -rw-r--r-- 6.6 KB
algif_rng.c -rw-r--r-- 5.3 KB
algif_skcipher.c -rw-r--r-- 13.0 KB
ansi_cprng.c -rw-r--r-- 10.9 KB
anubis.c -rw-r--r-- 27.8 KB
api.c -rw-r--r-- 13.4 KB
arc4.c -rw-r--r-- 3.4 KB
authenc.c -rw-r--r-- 20.1 KB
authencesn.c -rw-r--r-- 23.1 KB
blkcipher.c -rw-r--r-- 19.9 KB
blowfish_common.c -rw-r--r-- 15.7 KB
blowfish_generic.c -rw-r--r-- 3.4 KB
camellia_generic.c -rw-r--r-- 34.9 KB
cast5_generic.c -rw-r--r-- 20.9 KB
cast6_generic.c -rw-r--r-- 9.5 KB
cast_common.c -rw-r--r-- 13.1 KB
cbc.c -rw-r--r-- 7.5 KB
ccm.c -rw-r--r-- 21.5 KB
chainiv.c -rw-r--r-- 8.6 KB
cipher.c -rw-r--r-- 3.3 KB
cmac.c -rw-r--r-- 7.5 KB
compress.c -rw-r--r-- 1.3 KB
crc32.c -rw-r--r-- 3.7 KB
crc32c_generic.c -rw-r--r-- 4.4 KB
crct10dif_common.c -rw-r--r-- 3.6 KB
crct10dif_generic.c -rw-r--r-- 3.2 KB
cryptd.c -rw-r--r-- 24.9 KB
crypto_null.c -rw-r--r-- 4.3 KB
crypto_user.c -rw-r--r-- 12.4 KB
crypto_wq.c -rw-r--r-- 972 bytes
ctr.c -rw-r--r-- 12.3 KB
cts.c -rw-r--r-- 9.8 KB
deflate.c -rw-r--r-- 5.4 KB
des_generic.c -rw-r--r-- 35.7 KB
drbg.c -rw-r--r-- 57.3 KB
ecb.c -rw-r--r-- 4.9 KB
eseqiv.c -rw-r--r-- 6.5 KB
fcrypt.c -rw-r--r-- 18.0 KB
fips.c -rw-r--r-- 705 bytes
gcm.c -rw-r--r-- 36.6 KB
gf128mul.c -rw-r--r-- 13.2 KB
ghash-generic.c -rw-r--r-- 3.7 KB
hash_info.c -rw-r--r-- 1.8 KB
hmac.c -rw-r--r-- 6.8 KB
internal.h -rw-r--r-- 4.1 KB
khazad.c -rw-r--r-- 51.8 KB
krng.c -rw-r--r-- 1.4 KB
lrw.c -rw-r--r-- 9.2 KB
lz4.c -rw-r--r-- 2.5 KB
lz4hc.c -rw-r--r-- 2.6 KB
lzo.c -rw-r--r-- 2.6 KB
mcryptd.c -rw-r--r-- 17.5 KB
md4.c -rw-r--r-- 6.2 KB
md5.c -rw-r--r-- 4.0 KB
memneq.c -rw-r--r-- 6.1 KB
michael_mic.c -rw-r--r-- 3.6 KB
pcbc.c -rw-r--r-- 7.7 KB
pcompress.c -rw-r--r-- 3.0 KB
pcrypt.c -rw-r--r-- 14.7 KB
proc.c -rw-r--r-- 3.7 KB
ripemd.h -rw-r--r-- 974 bytes
rmd128.c -rw-r--r-- 10.2 KB
rmd160.c -rw-r--r-- 12.6 KB
rmd256.c -rw-r--r-- 10.6 KB
rmd320.c -rw-r--r-- 13.1 KB
rng.c -rw-r--r-- 3.3 KB
salsa20_generic.c -rw-r--r-- 6.7 KB
scatterwalk.c -rw-r--r-- 3.3 KB
seed.c -rw-r--r-- 17.4 KB
seqiv.c -rw-r--r-- 8.8 KB
serpent_generic.c -rw-r--r-- 21.2 KB
sha1_generic.c -rw-r--r-- 3.6 KB
sha256_generic.c -rw-r--r-- 12.2 KB
sha512_generic.c -rw-r--r-- 8.8 KB
shash.c -rw-r--r-- 17.6 KB
tcrypt.c -rw-r--r-- 51.9 KB
tcrypt.h -rw-r--r-- 3.7 KB
tea.c -rw-r--r-- 6.6 KB
testmgr.c -rw-r--r-- 79.3 KB
testmgr.h -rw-r--r-- 1.0 MB
tgr192.c -rw-r--r-- 30.5 KB
twofish_common.c -rw-r--r-- 37.8 KB
twofish_generic.c -rw-r--r-- 6.3 KB
vmac.c -rw-r--r-- 18.9 KB
wp512.c -rw-r--r-- 59.8 KB
xcbc.c -rw-r--r-- 7.2 KB
xor.c -rw-r--r-- 4.0 KB
xts.c -rw-r--r-- 8.7 KB
zlib.c -rw-r--r-- 9.6 KB

back to top