* [PATCH v3 0/2] Fixing several GCC 11 warnings @ 2021-01-14 7:07 Miroslav Rezanina 2021-01-14 7:07 ` [PATCH v3 1/2] Fix net.c warning on GCC 11 Miroslav Rezanina 2021-01-14 7:07 ` [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name Miroslav Rezanina 0 siblings, 2 replies; 12+ messages in thread From: Miroslav Rezanina @ 2021-01-14 7:07 UTC (permalink / raw) To: qemu-devel Compiling qemu using GCC 11 we got several new warnings. To allow build with --enable-werror, we need to solve issues generating these warnings. Signed-of-by: Miroslav Rezanina <mrezanin@redhat.com> v2: - Patch 2 rewrite to use strpadcpy - removed Patch 3 (different version sent by Philippe Mathieu-Daudé) v3: - Fixed patch commit logs (no cod changes) Miroslav Rezanina (2): Fix net.c warning on GCC 11 s390x: Use strpadcpy for copying vm name net/eth.c | 3 +++ target/s390x/kvm.c | 12 +++++------- target/s390x/misc_helper.c | 7 +++++-- 3 files changed, 13 insertions(+), 9 deletions(-) -- 2.18.4 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 7:07 [PATCH v3 0/2] Fixing several GCC 11 warnings Miroslav Rezanina @ 2021-01-14 7:07 ` Miroslav Rezanina 2021-01-14 13:15 ` Philippe Mathieu-Daudé 2021-01-14 7:07 ` [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name Miroslav Rezanina 1 sibling, 1 reply; 12+ messages in thread From: Miroslav Rezanina @ 2021-01-14 7:07 UTC (permalink / raw) To: qemu-devel When building qemu with GCC 11, compiling eth.c file produce following warning: warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more attributes. As this usage is expected, suppress the warning temporarily through the function using this retyping. Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> --- net/eth.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/eth.c b/net/eth.c index 1e0821c5f8..b9bdd0435c 100644 --- a/net/eth.c +++ b/net/eth.c @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, struct ip6_ext_hdr *ext_hdr, struct in6_address *dst_addr) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; if ((rthdr->rtype == 2) && @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, } return false; +#pragma GCC diagnostic pop } static bool -- 2.18.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 7:07 ` [PATCH v3 1/2] Fix net.c warning on GCC 11 Miroslav Rezanina @ 2021-01-14 13:15 ` Philippe Mathieu-Daudé 2021-01-14 14:19 ` Alexander Bulekov 2021-01-14 14:36 ` Miroslav Rezanina 0 siblings, 2 replies; 12+ messages in thread From: Philippe Mathieu-Daudé @ 2021-01-14 13:15 UTC (permalink / raw) To: Miroslav Rezanina; +Cc: Jason Wang, Dmitry Fleytman, qemu-devel +Jason +Dmitry On 1/14/21 8:07 AM, Miroslav Rezanina wrote: > When building qemu with GCC 11, compiling eth.c file produce following warning: > > warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] > > This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more > attributes. > > As this usage is expected, suppress the warning temporarily through the function > using this retyping. This is not expected, this is a bug... > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > --- > net/eth.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/net/eth.c b/net/eth.c > index 1e0821c5f8..b9bdd0435c 100644 > --- a/net/eth.c > +++ b/net/eth.c > @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > struct ip6_ext_hdr *ext_hdr, > struct in6_address *dst_addr) > { > +#pragma GCC diagnostic push > +#pragma GCC diagnostic ignored "-Warray-bounds" > struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; eth_parse_ipv6_hdr() called iov_to_buf() to fill the 2 bytes of ext_hdr. > if ((rthdr->rtype == 2) && Here we access after the 2 bytes filled... rthdr->rtype is somewhere on eth_parse_ipv6_hdr's stack, its content is unknown. > @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > } > > return false; > +#pragma GCC diagnostic pop Nacked-by: Philippe Mathieu-Daudé <philmd@redhat.com> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 13:15 ` Philippe Mathieu-Daudé @ 2021-01-14 14:19 ` Alexander Bulekov 2021-01-14 14:35 ` Philippe Mathieu-Daudé 2021-01-14 14:38 ` Miroslav Rezanina 2021-01-14 14:36 ` Miroslav Rezanina 1 sibling, 2 replies; 12+ messages in thread From: Alexander Bulekov @ 2021-01-14 14:19 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: Miroslav Rezanina, Dmitry Fleytman, Jason Wang, qemu-devel On 210114 1415, Philippe Mathieu-Daudé wrote: > +Jason +Dmitry > > On 1/14/21 8:07 AM, Miroslav Rezanina wrote: > > When building qemu with GCC 11, compiling eth.c file produce following warning: > > > > warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] > > > > This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more > > attributes. > > > > As this usage is expected, suppress the warning temporarily through the function > > using this retyping. > > This is not expected, this is a bug... > Seems related: https://bugs.launchpad.net/qemu/+bug/1879531 -Alex > > > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > > --- > > net/eth.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/net/eth.c b/net/eth.c > > index 1e0821c5f8..b9bdd0435c 100644 > > --- a/net/eth.c > > +++ b/net/eth.c > > @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > struct ip6_ext_hdr *ext_hdr, > > struct in6_address *dst_addr) > > { > > +#pragma GCC diagnostic push > > +#pragma GCC diagnostic ignored "-Warray-bounds" > > struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; > > eth_parse_ipv6_hdr() called iov_to_buf() to fill the 2 bytes of ext_hdr. > > > if ((rthdr->rtype == 2) && > > Here we access after the 2 bytes filled... rthdr->rtype is somewhere on > eth_parse_ipv6_hdr's stack, its content is unknown. > > > @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > } > > > > return false; > > +#pragma GCC diagnostic pop > > Nacked-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 14:19 ` Alexander Bulekov @ 2021-01-14 14:35 ` Philippe Mathieu-Daudé 2021-01-14 14:38 ` Miroslav Rezanina 1 sibling, 0 replies; 12+ messages in thread From: Philippe Mathieu-Daudé @ 2021-01-14 14:35 UTC (permalink / raw) To: Alexander Bulekov Cc: Miroslav Rezanina, Dmitry Fleytman, Jason Wang, qemu-devel On 1/14/21 3:19 PM, Alexander Bulekov wrote: > On 210114 1415, Philippe Mathieu-Daudé wrote: >> +Jason +Dmitry >> >> On 1/14/21 8:07 AM, Miroslav Rezanina wrote: >>> When building qemu with GCC 11, compiling eth.c file produce following warning: >>> >>> warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] >>> >>> This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more >>> attributes. >>> >>> As this usage is expected, suppress the warning temporarily through the function >>> using this retyping. >> >> This is not expected, this is a bug... >> > > Seems related: https://bugs.launchpad.net/qemu/+bug/1879531 Yes! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 14:19 ` Alexander Bulekov 2021-01-14 14:35 ` Philippe Mathieu-Daudé @ 2021-01-14 14:38 ` Miroslav Rezanina 2021-01-14 14:42 ` Alexander Bulekov 1 sibling, 1 reply; 12+ messages in thread From: Miroslav Rezanina @ 2021-01-14 14:38 UTC (permalink / raw) To: Alexander Bulekov Cc: Jason Wang, Dmitry Fleytman, Philippe Mathieu-Daudé, qemu-devel On Thu, Jan 14, 2021 at 09:19:20AM -0500, Alexander Bulekov wrote: > On 210114 1415, Philippe Mathieu-Daudé wrote: > > +Jason +Dmitry > > > > On 1/14/21 8:07 AM, Miroslav Rezanina wrote: > > > When building qemu with GCC 11, compiling eth.c file produce following warning: > > > > > > warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] > > > > > > This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more > > > attributes. > > > > > > As this usage is expected, suppress the warning temporarily through the function > > > using this retyping. > > > > This is not expected, this is a bug... > > > > Seems related: https://bugs.launchpad.net/qemu/+bug/1879531 > -Alex > Yes, it is caused by the issue triggering the warning. Do you know whether the patch mentioned in bug was already sent? Mirek > > > > > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > > > --- > > > net/eth.c | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/net/eth.c b/net/eth.c > > > index 1e0821c5f8..b9bdd0435c 100644 > > > --- a/net/eth.c > > > +++ b/net/eth.c > > > @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > > struct ip6_ext_hdr *ext_hdr, > > > struct in6_address *dst_addr) > > > { > > > +#pragma GCC diagnostic push > > > +#pragma GCC diagnostic ignored "-Warray-bounds" > > > struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; > > > > eth_parse_ipv6_hdr() called iov_to_buf() to fill the 2 bytes of ext_hdr. > > > > > if ((rthdr->rtype == 2) && > > > > Here we access after the 2 bytes filled... rthdr->rtype is somewhere on > > eth_parse_ipv6_hdr's stack, its content is unknown. > > > > > @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > > } > > > > > > return false; > > > +#pragma GCC diagnostic pop > > > > Nacked-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 14:38 ` Miroslav Rezanina @ 2021-01-14 14:42 ` Alexander Bulekov 2021-01-14 15:09 ` Philippe Mathieu-Daudé 0 siblings, 1 reply; 12+ messages in thread From: Alexander Bulekov @ 2021-01-14 14:42 UTC (permalink / raw) To: Miroslav Rezanina Cc: Jason Wang, Dmitry Fleytman, Philippe Mathieu-Daudé, qemu-devel On 210114 1538, Miroslav Rezanina wrote: > On Thu, Jan 14, 2021 at 09:19:20AM -0500, Alexander Bulekov wrote: > > On 210114 1415, Philippe Mathieu-Daudé wrote: > > > +Jason +Dmitry > > > > > > On 1/14/21 8:07 AM, Miroslav Rezanina wrote: > > > > When building qemu with GCC 11, compiling eth.c file produce following warning: > > > > > > > > warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] > > > > > > > > This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more > > > > attributes. > > > > > > > > As this usage is expected, suppress the warning temporarily through the function > > > > using this retyping. > > > > > > This is not expected, this is a bug... > > > > > > > Seems related: https://bugs.launchpad.net/qemu/+bug/1879531 > > -Alex > > > > Yes, it is caused by the issue triggering the warning. Do you know > whether the patch mentioned in bug was already sent? > > Mirek I don't think so.. -Alex > > > > > > > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > > > > --- > > > > net/eth.c | 3 +++ > > > > 1 file changed, 3 insertions(+) > > > > > > > > diff --git a/net/eth.c b/net/eth.c > > > > index 1e0821c5f8..b9bdd0435c 100644 > > > > --- a/net/eth.c > > > > +++ b/net/eth.c > > > > @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > > > struct ip6_ext_hdr *ext_hdr, > > > > struct in6_address *dst_addr) > > > > { > > > > +#pragma GCC diagnostic push > > > > +#pragma GCC diagnostic ignored "-Warray-bounds" > > > > struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; > > > > > > eth_parse_ipv6_hdr() called iov_to_buf() to fill the 2 bytes of ext_hdr. > > > > > > > if ((rthdr->rtype == 2) && > > > > > > Here we access after the 2 bytes filled... rthdr->rtype is somewhere on > > > eth_parse_ipv6_hdr's stack, its content is unknown. > > > > > > > @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > > > } > > > > > > > > return false; > > > > +#pragma GCC diagnostic pop > > > > > > Nacked-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > > > > > > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 14:42 ` Alexander Bulekov @ 2021-01-14 15:09 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 12+ messages in thread From: Philippe Mathieu-Daudé @ 2021-01-14 15:09 UTC (permalink / raw) To: Alexander Bulekov, Miroslav Rezanina Cc: Jason Wang, Dmitry Fleytman, qemu-devel On 1/14/21 3:42 PM, Alexander Bulekov wrote: > On 210114 1538, Miroslav Rezanina wrote: >> On Thu, Jan 14, 2021 at 09:19:20AM -0500, Alexander Bulekov wrote: >>> On 210114 1415, Philippe Mathieu-Daudé wrote: >>>> +Jason +Dmitry >>>> >>>> On 1/14/21 8:07 AM, Miroslav Rezanina wrote: >>>>> When building qemu with GCC 11, compiling eth.c file produce following warning: >>>>> >>>>> warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] >>>>> >>>>> This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more >>>>> attributes. >>>>> >>>>> As this usage is expected, suppress the warning temporarily through the function >>>>> using this retyping. >>>> >>>> This is not expected, this is a bug... >>>> >>> >>> Seems related: https://bugs.launchpad.net/qemu/+bug/1879531 >>> -Alex >>> >> >> Yes, it is caused by the issue triggering the warning. Do you know >> whether the patch mentioned in bug was already sent? >> >> Mirek > > I don't think so.. Just sent one: https://lists.gnu.org/archive/html/qemu-devel/2021-01/msg03205.html ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] Fix net.c warning on GCC 11 2021-01-14 13:15 ` Philippe Mathieu-Daudé 2021-01-14 14:19 ` Alexander Bulekov @ 2021-01-14 14:36 ` Miroslav Rezanina 1 sibling, 0 replies; 12+ messages in thread From: Miroslav Rezanina @ 2021-01-14 14:36 UTC (permalink / raw) To: Philippe Mathieu-Daudé; +Cc: Jason Wang, Dmitry Fleytman, qemu-devel On Thu, Jan 14, 2021 at 02:15:59PM +0100, Philippe Mathieu-Daudé wrote: > +Jason +Dmitry > > On 1/14/21 8:07 AM, Miroslav Rezanina wrote: > > When building qemu with GCC 11, compiling eth.c file produce following warning: > > > > warning: array subscript 'struct ip6_ext_hdr_routing[0]' is partly outside array bounds of 'struct ip6_ext_hdr[1]' [-Warray-bounds] > > > > This is caused by retyping from ip6_ext_hdr to ip6_ext_hdr_routing that has more > > attributes. > > > > As this usage is expected, suppress the warning temporarily through the function > > using this retyping. > > This is not expected, this is a bug... Thanks for confirmation, my initial idea was the same but then I got impression (do not remember where) that ip6_ext_hdr is not type where data are initially written to so the overflow here is expected. Mirek > > > > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > > --- > > net/eth.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/net/eth.c b/net/eth.c > > index 1e0821c5f8..b9bdd0435c 100644 > > --- a/net/eth.c > > +++ b/net/eth.c > > @@ -405,6 +405,8 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > struct ip6_ext_hdr *ext_hdr, > > struct in6_address *dst_addr) > > { > > +#pragma GCC diagnostic push > > +#pragma GCC diagnostic ignored "-Warray-bounds" > > struct ip6_ext_hdr_routing *rthdr = (struct ip6_ext_hdr_routing *) ext_hdr; > > eth_parse_ipv6_hdr() called iov_to_buf() to fill the 2 bytes of ext_hdr. > > > if ((rthdr->rtype == 2) && > > Here we access after the 2 bytes filled... rthdr->rtype is somewhere on > eth_parse_ipv6_hdr's stack, its content is unknown. > > > @@ -426,6 +428,7 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int pkt_frags, > > } > > > > return false; > > +#pragma GCC diagnostic pop > > Nacked-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name 2021-01-14 7:07 [PATCH v3 0/2] Fixing several GCC 11 warnings Miroslav Rezanina 2021-01-14 7:07 ` [PATCH v3 1/2] Fix net.c warning on GCC 11 Miroslav Rezanina @ 2021-01-14 7:07 ` Miroslav Rezanina 2021-01-14 8:32 ` Thomas Huth 2021-01-14 10:16 ` Cornelia Huck 1 sibling, 2 replies; 12+ messages in thread From: Miroslav Rezanina @ 2021-01-14 7:07 UTC (permalink / raw) To: qemu-devel Using strncpy with length equal to the size of target array, GCC 11 reports following warning: warning: '__builtin_strncpy' specified bound 256 equals destination size [-Wstringop-truncation] We can prevent this warning by using strpadcpy that copies string up to specified length, zeroes target array after copied string and does not raise warning when length is equal to target array size (and ending '\0' is discarded). Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> --- target/s390x/kvm.c | 12 +++++------- target/s390x/misc_helper.c | 7 +++++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index b8385e6b95..dc27fa36c9 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -29,6 +29,7 @@ #include "internal.h" #include "kvm_s390x.h" #include "sysemu/kvm_int.h" +#include "qemu/cutils.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/timer.h" @@ -1910,18 +1911,15 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar) strlen(qemu_name))); } sysib.vm[0].ext_name_encoding = 2; /* 2 = UTF-8 */ - memset(sysib.ext_names[0], 0, sizeof(sysib.ext_names[0])); /* If hypervisor specifies zero Extended Name in STSI322 SYSIB, it's * considered by s390 as not capable of providing any Extended Name. * Therefore if no name was specified on qemu invocation, we go with the * same "KVMguest" default, which KVM has filled into short name field. */ - if (qemu_name) { - strncpy((char *)sysib.ext_names[0], qemu_name, - sizeof(sysib.ext_names[0])); - } else { - strcpy((char *)sysib.ext_names[0], "KVMguest"); - } + strpadcpy((char *)sysib.ext_names[0], + sizeof(sysib.ext_names[0]), + qemu_name ?: "KVMguest", '\0'); + /* Insert UUID */ memcpy(sysib.vm[0].uuid, &qemu_uuid, sizeof(sysib.vm[0].uuid)); diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c index 58dbc023eb..7ea90d414a 100644 --- a/target/s390x/misc_helper.c +++ b/target/s390x/misc_helper.c @@ -19,6 +19,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qemu/main-loop.h" #include "cpu.h" #include "internal.h" @@ -369,8 +370,10 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0, uint64_t r0, uint64_t r1) ebcdic_put(sysib.sysib_322.vm[0].name, qemu_name, MIN(sizeof(sysib.sysib_322.vm[0].name), strlen(qemu_name))); - strncpy((char *)sysib.sysib_322.ext_names[0], qemu_name, - sizeof(sysib.sysib_322.ext_names[0])); + strpadcpy((char *)sysib.sysib_322.ext_names[0], + sizeof(sysib.sysib_322.ext_names[0]), + qemu_name, '\0'); + } else { ebcdic_put(sysib.sysib_322.vm[0].name, "TCGguest", 8); strcpy((char *)sysib.sysib_322.ext_names[0], "TCGguest"); -- 2.18.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name 2021-01-14 7:07 ` [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name Miroslav Rezanina @ 2021-01-14 8:32 ` Thomas Huth 2021-01-14 10:16 ` Cornelia Huck 1 sibling, 0 replies; 12+ messages in thread From: Thomas Huth @ 2021-01-14 8:32 UTC (permalink / raw) To: Miroslav Rezanina, qemu-devel; +Cc: qemu-s390x, Cornelia Huck On 14/01/2021 08.07, Miroslav Rezanina wrote: > Using strncpy with length equal to the size of target array, GCC 11 > reports following warning: > > warning: '__builtin_strncpy' specified bound 256 equals destination size [-Wstringop-truncation] > > We can prevent this warning by using strpadcpy that copies string > up to specified length, zeroes target array after copied string > and does not raise warning when length is equal to target array > size (and ending '\0' is discarded). > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > --- > target/s390x/kvm.c | 12 +++++------- > target/s390x/misc_helper.c | 7 +++++-- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c > index b8385e6b95..dc27fa36c9 100644 > --- a/target/s390x/kvm.c > +++ b/target/s390x/kvm.c > @@ -29,6 +29,7 @@ > #include "internal.h" > #include "kvm_s390x.h" > #include "sysemu/kvm_int.h" > +#include "qemu/cutils.h" > #include "qapi/error.h" > #include "qemu/error-report.h" > #include "qemu/timer.h" > @@ -1910,18 +1911,15 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar) > strlen(qemu_name))); > } > sysib.vm[0].ext_name_encoding = 2; /* 2 = UTF-8 */ > - memset(sysib.ext_names[0], 0, sizeof(sysib.ext_names[0])); > /* If hypervisor specifies zero Extended Name in STSI322 SYSIB, it's > * considered by s390 as not capable of providing any Extended Name. > * Therefore if no name was specified on qemu invocation, we go with the > * same "KVMguest" default, which KVM has filled into short name field. > */ > - if (qemu_name) { > - strncpy((char *)sysib.ext_names[0], qemu_name, > - sizeof(sysib.ext_names[0])); > - } else { > - strcpy((char *)sysib.ext_names[0], "KVMguest"); > - } > + strpadcpy((char *)sysib.ext_names[0], > + sizeof(sysib.ext_names[0]), > + qemu_name ?: "KVMguest", '\0'); > + > /* Insert UUID */ > memcpy(sysib.vm[0].uuid, &qemu_uuid, sizeof(sysib.vm[0].uuid)); > > diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c > index 58dbc023eb..7ea90d414a 100644 > --- a/target/s390x/misc_helper.c > +++ b/target/s390x/misc_helper.c > @@ -19,6 +19,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/cutils.h" > #include "qemu/main-loop.h" > #include "cpu.h" > #include "internal.h" > @@ -369,8 +370,10 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0, uint64_t r0, uint64_t r1) > ebcdic_put(sysib.sysib_322.vm[0].name, qemu_name, > MIN(sizeof(sysib.sysib_322.vm[0].name), > strlen(qemu_name))); > - strncpy((char *)sysib.sysib_322.ext_names[0], qemu_name, > - sizeof(sysib.sysib_322.ext_names[0])); > + strpadcpy((char *)sysib.sysib_322.ext_names[0], > + sizeof(sysib.sysib_322.ext_names[0]), > + qemu_name, '\0'); > + > } else { > ebcdic_put(sysib.sysib_322.vm[0].name, "TCGguest", 8); > strcpy((char *)sysib.sysib_322.ext_names[0], "TCGguest"); > Reviewed-by: Thomas Huth <thuth@redhat.com> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name 2021-01-14 7:07 ` [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name Miroslav Rezanina 2021-01-14 8:32 ` Thomas Huth @ 2021-01-14 10:16 ` Cornelia Huck 1 sibling, 0 replies; 12+ messages in thread From: Cornelia Huck @ 2021-01-14 10:16 UTC (permalink / raw) To: Miroslav Rezanina; +Cc: Thomas Huth, qemu-s390x, qemu-devel On Thu, 14 Jan 2021 08:07:36 +0100 Miroslav Rezanina <mrezanin@redhat.com> wrote: > Using strncpy with length equal to the size of target array, GCC 11 > reports following warning: > > warning: '__builtin_strncpy' specified bound 256 equals destination size [-Wstringop-truncation] > > We can prevent this warning by using strpadcpy that copies string > up to specified length, zeroes target array after copied string > and does not raise warning when length is equal to target array > size (and ending '\0' is discarded). > > Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> > --- > target/s390x/kvm.c | 12 +++++------- > target/s390x/misc_helper.c | 7 +++++-- > 2 files changed, 10 insertions(+), 9 deletions(-) Thanks, applied. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-01-14 15:17 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-14 7:07 [PATCH v3 0/2] Fixing several GCC 11 warnings Miroslav Rezanina 2021-01-14 7:07 ` [PATCH v3 1/2] Fix net.c warning on GCC 11 Miroslav Rezanina 2021-01-14 13:15 ` Philippe Mathieu-Daudé 2021-01-14 14:19 ` Alexander Bulekov 2021-01-14 14:35 ` Philippe Mathieu-Daudé 2021-01-14 14:38 ` Miroslav Rezanina 2021-01-14 14:42 ` Alexander Bulekov 2021-01-14 15:09 ` Philippe Mathieu-Daudé 2021-01-14 14:36 ` Miroslav Rezanina 2021-01-14 7:07 ` [PATCH v3 2/2] s390x: Use strpadcpy for copying vm name Miroslav Rezanina 2021-01-14 8:32 ` Thomas Huth 2021-01-14 10:16 ` Cornelia Huck
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.