From: Frédéric Lécaille Date: Thu, 9 Feb 2023 19:37:26 +0000 (+0100) Subject: BUG/MINOR: quic: Possible unexpected counter incrementation on send*() errors X-Git-Tag: v2.8-dev5~184 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9fc10aff05462fe88bc117cda20d381dfb2ea9f7;p=thirdparty%2Fhaproxy.git BUG/MINOR: quic: Possible unexpected counter incrementation on send*() errors Some counters could potentially be incremented even if send*() syscall returned no error when ret >= 0 and ret != sz. This could be the case for instance if a first call to send*() returned -1 with errno set to EINTR (or any previous syscall which set errno to a non-null value) and if the next call to send*() returned something positive and smaller than . Must be backported to 2.7 and 2.6. --- diff --git a/src/quic_sock.c b/src/quic_sock.c index 068541f89b..fd43859f3d 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -609,7 +609,7 @@ int qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t sz, } } while (ret < 0 && errno == EINTR); - if (ret < 0 || ret != sz) { + if (ret < 0) { struct proxy *prx = qc->li->bind_conf->frontend; struct quic_counters *prx_counters = EXTRA_COUNTERS_GET(prx->extra_counters_fe, @@ -633,6 +633,9 @@ int qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t sz, return 1; } + if (ret != sz) + return 1; + /* we count the total bytes sent, and the send rate for 32-byte blocks. * The reason for the latter is that freq_ctr are limited to 4GB and * that it's not enough per second.