Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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: 73064ed ("hw/nvme: flexible data placement emulation")
Reviewed-by: Jesper Wendel Devantier <j.devantier@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
  • Loading branch information
birkelund committed Jun 28, 2023
1 parent 381ab99 commit 3ae8a54
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 5 deletions.
4 changes: 1 addition & 3 deletions hw/nvme/ns.c
Expand Up @@ -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;
Expand Down
6 changes: 4 additions & 2 deletions hw/nvme/subsys.c
Expand Up @@ -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;
}

Expand Down

0 comments on commit 3ae8a54

Please sign in to comment.