* Greg Steuck <[email protected]> [2018-10-03 10:56:28 -0700]:

Hi Mike,

I'm getting core files from vmds. Here's the most recent one. Should I
start collecting more stack traces and sending them to you?

ci-openbsd$ doas /usr/local/bin/egdb /syzkaller/src/usr.sbin/vmd/obj/vmd
/var/crash/vmd/89501.core
Reading symbols from /syzkaller/src/usr.sbin/vmd/obj/vmd...done.
[New process 178128]
[New process 294426]
[New process 350865]
Core was generated by `vmd'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000c07a64148bd in virtio_shutdown (vm=0xc09e1418000) at
/syzkaller/src/usr.sbin/vmd/virtio.c:2018
2018            vioscsi->file.close(vioscsi->file.p, 0);

Hi Greg,

this is interesting.  Are you using the cdrom?  I guess not.  There
seems to be no if condition around that statement.

This diff should prevent that segfault.

--
Pratik


Index: usr.sbin/vmd/virtio.c
===================================================================
RCS file: /home/pdvyas/cvs/src/usr.sbin/vmd/virtio.c,v
retrieving revision 1.70
diff -u -p -a -u -r1.70 virtio.c
--- usr.sbin/vmd/virtio.c       28 Sep 2018 12:35:32 -0000      1.70
+++ usr.sbin/vmd/virtio.c       3 Oct 2018 18:35:40 -0000
@@ -2015,7 +2015,8 @@ virtio_shutdown(struct vmd_vm *vm)
        int i;

        /* ensure that our disks are synced */
-       vioscsi->file.close(vioscsi->file.p, 0);
+       if (vioscsi != NULL)
+               vioscsi->file.close(vioscsi->file.p, 0);
        for (i = 0; i < nr_vioblk; i++)
                vioblk[i].file.close(vioblk[i].file.p, 0);
}

Reply via email to