All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf()
@ 2018-05-07  9:02 Greg Kurz
  2018-05-07 17:53 ` Eric Blake
  0 siblings, 1 reply; 5+ messages in thread
From: Greg Kurz @ 2018-05-07  9:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-ppc, David Gibson, Peter Maydell, Howard Spoelstra

qemu-system-ppc fails to build with GCC 8.0.1:

/home/hsp/src/qemu-master/hw/ppc/e500.c: In function ‘ppce500_load_device_tree’:
/home/hsp/src/qemu-master/hw/ppc/e500.c:442:37: error: ‘/pic@’
directive output may be truncated writing 5 bytes into a region of
size between 1 and 128 [-Werror=format-truncation=]
     snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
                                     ^~~~~
In file included from /usr/include/stdio.h:862,
                 from /home/hsp/src/qemu-master/include/qemu/osdep.h:68,
                 from /home/hsp/src/qemu-master/hw/ppc/e500.c:17:
/usr/include/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’
output between 11 and 138 bytes into a destination of size 128
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/hsp/src/qemu-master/hw/ppc/e500.c:470:39: error:
‘/global-utilities@’ directive output may be truncated writing 18
bytes into a region of size between 1 and 128
[-Werror=format-truncation=]
     snprintf(gutil, sizeof(gutil), "%s/global-utilities@%llx", soc,
                                       ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:862,
                 from /home/hsp/src/qemu-master/include/qemu/osdep.h:68,
                 from /home/hsp/src/qemu-master/hw/ppc/e500.c:17:
/usr/include/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’
output between 24 and 151 bytes into a destination of size 128
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/hsp/src/qemu-master/hw/ppc/e500.c:477:36: error: ‘/msi@’
directive output may be truncated writing 5 bytes into a region of
size between 0 and 127 [-Werror=format-truncation=]
     snprintf(msi, sizeof(msi), "/%s/msi@%llx", soc, MPC8544_MSI_REGS_OFFSET);
                                    ^~~~~
In file included from /usr/include/stdio.h:862,
                 from /home/hsp/src/qemu-master/include/qemu/osdep.h:68,
                 from /home/hsp/src/qemu-master/hw/ppc/e500.c:17:
/usr/include/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’
output between 12 and 139 bytes into a destination of size 128
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix this by converting e500 to use g_strdup_printf()+g_free() instead
of snprintf(). This is done globally, even for call sites that don't
break build, since this is the preferred practice in QEMU.

Reported-by: Howard Spoelstra <hsp.cat7@gmail.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/ppc/e500.c |   39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 3e0923cfba7d..748a8d213b25 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -106,9 +106,9 @@ static void dt_serial_create(void *fdt, unsigned long long offset,
                              const char *soc, const char *mpic,
                              const char *alias, int idx, bool defcon)
 {
-    char ser[128];
+    char *ser;
 
-    snprintf(ser, sizeof(ser), "%s/serial@%llx", soc, offset);
+    ser = g_strdup_printf("%s/serial@%llx", soc, offset);
     qemu_fdt_add_subnode(fdt, ser);
     qemu_fdt_setprop_string(fdt, ser, "device_type", "serial");
     qemu_fdt_setprop_string(fdt, ser, "compatible", "ns16550");
@@ -129,6 +129,7 @@ static void dt_serial_create(void *fdt, unsigned long long offset,
         qemu_fdt_setprop_string(fdt, "/chosen", "linux,stdout-path", ser);
         qemu_fdt_setprop_string(fdt, "/chosen", "stdout-path", ser);
     }
+    g_free(ser);
 }
 
 static void create_dt_mpc8xxx_gpio(void *fdt, const char *soc, const char *mpic)
@@ -285,13 +286,13 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
     uint32_t tb_freq = 400000000;
     int i;
     char compatible_sb[] = "fsl,mpc8544-immr\0simple-bus";
-    char soc[128];
-    char mpic[128];
+    char *soc;
+    char *mpic;
     uint32_t mpic_ph;
     uint32_t msi_ph;
-    char gutil[128];
-    char pci[128];
-    char msi[128];
+    char *gutil;
+    char *pci;
+    char *msi;
     uint32_t *pci_map = NULL;
     int len;
     uint32_t pci_ranges[14] =
@@ -391,7 +392,7 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
        the first node as boot node and be happy */
     for (i = smp_cpus - 1; i >= 0; i--) {
         CPUState *cpu;
-        char cpu_name[128];
+        char *cpu_name;
         uint64_t cpu_release_addr = pmc->spin_base + (i * 0x20);
 
         cpu = qemu_get_cpu(i);
@@ -400,7 +401,7 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
         }
         env = cpu->env_ptr;
 
-        snprintf(cpu_name, sizeof(cpu_name), "/cpus/PowerPC,8544@%x", i);
+        cpu_name = g_strdup_printf("/cpus/PowerPC,8544@%x", i);
         qemu_fdt_add_subnode(fdt, cpu_name);
         qemu_fdt_setprop_cell(fdt, cpu_name, "clock-frequency", clock_freq);
         qemu_fdt_setprop_cell(fdt, cpu_name, "timebase-frequency", tb_freq);
@@ -422,11 +423,12 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
         } else {
             qemu_fdt_setprop_string(fdt, cpu_name, "status", "okay");
         }
+        g_free(cpu_name);
     }
 
     qemu_fdt_add_subnode(fdt, "/aliases");
     /* XXX These should go into their respective devices' code */
-    snprintf(soc, sizeof(soc), "/soc@%"PRIx64, pmc->ccsrbar_base);
+    soc = g_strdup_printf("/soc@%"PRIx64, pmc->ccsrbar_base);
     qemu_fdt_add_subnode(fdt, soc);
     qemu_fdt_setprop_string(fdt, soc, "device_type", "soc");
     qemu_fdt_setprop(fdt, soc, "compatible", compatible_sb,
@@ -439,7 +441,7 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
     /* XXX should contain a reasonable value */
     qemu_fdt_setprop_cell(fdt, soc, "bus-frequency", 0);
 
-    snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
+    mpic = g_strdup_printf("%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
     qemu_fdt_add_subnode(fdt, mpic);
     qemu_fdt_setprop_string(fdt, mpic, "device_type", "open-pic");
     qemu_fdt_setprop_string(fdt, mpic, "compatible", "fsl,mpic");
@@ -467,14 +469,15 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
                          soc, mpic, "serial0", 0, true);
     }
 
-    snprintf(gutil, sizeof(gutil), "%s/global-utilities@%llx", soc,
-             MPC8544_UTIL_OFFSET);
+    gutil = g_strdup_printf("%s/global-utilities@%llx", soc,
+                            MPC8544_UTIL_OFFSET);
     qemu_fdt_add_subnode(fdt, gutil);
     qemu_fdt_setprop_string(fdt, gutil, "compatible", "fsl,mpc8544-guts");
     qemu_fdt_setprop_cells(fdt, gutil, "reg", MPC8544_UTIL_OFFSET, 0x1000);
     qemu_fdt_setprop(fdt, gutil, "fsl,has-rstcr", NULL, 0);
+    g_free(gutil);
 
-    snprintf(msi, sizeof(msi), "/%s/msi@%llx", soc, MPC8544_MSI_REGS_OFFSET);
+    msi = g_strdup_printf("/%s/msi@%llx", soc, MPC8544_MSI_REGS_OFFSET);
     qemu_fdt_add_subnode(fdt, msi);
     qemu_fdt_setprop_string(fdt, msi, "compatible", "fsl,mpic-msi");
     qemu_fdt_setprop_cells(fdt, msi, "reg", MPC8544_MSI_REGS_OFFSET, 0x200);
@@ -492,9 +495,10 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
         0xe7, 0x0);
     qemu_fdt_setprop_cell(fdt, msi, "phandle", msi_ph);
     qemu_fdt_setprop_cell(fdt, msi, "linux,phandle", msi_ph);
+    g_free(msi);
 
-    snprintf(pci, sizeof(pci), "/pci@%llx",
-             pmc->ccsrbar_base + MPC8544_PCI_REGS_OFFSET);
+    pci = g_strdup_printf("/pci@%llx",
+                          pmc->ccsrbar_base + MPC8544_PCI_REGS_OFFSET);
     qemu_fdt_add_subnode(fdt, pci);
     qemu_fdt_setprop_cell(fdt, pci, "cell-index", 0);
     qemu_fdt_setprop_string(fdt, pci, "compatible", "fsl,mpc8540-pci");
@@ -522,14 +526,17 @@ static int ppce500_load_device_tree(PPCE500MachineState *pms,
     qemu_fdt_setprop_cell(fdt, pci, "#size-cells", 2);
     qemu_fdt_setprop_cell(fdt, pci, "#address-cells", 3);
     qemu_fdt_setprop_string(fdt, "/aliases", "pci0", pci);
+    g_free(pci);
 
     if (pmc->has_mpc8xxx_gpio) {
         create_dt_mpc8xxx_gpio(fdt, soc, mpic);
     }
+    g_free(soc);
 
     if (pmc->has_platform_bus) {
         platform_bus_create_devtree(pmc, fdt, mpic);
     }
+    g_free(mpic);
 
     pmc->fixup_devtree(fdt);
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf()
  2018-05-07  9:02 [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf() Greg Kurz
@ 2018-05-07 17:53 ` Eric Blake
  2018-05-08  9:34   ` Greg Kurz
  0 siblings, 1 reply; 5+ messages in thread
From: Eric Blake @ 2018-05-07 17:53 UTC (permalink / raw)
  To: Greg Kurz, qemu-devel
  Cc: Peter Maydell, Howard Spoelstra, qemu-ppc, David Gibson

On 05/07/2018 04:02 AM, Greg Kurz wrote:
> qemu-system-ppc fails to build with GCC 8.0.1:
> 
> /home/hsp/src/qemu-master/hw/ppc/e500.c: In function ‘ppce500_load_device_tree’:
> /home/hsp/src/qemu-master/hw/ppc/e500.c:442:37: error: ‘/pic@’
> directive output may be truncated writing 5 bytes into a region of
> size between 1 and 128 [-Werror=format-truncation=]
>       snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
>                                       ^~~~~

> 
> Fix this by converting e500 to use g_strdup_printf()+g_free() instead
> of snprintf(). This is done globally, even for call sites that don't
> break build, since this is the preferred practice in QEMU.
> 
> Reported-by: Howard Spoelstra <hsp.cat7@gmail.com>
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
>   hw/ppc/e500.c |   39 +++++++++++++++++++++++----------------
>   1 file changed, 23 insertions(+), 16 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf()
  2018-05-07 17:53 ` Eric Blake
