From 460f239e6999195dbcf9b8443c029f07765b21e9 Mon Sep 17 00:00:00 2001 From: DHE Date: Sat, 18 Nov 2017 18:21:09 -0500 Subject: [PATCH] Fix -fsanitize=address memory leak kmem_alloc(0, ...) in userspace returns a leakable pointer. Reviewed-by: Brian Behlendorf Signed-off-by: DHE Issue #6941 --- module/zfs/spa.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/zfs/spa.c b/module/zfs/spa.c index 8844b9f7bc..75b9286205 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -1563,7 +1563,7 @@ spa_load_spares(spa_t *spa) static void spa_load_l2cache(spa_t *spa) { - nvlist_t **l2cache; + nvlist_t **l2cache = NULL; uint_t nl2cache; int i, j, oldnvdevs; uint64_t guid; @@ -1647,7 +1647,9 @@ spa_load_l2cache(spa_t *spa) VERIFY(nvlist_remove(sav->sav_config, ZPOOL_CONFIG_L2CACHE, DATA_TYPE_NVLIST_ARRAY) == 0); - l2cache = kmem_alloc(sav->sav_count * sizeof (void *), KM_SLEEP); + if (sav->sav_count > 0) + l2cache = kmem_alloc(sav->sav_count * sizeof (void *), + KM_SLEEP); for (i = 0; i < sav->sav_count; i++) l2cache[i] = vdev_config_generate(spa, sav->sav_vdevs[i], B_TRUE, VDEV_CONFIG_L2CACHE);