]> git.proxmox.com Git - mirror_zfs.git/commitdiff
libzfs: Don't leak buf if nvlist is too large
authorAllan Jude <allanjude@freebsd.org>
Fri, 18 Sep 2020 17:23:29 +0000 (13:23 -0400)
committerGitHub <noreply@github.com>
Fri, 18 Sep 2020 17:23:29 +0000 (10:23 -0700)
Resolves FreeBSD Coverity defect:
CID 1432398:  Resource leaks  (RESOURCE_LEAK)

libzfs: don't leak hdl if there is an error reading env var

Resolves FreeBSD Coverity defect:
CID 1432395:  Resource leaks  (RESOURCE_LEAK)

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Allan Jude <allanjude@freebsd.org>
Closes #10882

lib/libzfs/libzfs_sendrecv.c
lib/libzfs/libzfs_util.c

index b17b105ca34b863b5942d193ef35c9f6746318ee..b46a4f122c47951e429213c1f3e80cf05045e99a 100644 (file)
@@ -2640,6 +2640,7 @@ recv_read_nvlist(libzfs_handle_t *hdl, int fd, int len, nvlist_t **nvp,
 
        if (len > hdl->libzfs_max_nvlist) {
                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "nvlist too large"));
+               free(buf);
                return (ENOMEM);
        }
 
index 301c8ddbab1146d344988d58890642f637007237..651bca2978ce069be047c476d6501ab4b9deebe2 100644 (file)
@@ -1060,6 +1060,9 @@ libzfs_init(void)
                if ((error = zfs_nicestrtonum(hdl, env,
                    &hdl->libzfs_max_nvlist))) {
                        errno = error;
+                       (void) close(hdl->libzfs_fd);
+                       (void) fclose(hdl->libzfs_mnttab);
+                       free(hdl);
                        return (NULL);
                }
        } else {