diff options
author | djm@openbsd.org <djm@openbsd.org> | 2022-02-17 10:58:27 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2022-02-17 22:17:36 +1100 |
commit | 667fec5d4fe4406745750a32f69b5d2e1a75e94b (patch) | |
tree | de793040d3e6454121810106502c52cb0fd59243 | |
parent | 41417dbda9fb55a0af49a8236e3ef9d50d862644 (diff) |
upstream: check for EINTR/EAGAIN failures in the rfd fast-path; caught
by dtucker's minix3 vm :) ok dtucker@
OpenBSD-Commit-ID: 2e2c895a3e82ef347aa6694394a76a438be91361
-rw-r--r-- | channels.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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; |