From: Klaus Jensen <its@irrelevant.dk>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <fam@euphon.net>,
qemu-block@nongnu.org, Klaus Jensen <k.jensen@samsung.com>,
Gollu Appalanaidu <anaidu.gollu@samsung.com>,
qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Keith Busch <kbusch@kernel.org>
Subject: Re: [PATCH for-6.0 v2 4/8] hw/block/nvme: fix controller namespaces array indexing
Date: Tue, 6 Apr 2021 09:28:10 +0200 [thread overview]
Message-ID: <YGwNipvKFR94iUvq@apples.localdomain> (raw)
In-Reply-To: <e9f266a2-f12e-6dca-805e-4f70a4ffc248@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3581 bytes --]
On Apr 6 09:01, Philippe Mathieu-Daudé wrote:
> On 4/5/21 7:54 PM, Klaus Jensen wrote:
> > From: Klaus Jensen <k.jensen@samsung.com>
> >
> > The controller namespaces array being 0-indexed requires 'nsid - 1'
> > everywhere. Something that is easy to miss. Align the controller
> > namespaces array with the subsystem namespaces array such that both are
> > 1-indexed.
>
> TBH I don't understand the justification.
Justification is mostly to align with the subsystem device. I like the
'1-indexed' approach better. And the -1 causes Coverity to complain
before the assert was added.
> Assuming you hit a
> bug and try to protect yourself, maybe now you should also
> check for
>
> assert(n->namespaces[0] == NULL);
>
> somewhere. In nvme_ns() maybe?
>
That is definitely a state that should always hold, I guess we can do
that, but we do already guard all "insertions" into the namespace array
by an assert on the nsid. Then again, asserting here makes sure that we
don't introduce something else that inserts on this invalid position.
So, good point, I'll add it.
> >
> > Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> > Reviewed-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
> > ---
> > hw/block/nvme.h | 8 ++++----
> > hw/block/nvme.c | 2 +-
> > 2 files changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/hw/block/nvme.h b/hw/block/nvme.h
> > index 9edc86d79e98..c610ab30dc5c 100644
> > --- a/hw/block/nvme.h
> > +++ b/hw/block/nvme.h
> > @@ -217,7 +217,7 @@ typedef struct NvmeCtrl {
> > * Attached namespaces to this controller. If subsys is not given, all
> > * namespaces in this list will always be attached.
> > */
> > - NvmeNamespace *namespaces[NVME_MAX_NAMESPACES];
> > + NvmeNamespace *namespaces[NVME_MAX_NAMESPACES + 1];
> > NvmeSQueue **sq;
> > NvmeCQueue **cq;
> > NvmeSQueue admin_sq;
> > @@ -232,7 +232,7 @@ static inline NvmeNamespace *nvme_ns(NvmeCtrl *n, uint32_t nsid)
> > return NULL;
> > }
> >
> > - return n->namespaces[nsid - 1];
> > + return n->namespaces[nsid];
> > }
> >
> > static inline bool nvme_ns_is_attached(NvmeCtrl *n, NvmeNamespace *ns)
> > @@ -253,7 +253,7 @@ static inline void nvme_ns_attach(NvmeCtrl *n, NvmeNamespace *ns)
> > uint32_t nsid = nvme_nsid(ns);
> > assert(nsid && nsid <= NVME_MAX_NAMESPACES);
> >
> > - n->namespaces[nsid - 1] = ns;
> > + n->namespaces[nsid] = ns;
> > }
> >
> > static inline void nvme_ns_detach(NvmeCtrl *n, NvmeNamespace *ns)
> > @@ -261,7 +261,7 @@ static inline void nvme_ns_detach(NvmeCtrl *n, NvmeNamespace *ns)
> > uint32_t nsid = nvme_nsid(ns);
> > assert(nsid && nsid <= NVME_MAX_NAMESPACES);
> >
> > - n->namespaces[nsid - 1] = NULL;
> > + n->namespaces[nsid] = NULL;
> > }
> >
> > static inline NvmeCQueue *nvme_cq(NvmeRequest *req)
> > diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> > index c54ec3c9523c..6d31d5b17a0b 100644
> > --- a/hw/block/nvme.c
> > +++ b/hw/block/nvme.c
> > @@ -5915,7 +5915,7 @@ int nvme_register_namespace(NvmeCtrl *n, NvmeNamespace *ns, Error **errp)
> > return -1;
> > }
> > } else {
> > - if (n->namespaces[nsid - 1]) {
> > + if (n->namespaces[nsid]) {
> > error_setg(errp, "namespace id '%d' is already in use", nsid);
> > return -1;
> > }
> >
>
>
--
One of us - No more doubt, silence or taboo about mental illness.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2021-04-06 7:32 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-05 17:54 [PATCH for-6.0 v2 0/8] hw/block/nvme: misc fixes Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 1/8] hw/block/nvme: fix pi constraint check Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 2/8] hw/block/nvme: fix missing string representation for ns attachment Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 3/8] hw/block/nvme: fix the nsid 'invalid' value Klaus Jensen
2021-04-06 6:53 ` Philippe Mathieu-Daudé
2021-04-06 7:16 ` Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 4/8] hw/block/nvme: fix controller namespaces array indexing Klaus Jensen
2021-04-06 7:01 ` Philippe Mathieu-Daudé
2021-04-06 7:28 ` Klaus Jensen [this message]
2021-04-06 18:21 ` Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 5/8] hw/block/nvme: fix warning about legacy namespace configuration Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 6/8] hw/block/nvme: update dmsrl limit on namespace detachment Klaus Jensen
2021-04-06 7:10 ` Philippe Mathieu-Daudé
2021-04-06 7:24 ` Klaus Jensen
2021-04-09 17:39 ` Thomas Huth
2021-04-12 7:26 ` Klaus Jensen
2021-04-05 17:54 ` [PATCH for-6.0 v2 7/8] hw/block/nvme: fix handling of private namespaces Klaus Jensen
2021-04-06 6:23 ` Minwoo Im
2021-04-05 17:54 ` [PATCH for-6.0 v2 8/8] hw/block/nvme: add missing copyright headers Klaus Jensen
2021-04-05 18:59 ` [PATCH for-6.0 v2 0/8] hw/block/nvme: misc fixes Keith Busch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YGwNipvKFR94iUvq@apples.localdomain \
--to=its@irrelevant.dk \
--cc=anaidu.gollu@samsung.com \
--cc=fam@euphon.net \
--cc=k.jensen@samsung.com \
--cc=kbusch@kernel.org \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).