summaryrefslogtreecommitdiff
path: root/usr.sbin/vmd/vmd.c
diff options
context:
space:
mode:
authorpd <pd@cvs.openbsd.org>2018-02-18 01:00:26 +0000
committerpd <pd@cvs.openbsd.org>2018-02-18 01:00:26 +0000
commite1cb382bba86598cbc9062a9ec65735a04165fa2 (patch)
treeccc8697f9d7be2317bdb51e5b9ffb2d2bb2bbd39 /usr.sbin/vmd/vmd.c
parentd5205f0d5b3f1044d50cf8d5cc406d1c8abc2f96 (diff)
vmd: fix vmctl pause for non existing vm ids (never returns)
check 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 process and do your own checking. reported by Abel Abraham Camarillo Ojeda ok mlarkin@ and ccardenas@
Diffstat (limited to 'usr.sbin/vmd/vmd.c')
-rw-r--r--usr.sbin/vmd/vmd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/usr.sbin/vmd/vmd.c b/usr.sbin/vmd/vmd.c
index c0499e03813..b987b1bd92f 100644
--- a/usr.sbin/vmd/vmd.c
+++ b/usr.sbin/vmd/vmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vmd.c,v 1.79 2018/01/10 14:59:59 sthen Exp $ */
+/* $OpenBSD: vmd.c,v 1.80 2018/02/18 01:00:25 pd Exp $ */
/*
* Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
@@ -186,6 +186,10 @@ vmd_dispatch_control(int fd, struct privsep_proc *p, struct imsg *imsg)
} 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));