On Tue, Jan 04, 2022 at 10:58:41AM +0100, Claudio Jeker wrote:
> This are obvious and easy to fix unused but set variables.
> There are more in vioscsi.c but those are actually used if compiled with
> DEBUG set.

The changes in loadfile_elf.c, vioqcow2.c and vmd.c are trivial and can be
committed one by one. The change in vmm.c actually uncovered a possible
issue. If vm_register() fails the vm pointer will most probably be NULL
and so the next line will access a NULL pointer.

I think this diff is better. It cleans up also a totally unused
IMSG_VMDOP_RECEIVE_VM_RESPONSE imsg type.
 
It is hard to fail the vm_register() call so it is not trivial to really
test the error case but I did test vmctl receive and that still works.
-- 
:wq Claudio

Index: control.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmd/control.c,v
retrieving revision 1.38
diff -u -p -r1.38 control.c
--- control.c   29 Nov 2021 05:17:35 -0000      1.38
+++ control.c   4 Jan 2022 12:05:35 -0000
@@ -94,7 +94,6 @@ control_dispatch_vmd(int fd, struct priv
        case IMSG_VMDOP_START_VM_RESPONSE:
        case IMSG_VMDOP_PAUSE_VM_RESPONSE:
        case IMSG_VMDOP_SEND_VM_RESPONSE:
-       case IMSG_VMDOP_RECEIVE_VM_RESPONSE:
        case IMSG_VMDOP_UNPAUSE_VM_RESPONSE:
        case IMSG_VMDOP_GET_INFO_VM_DATA:
        case IMSG_VMDOP_GET_INFO_VM_END_DATA:
Index: vmd.h
===================================================================
RCS file: /cvs/src/usr.sbin/vmd/vmd.h,v
retrieving revision 1.107
diff -u -p -r1.107 vmd.h
--- vmd.h       29 Nov 2021 05:17:35 -0000      1.107
+++ vmd.h       4 Jan 2022 12:05:24 -0000
@@ -101,7 +101,6 @@ enum imsg_type {
        IMSG_VMDOP_SEND_VM_REQUEST,
        IMSG_VMDOP_SEND_VM_RESPONSE,
        IMSG_VMDOP_RECEIVE_VM_REQUEST,
-       IMSG_VMDOP_RECEIVE_VM_RESPONSE,
        IMSG_VMDOP_RECEIVE_VM_END,
        IMSG_VMDOP_WAIT_VM_REQUEST,
        IMSG_VMDOP_TERMINATE_VM_REQUEST,
Index: vmm.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmd/vmm.c,v
retrieving revision 1.102
diff -u -p -r1.102 vmm.c
--- vmm.c       29 Nov 2021 05:17:35 -0000      1.102
+++ vmm.c       4 Jan 2022 12:05:04 -0000
@@ -102,7 +102,7 @@ int
 vmm_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 {
        struct privsep          *ps = p->p_ps;
-       int                      res = 0, cmd = 0, verbose, ret;
+       int                      res = 0, cmd = 0, verbose;
        struct vmd_vm           *vm = NULL;
        struct vm_terminate_params vtp;
        struct vmop_id           vid;
@@ -278,8 +278,12 @@ vmm_dispatch_parent(int fd, struct privs
        case IMSG_VMDOP_RECEIVE_VM_REQUEST:
                IMSG_SIZE_CHECK(imsg, &vmc);
                memcpy(&vmc, imsg->data, sizeof(vmc));
-               ret = vm_register(ps, &vmc, &vm,
-                   imsg->hdr.peerid, vmc.vmc_owner.uid);
+               if (vm_register(ps, &vmc, &vm,
+                   imsg->hdr.peerid, vmc.vmc_owner.uid) != 0) {
+                       res = errno;
+                       cmd = IMSG_VMDOP_START_VM_RESPONSE;
+                       break;
+               }
                vm->vm_tty = imsg->fd;
                vm->vm_state |= VM_STATE_RECEIVED;
                vm->vm_state |= VM_STATE_PAUSED;
@@ -328,6 +332,7 @@ vmm_dispatch_parent(int fd, struct privs
                }
                if (id == 0)
                        id = imsg->hdr.peerid;
+               /* FALLTHROUGH */
        case IMSG_VMDOP_PAUSE_VM_RESPONSE:
        case IMSG_VMDOP_UNPAUSE_VM_RESPONSE:
        case IMSG_VMDOP_TERMINATE_VM_RESPONSE:

Reply via email to