@ 2018-05-08  9:34   ` Greg Kurz
  2018-05-08 11:01     ` Peter Maydell
  0 siblings, 1 reply; 5+ messages in thread
From: Greg Kurz @ 2018-05-08  9:34 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Eric Blake, Howard Spoelstra, qemu-ppc, David Gibson

On Mon, 7 May 2018 12:53:45 -0500
Eric Blake <eblake@redhat.com> wrote:

> On 05/07/2018 04:02 AM, Greg Kurz wrote:
> > qemu-system-ppc fails to build with GCC 8.0.1:
> > 
> > /home/hsp/src/qemu-master/hw/ppc/e500.c: In function ‘ppce500_load_device_tree’:
> > /home/hsp/src/qemu-master/hw/ppc/e500.c:442:37: error: ‘/pic@’
> > directive output may be truncated writing 5 bytes into a region of
> > size between 1 and 128 [-Werror=format-truncation=]
> >       snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
> >                                       ^~~~~  
> 
> > 
> > Fix this by converting e500 to use g_strdup_printf()+g_free() instead
> > of snprintf(). This is done globally, even for call sites that don't
> > break build, since this is the preferred practice in QEMU.
> > 
> > Reported-by: Howard Spoelstra <hsp.cat7@gmail.com>
> > Signed-off-by: Greg Kurz <groug@kaod.org>
> > ---
> >   hw/ppc/e500.c |   39 +++++++++++++++++++++++----------------
> >   1 file changed, 23 insertions(+), 16 deletions(-)
> >   
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 

