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

Reply via email to