From: djm@openbsd.org Date: Thu, 17 Feb 2022 10:58:27 +0000 (+0000) Subject: upstream: check for EINTR/EAGAIN failures in the rfd fast-path; caught X-Git-Tag: V_8_9_P1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=667fec5d4fe4406745750a32f69b5d2e1a75e94b;p=thirdparty%2Fopenssh-portable.git upstream: check for EINTR/EAGAIN failures in the rfd fast-path; caught by dtucker's minix3 vm :) ok dtucker@ OpenBSD-Commit-ID: 2e2c895a3e82ef347aa6694394a76a438be91361 --- diff --git a/channels.c b/channels.c index d662ff03a..73e93c032 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.412 2022/01/22 00:45:31 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.413 2022/02/17 10:58:27 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1951,6 +1951,9 @@ channel_handle_rfd(struct ssh *ssh, Channel *c) if (maxlen > avail) maxlen = avail; if ((r = sshbuf_read(c->rfd, c->input, maxlen, NULL)) != 0) { + if (errno == EINTR || (!force && + (errno == EAGAIN || errno == EWOULDBLOCK))) + return 1; debug2("channel %d: read failed rfd %d maxlen %zu: %s", c->self, c->rfd, maxlen, ssh_err(r)); goto rfail;