summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2020-01-31 07:15:07 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2020-01-31 19:30:39 +0100
commit38aeb071b3310866e0e75fec8e5d3c5f0f175cb9 (patch)
tree07073e33afe6e5bdf8a9de955bc3366150c6e808
parentmm/zswap.c: add allocation hysteresis if pool limit is hit (diff)
downloadlinux-38aeb071b3310866e0e75fec8e5d3c5f0f175cb9.tar.xz
linux-38aeb071b3310866e0e75fec8e5d3c5f0f175cb9.zip
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>
-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: