summary refs log tree commit diff
path: root/mm
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2020-01-30 22:15:07 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2020-01-31 10:30:39 -0800
commit38aeb071b3310866e0e75fec8e5d3c5f0f175cb9 (patch)
tree07073e33afe6e5bdf8a9de955bc3366150c6e808 /mm
parent45190f01dd402112d3d22c0ddc4152994f9e1e55 (diff)
downloadlinux-38aeb071b3310866e0e75fec8e5d3c5f0f175cb9.tar.gz
zswap: potential NULL dereference on error in init_zswap()
The "pool" pointer can be NULL at the end of the init_zswap().  (We
would allocate a new pool later in that situation)

So in the error handling then we need to make sure pool is a valid
pointer before calling "zswap_pool_destroy(pool);" because that function
dereferences the argument.

Link: http://lkml.kernel.org/r/20200114050902.og32fkllkod5ycf5@kili.mountain
Fixes: 93d4dfa9fbd0 ("mm/zswap.c: add allocation hysteresis if pool limit is hit")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Vitaly Wool <vitaly.wool@konsulko.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/zswap.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/mm/zswap.c b/mm/zswap.c
index 7ec8bd912d13..55094e63b72d 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -1359,7 +1359,8 @@ static int __init init_zswap(void)
 	return 0;
 
 fallback_fail:
-	zswap_pool_destroy(pool);
+	if (pool)
+		zswap_pool_destroy(pool);
 hp_fail:
 	cpuhp_remove_state(CPUHP_MM_ZSWP_MEM_PREPARE);
 dstmem_fail: