]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
hw/nvme: fix verification of number of ruhis
authorKlaus Jensen <k.jensen@samsung.com>
Wed, 24 May 2023 09:28:34 +0000 (11:28 +0200)
committerKlaus Jensen <k.jensen@samsung.com>
Wed, 28 Jun 2023 09:22:17 +0000 (11:22 +0200)
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>
hw/nvme/ns.c
hw/nvme/subsys.c

index 547c0b154312278b7bcca9efc0faccfae658e78b..050fdaf50fcdbe229e019dfbc21355055aef9fa7 100644 (file)
@@ -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;
index 24ddec860e45492793f7288aaa8122656206f10b..d30bb8bfd5b477a255b39a7eb620fd04701bf2d8 100644 (file)
@@ -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;
     }