freebsd-dev/usr.sbin/bhyve
Chuck Tuffli 91064841d7 bhyve: Fix NVMe iovec construction for large IOs
The UEFI driver included with Rocky Linux 8.4 uncovered an existing bug
in the NVMe emulation's construction of iovec's.

By default, NVMe data transfer operations use a scatter-gather list in
which all entries point to a fixed size memory region. For example, if
the Memory Page Size is 4KiB, a 2MiB IO requires 512 entries. Lists
themselves are also fixed size (default is 512 entries).

Because the list size is fixed, the last entry is special. If the IO
requires more than 512 entries, the last entry in the list contains the
address of the next list of entries. But if the IO requires exactly 512
entries, the last entry points to data.

The NVMe emulation missed this logic and unconditionally treated the
last entry as a pointer to the next list. Fix is to check if the
remaining data is greater than the page size before using the last entry
as a pointer to the next list.

PR:		256422
Reported by:	dave@syix.com
Tested by:	jason@tubnor.net
MFC after:	5 days
Relnotes:	yes
Reviewed by:	imp, grehan
Differential Revision:	https://reviews.freebsd.org/D30897
2021-06-27 15:14:52 -07:00
..
acpi.c bhyve(8): Add VM Generation Counter ACPI device 2020-04-15 02:00:17 +00:00
acpi.h bhyve(8): Add VM Generation Counter ACPI device 2020-04-15 02:00:17 +00:00
ahci.h
atkbdc.c Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
atkbdc.h Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
audio.c bhyve: add wrapper for debug printf statements 2020-01-08 22:55:22 +00:00
audio.h Add SPDX tags to bhyve(8) HD Audio device. 2019-06-25 06:24:56 +00:00
bhyve_config.5 Add a virtio-input device emulation. 2021-06-08 19:05:09 +10:00
bhyve.8 Add a virtio-input device emulation. 2021-06-08 19:05:09 +10:00
bhyvegc.c
bhyvegc.h
bhyverun.c bhyve/snapshot: split up mutex/cond initialization from socket creation 2021-05-21 11:23:06 -08:00
bhyverun.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
block_if.c bhyve: Add support for handling disk resize events to block_if. 2021-06-11 18:00:24 -07:00
block_if.h bhyve: Add support for handling disk resize events to block_if. 2021-06-11 18:00:24 -07:00
bootrom.c bhyve(8): Add bootrom allocation abstraction 2020-04-15 01:58:51 +00:00
bootrom.h bhyve(8): Add bootrom allocation abstraction 2020-04-15 01:58:51 +00:00
config.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
config.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
console.c Append Keyboard Layout specified option for using VNC. 2021-04-21 12:40:44 +02:00
console.h Append Keyboard Layout specified option for using VNC. 2021-04-21 12:40:44 +02:00
debug.h bhyve: add wrapper for debug printf statements 2020-01-08 22:55:22 +00:00
fwctl.c Always treat firmware request and response sizes as unsigned. 2018-12-04 18:28:25 +00:00
fwctl.h
gdb.c bhyve: Set SO_REUSEADDR on the gdb stub socket 2021-05-03 13:24:30 -04:00
gdb.h Support software breakpoints in the debug server on Intel CPUs. 2019-12-13 19:21:58 +00:00
hda_codec.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
hda_reg.h Add SPDX tags to bhyve(8) HD Audio device. 2019-06-25 06:24:56 +00:00
hdac_reg.h Add SPDX tags to bhyve(8) HD Audio device. 2019-06-25 06:24:56 +00:00
inout.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
inout.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
ioapic.c
ioapic.h
iov.c bhyve: enable virtio-net mergeable rx buffers for tap(4) 2020-02-20 21:07:23 +00:00
iov.h bhyve: enable virtio-net mergeable rx buffers for tap(4) 2020-02-20 21:07:23 +00:00
kernemu_dev.c vmm(4), bhyve(8): Expose kernel-emulated special devices to userspace 2020-05-15 15:54:22 +00:00
kernemu_dev.h vmm(4), bhyve(8): Expose kernel-emulated special devices to userspace 2020-05-15 15:54:22 +00:00
Makefile Add a virtio-input device emulation. 2021-06-08 19:05:09 +10:00
Makefile.depend Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
Makefile.depend.options Add Makefile.depend.options 2019-12-11 17:37:37 +00:00
mem.c bhyve: enhance debug info for memory range clash 2021-06-13 16:41:45 -06:00
mem.h Add support for writing to guest memory in the debug server. 2019-05-24 00:34:13 +00:00
mevent_test.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
mevent.c bhyve: Add support for EVFILT_VNODE mevents. 2021-06-11 18:00:24 -07:00
mevent.h bhyve: Add support for EVFILT_VNODE mevents. 2021-06-11 18:00:24 -07:00
mptbl.c bhyve: add wrapper for debug printf statements 2020-01-08 22:55:22 +00:00
mptbl.h
net_backends.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
net_backends.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
net_utils.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
net_utils.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_ahci.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_e82545.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_emul.c bhyve: support relocating fbuf and passthru data BARs 2021-03-19 11:04:36 +08:00
pci_emul.h bhyve: support relocating fbuf and passthru data BARs 2021-03-19 11:04:36 +08:00
pci_fbuf.c bhyve: support relocating fbuf and passthru data BARs 2021-03-19 11:04:36 +08:00
pci_hda.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_hda.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_hostbridge.c bhyve hostbridge: Rename "device" property to "devid". 2021-03-24 09:29:15 -07:00
pci_irq.c
pci_irq.h
pci_lpc.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_lpc.h
pci_nvme.c bhyve: Fix NVMe iovec construction for large IOs 2021-06-27 15:14:52 -07:00
pci_passthru.c bhyve: support relocating fbuf and passthru data BARs 2021-03-19 11:04:36 +08:00
pci_uart.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pci_virtio_9p.c bhyve: fix regression in legacy virtio-9p config parsing 2021-04-08 18:44:58 +04:00
pci_virtio_block.c bhyve vtblk: Inform guests of disk resize events. 2021-06-11 18:00:25 -07:00
pci_virtio_console.c bhyve: change vq_getchain to return iovecs in both directions 2021-03-30 16:44:07 +08:00
pci_virtio_input.c Add a virtio-input device emulation. 2021-06-08 19:05:09 +10:00
pci_virtio_net.c bhyve: change vq_getchain to return iovecs in both directions 2021-03-30 16:44:07 +08:00
pci_virtio_rnd.c bhyve: change vq_getchain to return iovecs in both directions 2021-03-30 16:44:07 +08:00
pci_virtio_scsi.c bhyve: Gracefully handle virtio-scsi with no conf 2021-04-22 12:06:08 -04:00
pci_xhci.c Fix typo in xhci nvlist node name, and also increment device counter. 2021-04-03 14:32:54 +10:00
pci_xhci.h
pctestdev.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pctestdev.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
pm.c Silence ACPI RTC error/warning in Linux guests. 2020-07-06 08:36:14 +00:00
post.c
ps2kbd.c Append Keyboard Layout specified option for using VNC. 2021-04-21 12:40:44 +02:00
ps2kbd.h Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
ps2mouse.c Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
ps2mouse.h Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
rfb.c Append Keyboard Layout specified option for using VNC. 2021-04-21 12:40:44 +02:00
rfb.h
rtc.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
rtc.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
smbiostbl.c bhyve: add SMBIOS Baseboard Information 2021-04-12 08:09:52 -07:00
smbiostbl.h
snapshot.c bhyve/snapshot: split up mutex/cond initialization from socket creation 2021-05-21 11:23:06 -08:00
snapshot.h bhyve/snapshot: split up mutex/cond initialization from socket creation 2021-05-21 11:23:06 -08:00
sockstream.c
sockstream.h
spinup_ap.c
spinup_ap.h
task_switch.c bhyve: add wrapper for debug printf statements 2020-01-08 22:55:22 +00:00
uart_emul.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
uart_emul.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
usb_emul.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
usb_emul.h Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
usb_mouse.c Refactor configuration management in bhyve. 2021-03-18 16:30:26 -07:00
vga.c
vga.h
virtio.c Add a virtio-input device emulation. 2021-06-08 19:05:09 +10:00
virtio.h bhyve: Split out a lower-level helper for VirtIO interrupts. 2021-06-11 18:00:25 -07:00
vmgenc.c bhyve(8): Correct copyright boilerplate for r359950 2020-04-15 05:55:14 +00:00
vmgenc.h bhyve(8): Correct copyright boilerplate for r359950 2020-04-15 05:55:14 +00:00
xmsr.c bhyve: implement rdmsr for MSR_IA32_FEATURE_CONTROL 2021-04-15 13:49:19 +10:00
xmsr.h