On Thu, May 23, 2013 at 04:58:05PM +0200, Paolo Bonzini wrote: > Il 23/05/2013 16:48, Badari Pulavarty ha scritto: > >> The common virtio-scsi code in QEMU should guard against this. In > >> virtio-blk data plane I hit a similar case and ended up starting the > >> data plane thread (equivalent to vhost here) *before* the status > >> register is set to DRIVER_OK. > > > > Thats exactly what my debug in vhost_scsi_set_status() shows. > > > > set status started 0 val 0 > > set status started 0 val 0 > > set status started 0 val 0 > > set status started 0 val 0 > > set status started 0 val 0 > > set status started 0 val 3 > > Program received signal SIGSEGV, Segmentation fault. > > > > We never got a chance to call vhost_scsi_start() as we are waiting > > for DRIVER_OK.
Reproduced the SIGSEGV and verified that replacing the bios.bin with the one from seabios.git makes the guest boot. > This is the fix in SeaBIOS: > > commit 5a7730db57ab0715223421e65b54fb50d6fefe5c > Author: Asias He <as...@redhat.com> > Date: Fri Mar 15 09:45:15 2013 +0800 > > virtio-scsi: Set _DRIVER_OK flag before scsi target scanning > > Before we start scsi target scanning, we need to set the > VIRTIO_CONFIG_S_DRIVER_OK flag so the device can do setup properly. > > This fix a bug when booting tcm_vhost with seabios. > > Signed-off-by: Asias He <as...@redhat.com> > Acked-by: Paolo Bonzini <pbonz...@redhat.com> > > > > Still, Gleb is right that SeaBIOS should not be able to crash QEMU; > exit(1) is fine, SIGSEGV is not. Agree too. > Paolo -- Asias