virtio blk: check descriptor valid addresses...
virtio blk: check descriptor valid addresses...

...when parsing an operation request.

The `status` and `data` (if present) descriptors' addresses were not
validated, relying on the assumption that the guest driver sends valid
buffers in the virtq. An `unwrap` in the block device's `process_queue`
function may have failed on invalid input.

This commit adds an extra validation for the descriptors' addresses. The
`data` descriptor must point to a valid address in the guest's physical
memory space, with enough room to fit the data (specified by `data.len`).
The `status` descriptor must also point at a valid address which fits the
4-byte status written there by the device after processing the request.

Signed-off-by: Alexandra Iordache <750ec4522de000f31ad44d64614ad5747f238032@amazon.com>

firecracker-microvm/firecracker,firecracker-microvm/firecracker,firecracker-microvm/firecracker,firecracker-microvm/firecracker,firecracker-microvm/firecracker