upstream: check for EINTR/EAGAIN failures in the rfd fast-path; caught

by dtucker's minix3 vm :) ok dtucker@

OpenBSD-Commit-ID: 2e2c895a3e82ef347aa6694394a76a438be91361
This commit is contained in:
djm@openbsd.org 2022-02-17 10:58:27 +00:00 committed by Damien Miller
parent 41417dbda9
commit 667fec5d4f
1 changed files with 4 additions and 1 deletions

View File

@ -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 <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, 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;