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:
parent
41417dbda9
commit
667fec5d4f
|
@ -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>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* 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)
|
if (maxlen > avail)
|
||||||
maxlen = avail;
|
maxlen = avail;
|
||||||
if ((r = sshbuf_read(c->rfd, c->input, maxlen, NULL)) != 0) {
|
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",
|
debug2("channel %d: read failed rfd %d maxlen %zu: %s",
|
||||||
c->self, c->rfd, maxlen, ssh_err(r));
|
c->self, c->rfd, maxlen, ssh_err(r));
|
||||||
goto rfail;
|
goto rfail;
|
||||||
|
|
Loading…
Reference in New Issue