https://github.com/torvalds/linux
Revision 474a89885f77953b12bce9f23660c31ef5c2630e authored by Jesper Juhl on 11 April 2012, 20:10:20 UTC, committed by Greg Kroah-Hartman on 12 April 2012, 21:34:32 UTC
If, in __persistent_ram_init(), the call to
persistent_ram_buffer_init() fails or the call to
persistent_ram_init_ecc() fails then we fail to free the memory we
allocated to 'prz' with kzalloc() - thus leaking it.

To prevent the leaks I consolidated all error exits from the function
at a 'err:' label at the end and made all error cases jump to that
label where we can then make sure we always free 'prz'. This is safe
since all the situations where the code bails out happen before 'prz'
has been stored anywhere and although we'll do a redundant kfree(NULL)
call in the case of kzalloc() itself failing that's OK since kfree()
deals gracefully with NULL pointers and I felt it was more important
to keep all error exits at a single location than to avoid that one
harmless/redundant kfree() on a error path.

Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Acked-by: Colin Cross <ccross@android.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 17b7e1b
History
Tip revision: 474a89885f77953b12bce9f23660c31ef5c2630e authored by Jesper Juhl on 11 April 2012, 20:10:20 UTC
staging: android: fix mem leaks in __persistent_ram_init()
Tip revision: 474a898
File Mode Size
async_tx
Kconfig -rw-r--r-- 27.4 KB
Makefile -rw-r--r-- 3.3 KB
ablkcipher.c -rw-r--r-- 18.2 KB
aead.c -rw-r--r-- 14.0 KB
aes_generic.c -rw-r--r-- 61.9 KB
af_alg.c -rw-r--r-- 9.3 KB
ahash.c -rw-r--r-- 12.7 KB
algapi.c -rw-r--r-- 20.2 KB
algboss.c -rw-r--r-- 6.3 KB
algif_hash.c -rw-r--r-- 6.8 KB
algif_skcipher.c -rw-r--r-- 13.2 KB
ansi_cprng.c -rw-r--r-- 11.1 KB
anubis.c -rw-r--r-- 27.8 KB
api.c -rw-r--r-- 13.4 KB
arc4.c -rw-r--r-- 2.0 KB
authenc.c -rw-r--r-- 19.6 KB
authencesn.c -rw-r--r-- 23.4 KB
blkcipher.c -rw-r--r-- 19.4 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-- 35.0 KB
cast5.c -rw-r--r-- 33.0 KB
cast6.c -rw-r--r-- 21.4 KB
cbc.c -rw-r--r-- 7.4 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
compress.c -rw-r--r-- 1.3 KB
crc32c.c -rw-r--r-- 4.3 KB
cryptd.c -rw-r--r-- 24.8 KB
crypto_null.c -rw-r--r-- 4.9 KB
crypto_user.c -rw-r--r-- 11.7 KB
crypto_wq.c -rw-r--r-- 968 bytes
ctr.c -rw-r--r-- 10.8 KB
cts.c -rw-r--r-- 9.8 KB
deflate.c -rw-r--r-- 5.4 KB
des_generic.c -rw-r--r-- 35.6 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-- 34.5 KB
gf128mul.c -rw-r--r-- 13.2 KB
ghash-generic.c -rw-r--r-- 3.8 KB
hmac.c -rw-r--r-- 6.9 KB
internal.h -rw-r--r-- 4.0 KB
khazad.c -rw-r--r-- 51.8 KB
krng.c -rw-r--r-- 1.5 KB
lrw.c -rw-r--r-- 9.2 KB
lzo.c -rw-r--r-- 2.5 KB
md4.c -rw-r--r-- 6.2 KB
md5.c -rw-r--r-- 3.9 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.5 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-- 2.9 KB
seed.c -rw-r--r-- 17.4 KB
seqiv.c -rw-r--r-- 8.6 KB
serpent_generic.c -rw-r--r-- 21.4 KB
sha1_generic.c -rw-r--r-- 3.5 KB
sha256_generic.c -rw-r--r-- 12.2 KB
sha512_generic.c -rw-r--r-- 8.7 KB
shash.c -rw-r--r-- 16.9 KB
tcrypt.c -rw-r--r-- 37.0 KB
tcrypt.h -rw-r--r-- 3.5 KB
tea.c -rw-r--r-- 7.1 KB
testmgr.c -rw-r--r-- 58.8 KB
testmgr.h -rw-r--r-- 506.6 KB
tgr192.c -rw-r--r-- 30.8 KB
twofish_common.c -rw-r--r-- 37.8 KB
twofish_generic.c -rw-r--r-- 6.3 KB
vmac.c -rw-r--r-- 17.9 KB
wp512.c -rw-r--r-- 60.1 KB
xcbc.c -rw-r--r-- 7.2 KB
xor.c -rw-r--r-- 3.9 KB
xts.c -rw-r--r-- 8.7 KB
zlib.c -rw-r--r-- 9.5 KB

back to top