On Fri, Feb 16, 2018 at 11:15 AM, Pratik Vyas <[email protected]> wrote:
> * Abel Abraham Camarillo Ojeda <[email protected]> [2018-02-15 06:06:50
> -0600]:
>
>>> Synopsis:      vmctl(8) pause never returns
>
>
> This should fix it. It checks if vm id is valid before sending to vmm
> for pausing. The 'lock' is caused by vmm sending back ENOENT for a non
> existent vm but vmd drops the message because it doesn't recogize the
> vmid vmm is talking about. This is an artifact of the 'policy' don't
> trust any imsg from a sibling priv sep processes and do your own
> checking.
>
>
> Index: usr.sbin/vmd/vmd.c
> ===================================================================
> RCS file: /home/pdvyas/cvs/src/usr.sbin/vmd/vmd.c,v
> retrieving revision 1.79
> diff -u -p -a -u -r1.79 vmd.c
> --- usr.sbin/vmd/vmd.c  10 Jan 2018 14:59:59 -0000      1.79
> +++ usr.sbin/vmd/vmd.c  16 Feb 2018 17:06:20 -0000
> @@ -186,6 +186,10 @@ vmd_dispatch_control(int fd, struct priv
>                         } else {
>                                 vid.vid_id = vm->vm_vmid;
>                         }
> +               } else if (vm_getbyid(vid.vid_id) == NULL) {
> +                       res = ENOENT;
> +                       cmd = IMSG_VMDOP_PAUSE_VM_RESPONSE;
> +                       break;
>                 }
>                 proc_compose_imsg(ps, PROC_VMM, -1, imsg->hdr.type,
>                     imsg->hdr.peerid, -1, &vid, sizeof(vid));

I confirm this fixes the issue

thanks

Reply via email to