On Tue, Sep 09, 2025 at 05:04:12PM +0200, Volker Diels-Grabsch wrote:
This issue can be reproduced by running passt with TCP forwarding and connecting to that TCP port before the first client (e.g. QEMU) connects to the passt socket. Example:
(sleep 0.1; ssh -p 22000 127.0.0.1) & passt -f -t 22000:22
Although this commit likely doesn't fix the root cause of this issue, it does reliably fix the segfault.
Right, this band-aids the problem, but isn't the correct fix. Getting a NULL pointer here indicates that we're putting a frame into the queue without setting the corresponding tcp_frame_conns[] entry, which is definitely wrong. Thanks for the reproducer, I'm having a look into this now.
--- tcp_buf.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tcp_buf.c b/tcp_buf.c index bc898de..1a06f15 100644 --- a/tcp_buf.c +++ b/tcp_buf.c @@ -120,6 +120,9 @@ static void tcp_revert_seq(const struct ctx *c, struct tcp_tap_conn **conns, uint32_t seq = ntohl(th->seq); uint32_t peek_offset;
+ if (conn == NULL) + continue; + if (SEQ_LE(conn->seq_to_tap, seq)) continue;
-- 2.47.3
-- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson