mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 01:30:30 -04:00
bhyve: validate NVMe deallocate range values
For NVMe emulation, validate the Data Set Management LBA ranges do not exceed the capacity of the backing storage. If they do, return an "LBA Out of Range" error. Fixes UNH Test 2.2.3 Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24893
This commit is contained in:
parent
73cd73c0b8
commit
ae638f2bd5
1 changed files with 9 additions and 0 deletions
|
|
@ -1877,6 +1877,11 @@ nvme_opc_dataset_mgmt(struct pci_nvme_softc *sc,
|
|||
nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, cmd->prp1, cmd->prp2,
|
||||
(uint8_t *)range, NVME_MAX_DSM_TRIM, NVME_COPY_FROM_PRP);
|
||||
|
||||
if ((range[0].starting_lba * sectsz) > nvstore->size) {
|
||||
pci_nvme_status_genc(status, NVME_SC_LBA_OUT_OF_RANGE);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the request is for more than a single range, store
|
||||
* the ranges in the br_iov. Optimize for the common case
|
||||
|
|
@ -1896,6 +1901,10 @@ nvme_opc_dataset_mgmt(struct pci_nvme_softc *sc,
|
|||
struct iovec *iov = req->io_req.br_iov;
|
||||
|
||||
for (r = 0; r <= nr; r++) {
|
||||
if ((range[r].starting_lba * sectsz) > nvstore->size) {
|
||||
pci_nvme_status_genc(status, NVME_SC_LBA_OUT_OF_RANGE);
|
||||
goto out;
|
||||
}
|
||||
iov[r].iov_base = (void *)(range[r].starting_lba * sectsz);
|
||||
iov[r].iov_len = range[r].length * sectsz;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue