From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1anjSP-0001Ky-L5 for qemu-devel@nongnu.org; Wed, 06 Apr 2016 05:09:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1anjSK-0000fH-LA for qemu-devel@nongnu.org; Wed, 06 Apr 2016 05:09:01 -0400 Received: from mail-sn1nam02on0065.outbound.protection.outlook.com ([104.47.36.65]:33856 helo=NAM02-SN1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1anjSK-0000f3-G4 for qemu-devel@nongnu.org; Wed, 06 Apr 2016 05:08:56 -0400 Date: Wed, 6 Apr 2016 10:36:01 +0200 From: "Edgar E. Iglesias" Message-ID: <20160406083601.GK14668@toto> References: <1c0611a61621b2069df831b48b937fa49cc264bd.1459896208.git.steven@steven676.net> 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 2/3] slirp: Propagate host TCP RST to the guest. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: steven@steven676.net Cc: Jan Kiszka , qemu-devel@nongnu.org On Tue, Apr 05, 2016 at 05:14:31PM -0700, steven@steven676.net wrote: > When the host aborts (RST) it's side of a TCP connection we need to > propagate that RST to the guest. The current code can leave such guest > connections dangling forever. Spotted by Jason Wessel. > > [steven@steven676.net: coding style adjustments] > Signed-off-by: Steven Luo > --- > Edgar proposed this patch many years ago: > > https://lists.gnu.org/archive/html/qemu-devel/2008-06/msg00383.html > > It doesn't appear that it was ever merged. (It's the top Google result > for "QEMU slirp RST".) I've been unable to test the specific case it > addresses (an established connection interrupted by RST), but the > discussion from 2008 seems to imply it worked for the person reporting > the problem then, and my next patch builds on this one. > > As this patch isn't my work and did not come with a Signed-off-by line, > I'm not entirely clear on how I should handle that. Hi Steven, I don't mind to leave it as is but you could also use the --author argument to git commit to keep the authorship as edgar.iglesias@gmail.com BTW, I had totally forgotten about this... thanks for picking it up! Best regards, Edgar > > slirp/socket.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/slirp/socket.c b/slirp/socket.c > index b836c42..4372ec2 100644 > --- a/slirp/socket.c > +++ b/slirp/socket.c > @@ -176,9 +176,24 @@ soread(struct socket *so) > if (nn < 0 && (errno == EINTR || errno == EAGAIN)) > return 0; > else { > + int err; > + socklen_t slen = sizeof err; > + > + err = errno; > + if (nn == 0) { > + getsockopt(so->s, SOL_SOCKET, SO_ERROR, > + &err, &slen); > + } > + > DEBUG_MISC((dfd, " --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno))); > sofcantrcvmore(so); > - tcp_sockclosed(sototcpcb(so)); > + > + if (err == ECONNRESET > + || err == ENOTCONN || err == EPIPE) { > + tcp_drop(sototcpcb(so), err); > + } else { > + tcp_sockclosed(sototcpcb(so)); > + } > return -1; > } > } > -- > 2.1.4 >