From: Jeff Cody <jcody@redhat.com>
To: "Benoît Canet" <benoit.canet@irqsave.net>
Cc: kwolf@redhat.com, pkrempa@redhat.com, famz@redhat.com,
qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 1/5] block: Auto-generate node_names for each BDS entry
Date: Thu, 15 May 2014 08:06:14 -0400 [thread overview]
Message-ID: <20140515120614.GG8452@localhost.localdomain> (raw)
In-Reply-To: <20140515115859.GF2812@irqsave.net>
On Thu, May 15, 2014 at 01:58:59PM +0200, Benoît Canet wrote:
> The Wednesday 14 May 2014 à 23:20:15 (-0400), Jeff Cody wrote :
> > Currently, node_name is only filled in when done so explicitly by the
> > user. If no node_name is specified, then the node name field is not
> > populated.
> >
> > If node_names are automatically generated when not specified, that means
> > that all block job operations can be done by reference to the unique
> > node_name field. This eliminates ambiguity in filename pathing
> > (relative filenames, or file descriptors, symlinks, mounts, etc..) that
> > qemu currently needs to deal with.
> >
> > If a node name is specified, then it will not be automatically
> > generated for that BDS entry.
> >
> > If it is automatically generated, it will be prefaced with "__qemu##",
> > followed by 8 characters of a unique number, followed by 8 random
> > ASCII characters in the range of 'A-Z'. Some sample generated node-name
> > strings:
> > __qemu##00000000IAIYNXXR
> > __qemu##00000002METXTRBQ
> > __qemu##00000001FMBORDWG
> >
> > The prefix is to aid in identifying it as a qemu-generated name, the
> > numeric portion is to guarantee uniqueness in a given qemu session, and
> > the random characters are to further avoid any accidental collisions
> > with user-specified node-names.
> >
> > Signed-off-by: Jeff Cody <jcody@redhat.com>
> > ---
> > block.c | 16 +++++++++++++++-
> > 1 file changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/block.c b/block.c
> > index c90c71a..81945d3 100644
> > --- a/block.c
> > +++ b/block.c
> > @@ -838,12 +838,26 @@ static int bdrv_open_flags(BlockDriverState *bs, int flags)
> > return open_flags;
> > }
> >
> > +#define GEN_NODE_NAME_PREFIX "__qemu##"
> > +#define GEN_NODE_NAME_MAX_LEN (sizeof(GEN_NODE_NAME_PREFIX) + 8 + 8)
> > static void bdrv_assign_node_name(BlockDriverState *bs,
> > const char *node_name,
> > Error **errp)
> > {
> > + char gen_node_name[GEN_NODE_NAME_MAX_LEN];
>
> The room for the '\0' string termination seems to be missing:
>
> char gen_node_name[GEN_NODE_NAME_MAX_LEN + 1];
>
The array includes room for it, note the use of 'sizeof()':
#define GEN_NODE_NAME_MAX_LEN (sizeof(GEN_NODE_NAME_PREFIX) + 8 + 8)
sizeof() includes the '\0' in the length, while strlen() does not;
e.g.:
sizeof("four") = 5
strlen("four") = 4
> > + static uint32_t counter; /* simple counter to guarantee uniqueness */
> > +
> > + /* if node_name is NULL, auto-generate a node name */
> > if (!node_name) {
> > - return;
> > + int len;
> > + snprintf(gen_node_name, GEN_NODE_NAME_MAX_LEN,
> > + "%s%08x", GEN_NODE_NAME_PREFIX, counter++);
> > + len = strlen(gen_node_name);
> > + while (len < GEN_NODE_NAME_MAX_LEN - 1) {
> > + gen_node_name[len++] = g_random_int_range('A', 'Z');
> > + }
>
> Is this code generating only 7 random chars instead of 8 ?
>
It generates 8 random characters (the sample node-name strings in the
commit message were pulled straight from the QMP command
'query-named-block-nodes')
> > + gen_node_name[GEN_NODE_NAME_MAX_LEN - 1] = '\0';
>
> Could be:
> gen_node_name[GEN_NODE_NAME_MAX_LEN] = '\0';
> if the array is properly declared.
>
That would go over the array bounds by 1.
> > + node_name = gen_node_name;
> > }
> >
> > /* empty string node name is invalid */
> > --
> > 1.8.3.1
> >
next prev parent reply other threads:[~2014-05-15 12:06 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-15 3:20 [Qemu-devel] [PATCH 0/5] block: Modify block-commit to use node-names Jeff Cody
2014-05-15 3:20 ` [Qemu-devel] [PATCH 1/5] block: Auto-generate node_names for each BDS entry Jeff Cody
2014-05-15 11:58 ` Benoît Canet
2014-05-15 12:06 ` Jeff Cody [this message]
2014-05-15 12:32 ` Benoît Canet
2014-05-15 12:37 ` Jeff Cody
2014-05-15 14:11 ` Eric Blake
2014-05-15 15:59 ` Eric Blake
2014-05-15 18:41 ` Jeff Cody
2014-05-15 19:12 ` Eric Blake
2014-05-16 9:39 ` Kevin Wolf
2014-05-16 11:35 ` Jeff Cody
2014-05-16 12:47 ` Eric Blake
2014-05-16 17:16 ` Kevin Wolf
2014-05-15 3:20 ` [Qemu-devel] [PATCH 2/5] block: add helper function to determine if a BDS is in a chain Jeff Cody
2014-05-15 11:48 ` Benoît Canet
2014-05-15 14:16 ` Eric Blake
2014-05-15 14:24 ` Kevin Wolf
2014-05-15 14:31 ` Jeff Cody
2014-05-15 3:20 ` [Qemu-devel] [PATCH 3/5] block: make 'top' argument to block-commit optional Jeff Cody
2014-05-15 11:47 ` Benoît Canet
2014-05-15 11:49 ` Jeff Cody
2014-05-15 15:07 ` Eric Blake
2014-05-15 3:20 ` [Qemu-devel] [PATCH 4/5] block: Accept node-name arguments for block-commit Jeff Cody
2014-05-15 12:09 ` Benoît Canet
2014-05-15 15:42 ` Eric Blake
2014-05-15 18:04 ` Jeff Cody
2014-05-15 3:20 ` [Qemu-devel] [PATCH 5/5] block: extend block-commit to accept a string for the backing file Jeff Cody
2014-05-15 12:26 ` Benoît Canet
2014-05-15 12:57 ` Eric Blake
2014-05-15 13:10 ` Jeff Cody
2014-05-15 13:14 ` Eric Blake
2014-05-15 16:06 ` Eric Blake
2014-05-15 18:22 ` Jeff Cody
2014-05-15 18:52 ` Eric Blake
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=20140515120614.GG8452@localhost.localdomain \
--to=jcody@redhat.com \
--cc=benoit.canet@irqsave.net \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pkrempa@redhat.com \
--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).