diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2022-05-20 10:36:11 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2022-05-20 10:36:11 +0200 |
commit | d27cc3e4355834a545581f4beafbfff9e0761914 (patch) | |
tree | 935e40c747e94df8d4a474ce334f9120c21250cf | |
parent | a951e0b9efcbb64ca8b1d7c62c6c27a4498d21d6 (diff) | |
download | passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar.gz passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar.bz2 passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar.lz passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar.xz passt-d27cc3e4355834a545581f4beafbfff9e0761914.tar.zst passt-d27cc3e4355834a545581f4beafbfff9e0761914.zip |
tcp: Work around gcc 12 bogus warning in tcp_rtt_dst_check()
gcc 12.1.x (e.g. current OpenSUSE Tumbleweed, x86_64 only,
gcc-12-1.4.x86_64) reports:
tcp.c: In function ‘tcp_send_flag’:
tcp.c:1014:9: warning: writing 16 bytes into a region of size 0 [-Wstringop-overflow=]
1014 | memcpy(low_rtt_dst + hole++, &conn->a.a6, sizeof(conn->a.a6));
| ^
tcp.c:559:24: note: at offset -16 into destination object ‘low_rtt_dst’ of size 128
559 | static struct in6_addr low_rtt_dst[LOW_RTT_TABLE_SIZE];
|
but 'hole' can't be -1, because the low_rtt_dst table is guaranteed
to have a hole: if we happened to write to the last entry, we'll go
back to index 0 and clear that one.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | tcp.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -1011,6 +1011,12 @@ static void tcp_rtt_dst_check(const struct tcp_conn *conn, hole = i; } + /* Keep gcc 12 happy: this won't actually happen because the table is + * guaranteed to have a hole, see the second memcpy() below. + */ + if (hole == -1) + return; + memcpy(low_rtt_dst + hole++, &conn->a.a6, sizeof(conn->a.a6)); if (hole == LOW_RTT_TABLE_SIZE) hole = 0; |