summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <Todd.Miller@sudo.ws>2022-06-07 09:25:07 -0600
committerTodd C. Miller <Todd.Miller@sudo.ws>2022-06-07 09:25:07 -0600
commit1fa397dd5d2e8ed0be0e2c0fe372f5eefd680f52 (patch)
tree5a63222e332628e55cf7e2e99a375c507ffadfcc
parent2ebb3cd1d8790ddf764cebff43030538f6c507cb (diff)
downloadsudo-1fa397dd5d2e8ed0be0e2c0fe372f5eefd680f52.tar.gz
Treat EINTR in a callback like we do EAGAIN.
We shouldn't get EINTR in practice since we set SA_RESTART when registering signal handlers but it doesn't hurt to be consistent.
-rw-r--r--logsrvd/logsrvd.c9
-rw-r--r--logsrvd/logsrvd_relay.c4
-rw-r--r--logsrvd/sendlog.c4
3 files changed, 9 insertions, 8 deletions
diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c
index 23d85b410..4bf739ff5 100644
--- a/logsrvd/logsrvd.c
+++ b/logsrvd/logsrvd.c
@@ -929,7 +929,7 @@ server_msg_cb(int fd, int what, void *v)
}
if (nwritten == -1) {
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("%s: write", closure->ipaddr);
goto finished;
@@ -1045,7 +1045,7 @@ client_msg_cb(int fd, int what, void *v)
__func__, nread, closure->ipaddr);
switch (nread) {
case -1:
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("%s: read", closure->ipaddr);
goto close_connection;
@@ -1521,9 +1521,10 @@ listener_cb(int fd, int what, void *v)
"unable to start new connection");
}
} else {
- if (errno != EAGAIN)
- sudo_warn("accept");
+ if (errno == EAGAIN || errno == EINTR)
+ debug_return;
/* TODO: pause accepting on ENFILE and EMFILE */
+ sudo_warn("accept");
}
debug_return;
diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c
index 1cd404fbe..6937ed82c 100644
--- a/logsrvd/logsrvd_relay.c
+++ b/logsrvd/logsrvd_relay.c
@@ -799,7 +799,7 @@ relay_server_msg_cb(int fd, int what, void *v)
relay_closure->relay_name.name, relay_closure->relay_name.ipaddr);
switch (nread) {
case -1:
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("%s: read", relay_closure->relay_name.ipaddr);
closure->errstr = _("unable to read from relay");
@@ -970,7 +970,7 @@ relay_client_msg_cb(int fd, int what, void *v)
{
nwritten = write(fd, buf->data + buf->off, buf->len - buf->off);
if (nwritten == -1) {
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("%s: write", relay_closure->relay_name.ipaddr);
closure->errstr = _("error writing to relay");
diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c
index 9417dbe53..50d7f59c1 100644
--- a/logsrvd/sendlog.c
+++ b/logsrvd/sendlog.c
@@ -1359,7 +1359,7 @@ server_msg_cb(int fd, int what, void *v)
__func__, nread);
switch (nread) {
case -1:
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("recv");
goto bad;
@@ -1479,7 +1479,7 @@ client_msg_cb(int fd, int what, void *v)
nwritten = send(fd, buf->data + buf->off, buf->len - buf->off, 0);
}
if (nwritten == -1) {
- if (errno == EAGAIN)
+ if (errno == EAGAIN || errno == EINTR)
debug_return;
sudo_warn("send");
goto bad;