On Wed, Oct 03, 2018 at 11:41:41PM -0700, Ori Bernstein wrote:
> diff --git usr.sbin/vmd/config.c usr.sbin/vmd/config.c
> index 550b73c1a39..68be738d304 100644
> --- usr.sbin/vmd/config.c
> +++ usr.sbin/vmd/config.c
> @@ -35,6 +35,7 @@
> #include <util.h>
> #include <errno.h>
> #include <imsg.h>
> +#include <libgen.h>
>
> #include "proc.h"
> #include "vmd.h"
> @@ -176,16 +177,21 @@ config_getreset(struct vmd *env, struct imsg *imsg)
> int
> config_setvm(struct privsep *ps, struct vmd_vm *vm, uint32_t peerid, uid_t
> uid)
> {
> + int diskfds[VMM_MAX_DISKS_PER_VM][VM_MAX_BASE_PER_DISK];
> struct vmd_if *vif;
> struct vmop_create_params *vmc = &vm->vm_params;
> struct vm_create_params *vcp = &vmc->vmc_params;
> - unsigned int i;
> + unsigned int i, j;
> int fd = -1, vmboot = 0;
> - int kernfd = -1, *diskfds = NULL, *tapfds = NULL;
> + int kernfd = -1;
> + int *tapfds;
keep tapfds = NULL or you might cause a segfault in the goto fail case...
[snip]
> if (tapfds != NULL) {
> for (i = 0; i < vcp->vcp_nnics; i++)
> close(tapfds[i]);
...here (same function).
Reyk