diff --git a/stand/libsa/zfs/zfs.c b/stand/libsa/zfs/zfs.c --- a/stand/libsa/zfs/zfs.c +++ b/stand/libsa/zfs/zfs.c @@ -391,36 +391,43 @@ } spa = spa_find_by_dev(zfsdev); - if (spa == NULL) + if (spa == NULL) { + free(zfsdev); return (ENXIO); + } mnt = calloc(1, sizeof(*mnt)); - if (mnt != NULL && path != NULL) - mnt->path = strdup(path); - rv = errno; + if (mnt == NULL) { + free(zfsdev); + return (ENOMEM); + } + mnt->path = strdup(path); + if (mnt->path == NULL) { + free(zfsdev); + free(mnt); + return (ENOMEM); + } - if (mnt != NULL) - rv = zfs_mount_impl(spa, zfsdev->root_guid, mnt); - free(zfsdev); + rv = zfs_mount_impl(spa, zfsdev->root_guid, mnt); - if (rv == 0 && mnt != NULL && mnt->objset.os_type != DMU_OST_ZFS) { + if (rv == 0 && mnt->objset.os_type != DMU_OST_ZFS) { printf("Unexpected object set type %ju\n", (uintmax_t)mnt->objset.os_type); rv = EIO; } if (rv != 0) { - if (mnt != NULL) - free(mnt->path); + free(mnt->path); free(mnt); + free(zfsdev); return (rv); } - if (mnt != NULL) { - *data = mnt; - if (path != NULL) - STAILQ_INSERT_TAIL(&zfsmount, mnt, next); - } + *data = mnt; + if (path != NULL) + STAILQ_INSERT_TAIL(&zfsmount, mnt, next); + + free(zfsdev); return (rv); }