From 3f7d0418dc663e3a968cf0b28b45f6ef5b83bb06 Mon Sep 17 00:00:00 2001 From: LOLi Date: Wed, 31 May 2017 21:52:12 +0200 Subject: [PATCH] Fix memory leak in zvol_set_volsize() Move kmem_free() so it's called for every error path: this is preferred over making `dmu_object_info_t doi` local to accommodate older kernels with limited stacks. Reviewed by: Boris Protopopov Reviewed-by: Brian Behlendorf Reviewed-by: Giuseppe Di Natale Signed-off-by: loli10K Closes #6177 --- module/zfs/zvol.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 8ca510b794..cff3da8b49 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -419,11 +419,12 @@ zvol_set_volsize(const char *name, uint64_t volsize) goto out; error = zvol_update_volsize(volsize, os); - kmem_free(doi, sizeof (dmu_object_info_t)); if (error == 0 && zv != NULL) error = zvol_update_live_volsize(zv, volsize); out: + kmem_free(doi, sizeof (dmu_object_info_t)); + if (owned) { dmu_objset_disown(os, FTAG); if (zv != NULL)