Hi Peter,

David said the next pull request for ppc would happen in a month. This
patch fixes an annoying build break with recent GCC, and it already
got two positive reviews, is it possible to have it merged upstream ?

Cheers,

--
Greg

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf()
  2018-05-08  9:34   ` Greg Kurz
@ 2018-05-08 11:01     ` Peter Maydell
  2018-06-04  0:43       ` David Gibson
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Maydell @ 2018-05-08 11:01 UTC (permalink / raw)
  To: Greg Kurz
  Cc: QEMU Developers, Eric Blake, Howard Spoelstra, qemu-ppc, David Gibson

On 8 May 2018 at 10:34, Greg Kurz <groug@kaod.org> wrote:
> On Mon, 7 May 2018 12:53:45 -0500
> Eric Blake <eblake@redhat.com> wrote:
>
>> On 05/07/2018 04:02 AM, Greg Kurz wrote:
>> > qemu-system-ppc fails to build with GCC 8.0.1:
>> >
>> > /home/hsp/src/qemu-master/hw/ppc/e500.c: In function ‘ppce500_load_device_tree’:
>> > /home/hsp/src/qemu-master/hw/ppc/e500.c:442:37: error: ‘/pic@’
>> > directive output may be truncated writing 5 bytes into a region of
>> > size between 1 and 128 [-Werror=format-truncation=]
>> >       snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
>> >                                       ^~~~~
>>
>> >
>> > Fix this by converting e500 to use g_strdup_printf()+g_free() instead
>> > of snprintf(). This is done globally, even for call sites that don't
>> > break build, since this is the preferred practice in QEMU.
>> >
>> > Reported-by: Howard Spoelstra <hsp.cat7@gmail.com>
>> > Signed-off-by: Greg Kurz <groug@kaod.org>
>> > ---
>> >   hw/ppc/e500.c |   39 +++++++++++++++++++++++----------------
>> >   1 file changed, 23 insertions(+), 16 deletions(-)
>> >
>>
>> Reviewed-by: Eric Blake <eblake@redhat.com>
>>
>
> Hi Peter,
>
> David said the next pull request for ppc would happen in a month. This
> patch fixes an annoying build break with recent GCC, and it already
> got two positive reviews, is it possible to have it merged upstream ?

Sure; applied to master.

-- PMM

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf()
  2018-05-08 11:01     ` Peter Maydell
