From: "Luis R. Rodriguez" <mcgrof@suse.com>
To: Ian Campbell <Ian.Campbell@citrix.com>,
David Scott <dave.scott@eu.citrix.com>,
Anil Madhavapeddy <anil@recoil.org>
Cc: xen-devel@lists.xenproject.org,
"Luis R. Rodriguez" <mcgrof@do-not-panic.com>
Subject: Re: [PATCH v6 02/13] cxenstored: add support for systemd active sockets
Date: Thu, 17 Jul 2014 21:45:13 +0200 [thread overview]
Message-ID: <20140717194513.GS10393@wotan.suse.de> (raw)
In-Reply-To: <20140703170624.GE27687@wotan.suse.de>
David, Anil, please see below.
On Thu, Jul 03, 2014 at 07:06:24PM +0200, Luis R. Rodriguez wrote:
> On Thu, Jul 03, 2014 at 10:13:05AM +0100, Ian Campbell wrote:
> > On Wed, 2014-07-02 at 21:00 +0200, Luis R. Rodriguez wrote:
> > > On Wed, Jul 02, 2014 at 02:02:38PM +0100, Ian Campbell wrote:
> > > > On Thu, 2014-06-12 at 18:18 -0700, Luis R. Rodriguez wrote:
> > > > > +int xs_validate_active_socket(const char *connect_to)
> > > > > +{
> > > > > + char sock[30];
> > > > > +
> > > > > + /* We have to null terminate the socket path */
> > > > > + memset(sock, '\0', sizeof(sock));
> > > > > + memcpy(sock, connect_to, strlen(connect_to));
> > > >
> > > > This risks overrunning sock if connect_to is longer than 30 characters.
> > >
> > > Yuk, yes. A size check is required.
> > >
> > > > But your use of strlen suggests that connect_to is already NULL
> > > > terminated, so what is this for?
> > >
> > > strlen() seems to want the string to also be null terminated
> > > in order to work, and I also see that snprintf() is ultimately
> > > used on the C version of the library, that should ensure its null
> > > terminated. This however is not true for the ocaml version and
> > > I suppose that is the root of the issue I saw that got me to
> > > force null terimination as I did run into issues with this path
> > > IIRC when not null terminated.
> > >
> > > > > + if ((strncmp("/var/run/xenstored/socket_ro", sock, 28) != 0) &&
> > > > > + (strncmp("/var/run/xenstored/socket", sock, 25) != 0)) {
> > > >
> > > > Given that sock (or connect_to) is NULL terminated, why strncmp and not
> > > > the straightforward strcmp?
> > >
> > > See above.
> > >
> > > > As it is I think your code would accept
> > > > e.g. /var/run/xenstored/socketwibble, no?
> > >
> > > It indeed would, its best if we resolve the null termination
> > > issue internally then.
> >
> > Yeah, I think we should write the C version according to normal C string
> > conventions. If the ocaml idea of a string differs then perhaps that
> > version needs to be different.
>
> OK, or we ensure Ocaml's implementation provides a null terminated
> string to try to keep the systemd interface similar, poking Dave for
> feedback:
Dave, Anil, or other ocaml folks -- feedback is is appreciated on the questions
below.
> String_val() is used for the static string connect_to passed to the
> C wrapper, the String_val() documentation [0] says that "there is a null
> character after the last character in the string" however its unclear
> if this is guaranteed if the string was originally a static Ocaml string
> which was not null terminated.
>
> Now, its unclear which xenstored (cxenstored or oxenstored) gave me issues
> that pushed me to ensure I give systemd null terminated strings but
> I do know that it was one for sure and it took me quite a bit to figure
> out this was needed and that this was the issue. Based on my review just
> now since the cxenstored uses snprintf() for both xs_daemon_socket_ro()
> and xs_daemon_socket() and since snprintf() man page says that it will
> write at most size bytes (including the terminating null byte ('\0') I
> am left to only grow suspcicious of the oxenstored as the probable
> cause of the issues I saw. I should also highlight that the socket path
> can also come from environment variables on cxenstored, XENSTORED_PATH,
> and getenv() documentation doesn't say whether or not strings will be
> null terminated for us, that might cause unexpected issues if used and
> if it doesn't on systemd.
>
> In v5 systemd integration implementation in which I used static structs
> for the strings in C I had no issues but note that in that case I simply
> used the Ocaml string (after String_val()) to and compare it to the one
> on the static C array with:
>
> (!strcmp(connect_to, xenstore_active_sockets[i].path))
>
> I then used the C static string for sd_is_socket_unix(), not the one
> passed from cxenstored or oxenstored.
>
> [0] http://caml.inria.fr/pub/docs/manual-ocaml-400/manual033.html
Luis
next prev parent reply other threads:[~2014-07-17 19:45 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-13 1:18 [PATCH v6 00/13] xen: add systemd support Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 01/13] xenstored: enable usage of config.h on both xenstored and oxenstored Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 02/13] cxenstored: add support for systemd active sockets Luis R. Rodriguez
2014-07-02 13:02 ` Ian Campbell
2014-07-02 19:00 ` Luis R. Rodriguez
2014-07-03 9:13 ` Ian Campbell
2014-07-03 17:06 ` Luis R. Rodriguez
2014-07-04 14:32 ` Ian Campbell
2014-07-08 3:08 ` Luis R. Rodriguez
2014-07-17 19:45 ` Luis R. Rodriguez [this message]
2014-07-17 20:16 ` Dave Scott
2014-07-17 23:13 ` Luis R. Rodriguez
2014-07-18 9:27 ` Anil Madhavapeddy
2014-06-13 1:18 ` [PATCH v6 03/13] oxenstored: " Luis R. Rodriguez
2014-07-02 13:08 ` Ian Campbell
2014-07-02 19:09 ` Luis R. Rodriguez
2014-07-03 8:42 ` Dave Scott
2014-07-03 17:43 ` Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 04/13] oxenstored: force FD_CLOEXEC with Unix.set_close_on_exec on LSB init Luis R. Rodriguez
2014-07-02 13:08 ` Ian Campbell
2014-06-13 1:18 ` [PATCH v6 05/13] tools/xendomains: make xl the default and remove xm usage Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 06/13] tools/xendomains: do space cleanups Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 07/13] tools/xendomains: move to libexec and use a smaller init helper Luis R. Rodriguez
2014-06-13 7:06 ` Jacek Konieczny
2014-06-13 18:32 ` Luis R. Rodriguez
2014-07-02 13:12 ` Ian Campbell
2014-06-13 1:18 ` [PATCH v6 08/13] autoconf: xen: force a refresh with autoconf Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 09/13] autoconf: update m4/pkg.m4 Luis R. Rodriguez
2014-07-02 13:13 ` Ian Campbell
2014-07-02 19:10 ` Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 10/13] autoconf: xen: move standard path variables to config/Paths.mk.in Luis R. Rodriguez
2014-07-02 13:34 ` Ian Campbell
2014-07-02 19:32 ` Luis R. Rodriguez
2014-07-03 9:15 ` Ian Campbell
2014-07-03 18:30 ` Luis R. Rodriguez
2014-07-04 14:33 ` Ian Campbell
2014-07-08 18:41 ` Luis R. Rodriguez
2014-07-08 18:53 ` Luis R. Rodriguez
2014-07-10 16:18 ` Ian Campbell
2014-07-14 23:41 ` Luis R. Rodriguez
2014-07-03 18:53 ` Luis R. Rodriguez
2014-07-04 14:36 ` Ian Campbell
2014-07-08 18:52 ` Luis R. Rodriguez
2014-07-10 16:16 ` Ian Campbell
2014-07-14 23:42 ` Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 11/13] xencommons: move module list into a generic place Luis R. Rodriguez
2014-07-02 13:44 ` Ian Campbell
2014-07-02 21:56 ` Luis R. Rodriguez
2014-07-03 9:15 ` Ian Campbell
2014-06-13 1:18 ` [PATCH v6 12/13] autoconf: xen: enable explicit preference option for xenstored preference Luis R. Rodriguez
2014-07-02 13:54 ` Ian Campbell
2014-07-02 20:09 ` Luis R. Rodriguez
2014-07-03 9:20 ` Ian Campbell
2014-07-03 18:57 ` Luis R. Rodriguez
2014-07-04 14:37 ` Ian Campbell
2014-07-08 18:54 ` Luis R. Rodriguez
2014-06-13 1:18 ` [PATCH v6 13/13] systemd: add xen systemd service and module files Luis R. Rodriguez
2014-06-13 19:55 ` Luis R. Rodriguez
2014-06-19 19:47 ` Bastian Blank
2014-06-19 20:21 ` Luis R. Rodriguez
2014-06-19 20:26 ` Luis R. Rodriguez
2014-06-20 5:59 ` David Sutton
2014-07-02 14:02 ` Ian Campbell
2014-07-02 20:25 ` Luis R. Rodriguez
2014-06-19 19:03 ` [PATCH v6 00/13] xen: add systemd support Luis R. Rodriguez
2014-07-02 14:48 ` Ian Campbell
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=20140717194513.GS10393@wotan.suse.de \
--to=mcgrof@suse.com \
--cc=Ian.Campbell@citrix.com \
--cc=anil@recoil.org \
--cc=dave.scott@eu.citrix.com \
--cc=mcgrof@do-not-panic.com \
--cc=xen-devel@lists.xenproject.org \
/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).