vmd(8): guest virtio drivers can cause stack & buffer overflows
authordv <dv@openbsd.org>
Tue, 18 May 2021 11:06:43 +0000 (11:06 +0000)
committerdv <dv@openbsd.org>
Tue, 18 May 2021 11:06:43 +0000 (11:06 +0000)
commit0759b25c59b6ba20cbbd574f91b133e4d6029b31
treec7fb5f03cd29810c41dbc19cc89e64c03ef17450
parentc48a03f1dc8ce161a6e680c6ea64ba3754ed572f
vmd(8): guest virtio drivers can cause stack & buffer overflows

A vmd guest can craft invalid virtio descriptor lengths resulting
in reading and writing beyond stack-allocated buffer lengths providing
an escape vector to the host.

Instead of allowing the guest to dictate read/write lengths, this
commit has vmd just use compile-time lengths based on the source
or destination object sizes. For instances where vmd's virtio
implementation can't use this method, such as reading packets from
the vionet device, cap each read with a pre-computed max chunk size.

Reported by Maxime Villard.

Tested with help from Mischa Peters, OK mlarkin@
usr.sbin/vmd/vioscsi.c
usr.sbin/vmd/virtio.c