@ 2018-06-04  0:43       ` David Gibson
  0 siblings, 0 replies; 5+ messages in thread
From: David Gibson @ 2018-06-04  0:43 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Greg Kurz, QEMU Developers, Eric Blake, Howard Spoelstra, qemu-ppc

[-- Attachment #1: Type: text/plain, Size: 1821 bytes --]

On Tue, May 08, 2018 at 12:01:59PM +0100, Peter Maydell wrote:
> On 8 May 2018 at 10:34, Greg Kurz <groug@kaod.org> wrote:
> > On Mon, 7 May 2018 12:53:45 -0500
> > Eric Blake <eblake@redhat.com> wrote:
> >
> >> On 05/07/2018 04:02 AM, Greg Kurz wrote:
> >> > qemu-system-ppc fails to build with GCC 8.0.1:
> >> >
> >> > /home/hsp/src/qemu-master/hw/ppc/e500.c: In function ‘ppce500_load_device_tree’:
> >> > /home/hsp/src/qemu-master/hw/ppc/e500.c:442:37: error: ‘/pic@’
> >> > directive output may be truncated writing 5 bytes into a region of
> >> > size between 1 and 128 [-Werror=format-truncation=]
> >> >       snprintf(mpic, sizeof(mpic), "%s/pic@%llx", soc, MPC8544_MPIC_REGS_OFFSET);
> >> >                                       ^~~~~
> >>
> >> >
> >> > Fix this by converting e500 to use g_strdup_printf()+g_free() instead
> >> > of snprintf(). This is done globally, even for call sites that don't
> >> > break build, since this is the preferred practice in QEMU.
> >> >
> >> > Reported-by: Howard Spoelstra <hsp.cat7@gmail.com>
> >> > Signed-off-by: Greg Kurz <groug@kaod.org>
> >> > ---
> >> >   hw/ppc/e500.c |   39 +++++++++++++++++++++++----------------
> >> >   1 file changed, 23 insertions(+), 16 deletions(-)
> >> >
> >>
> >> Reviewed-by: Eric Blake <eblake@redhat.com>
> >>
> >
> > Hi Peter,
> >
> > David said the next pull request for ppc would happen in a month. This
> > patch fixes an annoying build break with recent GCC, and it already
> > got two positive reviews, is it possible to have it merged upstream ?
> 
> Sure; applied to master.

Thanks!

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-06-04  1:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-07  9:02 [Qemu-devel] [PATCH] ppc: e500: use g_strdup_printf() instead of snprintf() Greg Kurz
2018-05-07 17:53 ` Eric Blake
2018-05-08  9:34   ` Greg Kurz
2018-05-08 11:01     ` Peter Maydell
2018-06-04  0:43       ` David Gibson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.