From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=TVfqpyOi; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id 5311E5A0279 for ; Thu, 11 Sep 2025 01:56:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1757548594; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j7k9u5djvWZqirj+LPsdCCi4Ig51WR2l1gIj0tjdb0I=; b=TVfqpyOiKjsfKjElrIZWHZywbaIqs/CcBJy/TfA3T148hqzEUK/rKs50Qp8+fJxseKoOLA 5Lghvlauxge6T2QbGuQu1W7VJzjmpO9PnhaOsclmW4AesxbP11qv8CauyThUG4aUTIgpbt PbLcDVfaGMIAeSYLanIcUMCHRKs++5c= Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-665-Q2N9V07HPCqn-RlDBEeu-A-1; Wed, 10 Sep 2025 19:56:32 -0400 X-MC-Unique: Q2N9V07HPCqn-RlDBEeu-A-1 X-Mimecast-MFC-AGG-ID: Q2N9V07HPCqn-RlDBEeu-A_1757548592 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-804512c4373so28575385a.3 for ; Wed, 10 Sep 2025 16:56:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757548592; x=1758153392; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=j7k9u5djvWZqirj+LPsdCCi4Ig51WR2l1gIj0tjdb0I=; b=WB7biI1YnnAMy1srERbrD2ESZWKcZsJxa/9+qP4GMpZlkBfWjpegsDQDP5Pkwe2ItE 7v5BrY1mmMfQKqx+hCxe76Te1fbRVG4tXSCkd7xW8cNQKfJwof3tP8ocgccdZhrgHoc9 ld0Bo/OsUbIW1/NFi/C6UxRgUc0qi6YrUpPOBmJ2Duhp6X4F46hiis1aJSWWJN0nY6zh 7PvQJ8bHrQbRWWIILU7Jp/H8PKPTyOF+sd7q0Lz9yz5FyWdhwYDd1sipVfOI10u7yx9C uZ+a+1kATLRK698KCgwCwFG/6OZ8LZbdak/0mdvJ7R6OsoVbTPSWFk2ZWG3+of+Mabvp IVEg== X-Forwarded-Encrypted: i=1; AJvYcCUXBncQBwqyQm6NbnAD8Ih6U2eoMNWm0WIXC611NhxrslKnrlbiPdr+jEZdgaQ8o5ZjARWiks9Tg2Y=@passt.top X-Gm-Message-State: AOJu0YwEUV+3Tm6dmpNeWX7qXf8odMycYCIZ9bh25c0r9JICGpytTHJw ycDInIIfCLRJ2cRDCMcV96amRW/InK6WaCPOil9H6KbCwI6Uu5bZv0ET7SgaevtqSsLxcKpEomv dRYPOmrT6PEQOk+ZzfIhbfzLYAWLd4+n7S1rN7kS5blAMAIu6+ZCbJg== X-Gm-Gg: ASbGncv/0a+xLeeOn9pwrEcqtz4p0zdiz2iKl5idOtTZ2RJXmLyzmE6cBsdkS9WEH/m BC1NpiArxDDb0Mv61B7sY3MM4PRziQShjeWJmIbx8tQi8VTfXJz7Rxv71j7LDzGldzWhglB7849 QC1JF1xoeCu0CEqs2LIqKOqUliSyQRgGPD3H/uTISmDkn8yU+XPJggHEyDFoKyL0+E8qgCiW3F7 IHuDZLcHwgAHz5tUDFbYWWPK2SFG1TYXct9Aci1ZU4EuARQjReuf+xJ9Onz/KyYZ57+dWdB/lSx GjbNUxjmNT9OH33Kn8cT8fWa0Q4z8JMIs3Rc85zhQUE021iHUD83Y+poCSuzBHl9niwGkBClDVe Xktxiz2bA6g== X-Received: by 2002:a05:620a:450e:b0:81c:d234:f7fc with SMTP id af79cd13be357-81cd23535e1mr800575385a.58.1757548592323; Wed, 10 Sep 2025 16:56:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFnUyOXLhLUSWrBf7RJy8H59hFgw6Tf2bPeG3++0kfXe4GACgSgvxidSqsVI7ec/DY43mdjXA== X-Received: by 2002:a05:620a:450e:b0:81c:d234:f7fc with SMTP id af79cd13be357-81cd23535e1mr800572985a.58.1757548591845; Wed, 10 Sep 2025 16:56:31 -0700 (PDT) Received: from ?IPV6:2001:4958:2206:8901:6025:1483:4146:72dd? ([2001:4958:2206:8901:6025:1483:4146:72dd]) by smtp.gmail.com with ESMTPSA id af79cd13be357-820c8bb8d9esm5643485a.3.2025.09.10.16.56.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Sep 2025 16:56:31 -0700 (PDT) Message-ID: Date: Wed, 10 Sep 2025 19:56:30 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 4/8] tcp: Fix closing logic for half-closed connections To: Stefano Brivio , passt-dev@passt.top References: <20250909181655.2990223-1-sbrivio@redhat.com> <20250909181655.2990223-5-sbrivio@redhat.com> From: Jon Maloy In-Reply-To: <20250909181655.2990223-5-sbrivio@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: eF7qTFRW87KeCl1TrJAKgv7vaA2_TDrotwJZfh9t0V4_1757548592 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Message-ID-Hash: EQJ5MHCEJLSLVSTEMQ7AVEZ5S5WIYOHS X-Message-ID-Hash: EQJ5MHCEJLSLVSTEMQ7AVEZ5S5WIYOHS X-MailFrom: jmaloy@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Paul Holzinger , David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On 2025-09-09 14:16, Stefano Brivio wrote: > First off, don't close connections half-closed by the guest before > our own FIN is acknowledged by the guest itself. > > That is, after we receive a FIN from the guest (TAP_FIN_RCVD), if we > don't have any data left to send from the socket (SOCK_FIN_RCVD, or > EPOLLHUP), we send a FIN segment to the guest (TAP_FIN_SENT), but we > need to actually have it acknowledged (and have no pending > retransmissions) before we can close the connection: check for > TAP_FIN_ACKED, first. > > Then, if we set TAP_FIN_SENT, and we receive an ACK segment from the > guest, set TAP_FIN_ACKED. This was entirely missing for the > TAP_FIN_RCVD case, and as we fix the problem described above, this > becomes relevant as well. > > Signed-off-by: Stefano Brivio > Reviewed-by: David Gibson Reviewed-by: Jon Maloy > --- > tcp.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/tcp.c b/tcp.c > index 12d42e0..b83510b 100644 > --- a/tcp.c > +++ b/tcp.c > @@ -2116,9 +2116,14 @@ int tcp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, > tcp_tap_window_update(c, conn, ntohs(th->window)); > tcp_data_from_sock(c, conn); > > - if (conn->events & SOCK_FIN_RCVD && > - conn->seq_ack_from_tap == conn->seq_to_tap) > - conn_event(c, conn, CLOSED); > + if (conn->seq_ack_from_tap == conn->seq_to_tap) { > + if (th->ack && conn->events & TAP_FIN_SENT) > + conn_event(c, conn, TAP_FIN_ACKED); > + > + if (conn->events & SOCK_FIN_RCVD && > + conn->events & TAP_FIN_ACKED) > + conn_event(c, conn, CLOSED); > + } > > return 1; > } > @@ -2398,7 +2403,7 @@ void tcp_sock_handler(const struct ctx *c, union epoll_ref ref, > return; > } > > - if ((conn->events & TAP_FIN_SENT) && (events & EPOLLHUP)) { > + if ((conn->events & TAP_FIN_ACKED) && (events & EPOLLHUP)) { > conn_event(c, conn, CLOSED); > return; > }