vmd(8): handle VIRTIO_BLK_T_GET_ID, check descriptor r/w flags
authordv <dv@openbsd.org>
Thu, 17 Jun 2021 22:03:33 +0000 (22:03 +0000)
committerdv <dv@openbsd.org>
Thu, 17 Jun 2021 22:03:33 +0000 (22:03 +0000)
commita47d50ec87a676bf98905a3a47050be6abfedd38
tree409a9c69bd13e8b7a777a9a55693574cdd0ab2f2
parente4472d2162a3f0a8cf2b94fddb888c7f89ed3f0c
vmd(8): handle VIRTIO_BLK_T_GET_ID, check descriptor r/w flags

Linux guests like to issue VIRTIO_BLK_T_GET_ID commands in attempts
to read the device serial number. It's not part of the virtio spec,
but has been part of QEMU and Bhyve for multiple years. It will be
landing in the next version of virtio (1.2), so this stubs out
handling for the request type. The added benefit is it helps squelch
log noise from Linux guests.

For now, no serial number is set and the request status is set to
VIRTIO_BLK_S_UNSUPP to tell the driver we don't support it.

While here, swap the response to VIRTIO_BLK_T_FLUSH{,_OUT} to be
also returning VIRTIO_BLK_S_UNSUPP. It's not negotiated nor
implemented. Lastly, add checks for validating the vioblk device
is only reading/writing descriptors with approrpriate read/write-only
flags per the virtio spec.

With input from claudio@, OK mlarkin@
usr.sbin/vmd/virtio.c