WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Re: c/s 23253:a3db6b91f32d causes build failure with gcc

To: George Dunlap <George.Dunlap@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] Re: c/s 23253:a3db6b91f32d causes build failure with gcc 4.4.3-4ubuntu5
From: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
Date: Fri, 6 May 2011 13:58:14 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Fri, 06 May 2011 06:00:13 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <BANLkTi=DP3QP_CM_OCxnwq-7owx-9CNhmg@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <BANLkTikTSv+Ab--C5AQi_ub1SFaG2HfBEg@xxxxxxxxxxxxxx> <1304685218.26692.154.camel@xxxxxxxxxxxxxxxxxxxxxx> <BANLkTi=DP3QP_CM_OCxnwq-7owx-9CNhmg@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Fri, 2011-05-06 at 13:50 +0100, George Dunlap wrote:
> Unfortunately not.
> 
> Looks like we could either make libxl__domain_bios() a #define (not
> tested), or make the argument "%s" (which seems to work, patch
> attached).
> 
> Adding a format string of just a string seems kind of dumb, but I
> don't think this is a really hot path...

It's actually sensible to use "%s" when the string might be untrusted
but in this case it's really just a string literal, I guess the
laundering through a function is enough to hide that from gcc. Using %s
is the best fix, I think.

Ian. 

> 
>  -George
> 
> 
> On Fri, May 6, 2011 at 1:33 PM, Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx> 
> wrote:
> > On Fri, 2011-05-06 at 12:14 +0100, George Dunlap wrote:
> >
> >> The line in question is:
> >>     libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/bios", path),
> >>                     libxl__domain_bios(gc, info));
> >>
> >> Looks like libxl__xs_write() is expecting the 4th argument to be a
> >> format string...?
> >
> > Yes, and hence it needs to be a const char * not a char *, so we should
> > change both libxl__domain_bios and libxl__xs_write I think.
> >
> > Does this help? It works for me, but my compiler doesn't appear to
> > complain in this way...
> >
> > Ian.
> >
> > 8<-------------------------------------------
> >
> > # HG changeset patch
> > # User Ian Campbell <ian.campbell@xxxxxxxxxx>
> > # Date 1304685175 -3600
> > # Node ID 4e5487962178e7affd7d7d0341a90dde8c60915e
> > # Parent  faca1c90188e536eb0f02992c766d06759be376f
> > libxl: libxl__xs_write format string should be const.
> >
> > George Dunlap reports that gcc 4.4.3 complains:
> >        libxl_dm.c: In function libxl__create_device_mode:
> >        libxl_dm.c:776: error: format not a string literal and no format 
> > arguments
> > And indeed the format argument here is a char * from libxl__domain_bios().
> >
> > Make the argument to libxl__xs_write a const char * and change
> > libxl__domain_bios to return a const char too.
> >
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> >
> > diff -r faca1c90188e -r 4e5487962178 tools/libxl/libxl_dm.c
> > --- a/tools/libxl/libxl_dm.c    Fri May 06 13:14:24 2011 +0100
> > +++ b/tools/libxl/libxl_dm.c    Fri May 06 13:32:55 2011 +0100
> > @@ -68,12 +68,12 @@ const char *libxl__domain_device_model(l
> >     return dm;
> >  }
> >
> > -static char *libxl__domain_bios(libxl__gc *gc,
> > +static const char *libxl__domain_bios(libxl__gc *gc,
> >                                 libxl_device_model_info *info)
> >  {
> >     switch (info->device_model_version) {
> > -    case 1: return libxl__strdup(gc, "rombios");
> > -    case 2: return libxl__strdup(gc, "seabios");
> > +    case 1: return "rombios";
> > +    case 2: return "seabios";
> >     default:return NULL;
> >     }
> >  }
> > diff -r faca1c90188e -r 4e5487962178 tools/libxl/libxl_internal.h
> > --- a/tools/libxl/libxl_internal.h      Fri May 06 13:14:24 2011 +0100
> > +++ b/tools/libxl/libxl_internal.h      Fri May 06 13:32:55 2011 +0100
> > @@ -153,7 +153,7 @@ _hidden char **libxl__xs_kvs_of_flexarra
> >  _hidden int libxl__xs_writev(libxl__gc *gc, xs_transaction_t t,
> >                     char *dir, char **kvs);
> >  _hidden int libxl__xs_write(libxl__gc *gc, xs_transaction_t t,
> > -                   char *path, char *fmt, ...) PRINTF_ATTRIBUTE(4, 5);
> > +                   char *path, const char *fmt, ...) PRINTF_ATTRIBUTE(4, 
> > 5);
> >    /* Each fn returns 0 on success.
> >     * On error: returns -1, sets errno (no logging) */
> >
> > diff -r faca1c90188e -r 4e5487962178 tools/libxl/libxl_xshelp.c
> > --- a/tools/libxl/libxl_xshelp.c        Fri May 06 13:14:24 2011 +0100
> > +++ b/tools/libxl/libxl_xshelp.c        Fri May 06 13:32:55 2011 +0100
> > @@ -69,7 +69,7 @@ int libxl__xs_writev(libxl__gc *gc, xs_t
> >  }
> >
> >  int libxl__xs_write(libxl__gc *gc, xs_transaction_t t,
> > -                   char *path, char *fmt, ...)
> > +                   char *path, const char *fmt, ...)
> >  {
> >     libxl_ctx *ctx = libxl__gc_owner(gc);
> >     char *s;
> >
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > http://lists.xensource.com/xen-devel
> >



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel