aboutsummaryrefslogtreecommitdiff
path: root/hw/nvme
diff options
context:
space:
mode:
authorKlaus Jensen <k.jensen@samsung.com>2023-05-24 11:28:34 +0200
committerKlaus Jensen <k.jensen@samsung.com>2023-06-28 11:22:17 +0200
commit3ae8a54a087d54cfd109ab3d844ff4cba54a28d8 (patch)
tree0d9c7d8e3074d00aee2c88f9f084241e267ae7fc /hw/nvme
parent381ab99d858709eab34b65d123a6356b8b1e87bd (diff)
downloadqemu-3ae8a54a087d54cfd109ab3d844ff4cba54a28d8.zip
qemu-3ae8a54a087d54cfd109ab3d844ff4cba54a28d8.tar.gz
qemu-3ae8a54a087d54cfd109ab3d844ff4cba54a28d8.tar.bz2
hw/nvme: fix verification of number of ruhis
Fix a off-by-one error when verifying the number of reclaim unit handle identifiers specified in fdp.ruhs. To make the fix nicer, move the verification of the fdp.nruh parameter to an earlier point. Fixes: 73064edfb864 ("hw/nvme: flexible data placement emulation") Reviewed-by: Jesper Wendel Devantier <j.devantier@samsung.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Diffstat (limited to 'hw/nvme')
-rw-r--r--hw/nvme/ns.c4
-rw-r--r--hw/nvme/subsys.c6
2 files changed, 5 insertions, 5 deletions
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 547c0b1..050fdaf 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -438,9 +438,7 @@ static bool nvme_ns_init_fdp(NvmeNamespace *ns, Error **errp)
/* parse the placement handle identifiers */
while ((token = qemu_strsep(&p, ";")) != NULL) {
- ns->fdp.nphs += 1;
- if (ns->fdp.nphs > NVME_FDP_MAXPIDS ||
- ns->fdp.nphs == endgrp->fdp.nruh) {
+ if (ns->fdp.nphs++ == endgrp->fdp.nruh) {
error_setg(errp, "too many placement handles");
free(r);
return false;
diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c
index 24ddec8..d30bb8b 100644
--- a/hw/nvme/subsys.c
+++ b/hw/nvme/subsys.c
@@ -158,8 +158,10 @@ static bool nvme_subsys_setup_fdp(NvmeSubsystem *subsys, Error **errp)
endgrp->fdp.nrg = subsys->params.fdp.nrg;
- if (!subsys->params.fdp.nruh) {
- error_setg(errp, "fdp.nruh must be non-zero");
+ if (!subsys->params.fdp.nruh ||
+ subsys->params.fdp.nruh > NVME_FDP_MAXPIDS) {
+ error_setg(errp, "fdp.nruh must be non-zero and less than %u",
+ NVME_FDP_MAXPIDS);
return false;
}