From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Brivio To: passt-dev@passt.top Subject: [PATCH] udp: Ignore bogus -Wstringop-overread for write() from gcc 12.1 Date: Thu, 19 May 2022 13:32:46 +0200 Message-ID: <20220519113246.1914500-1-sbrivio@redhat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0828284147297053502==" --===============0828284147297053502== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable With current OpenSUSE Tumbleweed on aarch64 (gcc-12-1.3.aarch64) and on x86_64 (gcc-12-1.4.x86_64), but curiously not on armv7hl (gcc-12-1.3.armv7hl), gcc warns about using the _pointer_ to the 802.3 header to write the whole frame to the tap descriptor: reading between 62 and 4294967357 bytes from a region of size 14 which is bogus: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D103483 Probably declaring udp_sock_fill_data_v{4,6}() as noinline would "fix" this, but that's on the data path, so I'd rather not. Use a gcc pragma instead. Signed-off-by: Stefano Brivio --- udp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/udp.c b/udp.c index f425d14..dd7119e 100644 --- a/udp.c +++ b/udp.c @@ -714,8 +714,10 @@ static void udp_sock_fill_data_v4(const struct ctx *c, i= nt n, b->uh.len =3D htons(udp4_l2_mh_sock[n].msg_len + sizeof(b->uh)); =20 if (c->mode =3D=3D MODE_PASTA) { +#pragma GCC diagnostic ignored "-Wstringop-overread" if (write(c->fd_tap, &b->eh, sizeof(b->eh) + ip_len) < 0) debug("tap write: %s", strerror(errno)); +#pragma GCC diagnostic pop pcap((char *)&b->eh, sizeof(b->eh) + ip_len); =20 return; @@ -813,8 +815,10 @@ static void udp_sock_fill_data_v6(const struct ctx *c, i= nt n, b->ip6h.hop_limit =3D 255; =20 if (c->mode =3D=3D MODE_PASTA) { +#pragma GCC diagnostic ignored "-Wstringop-overread" if (write(c->fd_tap, &b->eh, sizeof(b->eh) + ip_len) < 0) debug("tap write: %s", strerror(errno)); +#pragma GCC diagnostic pop pcap((char *)&b->eh, sizeof(b->eh) + ip_len); =20 return; --=20 2.35.1 --===============0828284147297053502==--