]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
xdp-tcp: bugfix 1
authorLibor Peltan <libor.peltan@nic.cz>
Thu, 11 Nov 2021 17:25:32 +0000 (18:25 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Wed, 16 Mar 2022 13:58:06 +0000 (14:58 +0100)
src/libknot/xdp/tcp.c

index 0d698ce7ba6448fea70d74ad96b374abdeb045b3..e65c0cee95034ef61491f8eaa53984f8181e5969 100644 (file)
@@ -605,6 +605,10 @@ void sweep_reset(knot_tcp_table_t *tcp_table, knot_tcp_relay_t *rl,
        }
 }
 
+#ifndef SSIZE_MAX
+#define SSIZE_MAX ((SIZE_MAX - 2) / 2)
+#endif
+
 _public_
 int knot_tcp_sweep(knot_tcp_table_t *tcp_table,
                    uint32_t close_timeout, uint32_t reset_timeout,
@@ -622,8 +626,8 @@ int knot_tcp_sweep(knot_tcp_table_t *tcp_table,
        knot_tcp_relay_t *rl = relays, *rl_max = rl + max_relays;
 
        ssize_t free_conns =  (ssize_t)tcp_table->usage - limit_n_conn;
-       ssize_t free_inbuf =  (ssize_t)tcp_table->inbufs_total - limit_ibuf_size;
-       ssize_t free_outbuf = (ssize_t)tcp_table->outbufs_total - limit_obuf_size;
+       ssize_t free_inbuf =  (ssize_t)tcp_table->inbufs_total - MIN(limit_ibuf_size, SSIZE_MAX);
+       ssize_t free_outbuf = (ssize_t)tcp_table->outbufs_total - MIN(limit_ibuf_size, SSIZE_MAX);
 
        // reset connections to free ibufs
        while (free_inbuf > 0 && rl != rl_max) {