From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59358) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ann1q-0001dO-0J for qemu-devel@nongnu.org; Wed, 06 Apr 2016 08:57:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ann1m-0002cO-Q2 for qemu-devel@nongnu.org; Wed, 06 Apr 2016 08:57:49 -0400 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:17510) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ann1m-0002cE-J6 for qemu-devel@nongnu.org; Wed, 06 Apr 2016 08:57:46 -0400 Date: Wed, 6 Apr 2016 14:57:43 +0200 From: Samuel Thibault Message-ID: <20160406125743.GC28379@var.bordeaux.inria.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1c0611a61621b2069df831b48b937fa49cc264bd.1459896208.git.steven@steven676.net> Subject: Re: [Qemu-devel] [PATCH 0/3] slirp: deliver received TCP RSTs to the guest List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: steven@steven676.net Cc: "Edgar E. Iglesias" , Jan Kiszka , qemu-devel@nongnu.org Hello, Thanks for this! steven@steven676.net, on Tue 05 Apr 2016 17:13:58 -0700, wrote: > The second, > which fixes delivery of an RST interrupting an already-established TCP > connection, was submitted by Edgar Iglesias in 2008 and appears to have > been missed then. The last patch fixes the case where the remote end > sends RST in reply to our SYN (rejects our incoming connection attempt). It seems I'm getting another crash with these: sowrite would be called too for the reseted socket, while the socket has been freed and is not even on the polling list any more, I had to additionally do the patch below, could you review it so I can push the whole series? > I've been unable to test the specific case it > addresses (an established connection interrupted by RST), It's actually quite easy: just reboot the server :) The new instance of the server will send a RST whenever the client sends more data. Samuel diff --git a/slirp/slirp.c b/slirp/slirp.c index fef526c..b13b9af 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -553,6 +553,11 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error) if (ret > 0) { tcp_output(sototcpcb(so)); } + if (ret < 0) { + /* Socket error and thus removed, do not try to do + * anything more with it. */ + continue; + } } /*