Add debug printfs when send/recv return EAGAIN or EINTR.

These are not actually errors but can help gain insight into what
is going on and, in the case of EAGAIN, whether or not there may
be a kernel resource starvation problem.
This commit is contained in:
Todd C. Miller
2022-06-20 14:58:06 -06:00
parent 49c27f5278
commit 8829c028d3

View File

@@ -560,8 +560,12 @@ intercept_read(int fd, struct intercept_closure *closure)
case false: case false:
goto done; goto done;
default: default:
if (errno == EINTR || errno == EAGAIN) if (errno == EINTR || errno == EAGAIN) {
debug_return_bool(true); debug_return_bool(true);
sudo_debug_printf(
SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO,
"reading intercept token");
}
sudo_warn("recv"); sudo_warn("recv");
goto done; goto done;
} }
@@ -574,8 +578,12 @@ intercept_read(int fd, struct intercept_closure *closure)
nread = recv(fd, &req_len, sizeof(req_len), 0); nread = recv(fd, &req_len, sizeof(req_len), 0);
if (nread != sizeof(req_len)) { if (nread != sizeof(req_len)) {
if (nread == -1) { if (nread == -1) {
if (errno == EINTR || errno == EAGAIN) if (errno == EINTR || errno == EAGAIN) {
sudo_debug_printf(
SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO,
"reading intercept message size");
debug_return_bool(true); debug_return_bool(true);
}
sudo_warn("recv"); sudo_warn("recv");
} }
goto done; goto done;
@@ -605,8 +613,12 @@ intercept_read(int fd, struct intercept_closure *closure)
/* EOF, other side must have exited. */ /* EOF, other side must have exited. */
goto done; goto done;
case -1: case -1:
if (errno == EINTR || errno == EAGAIN) if (errno == EINTR || errno == EAGAIN) {
sudo_debug_printf(
SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO,
"reading intercept message");
debug_return_bool(true); debug_return_bool(true);
}
sudo_warn("recv"); sudo_warn("recv");
goto done; goto done;
default: default:
@@ -835,8 +847,12 @@ intercept_write(int fd, struct intercept_closure *closure)
nwritten = send(fd, closure->buf + closure->off, nwritten = send(fd, closure->buf + closure->off,
closure->len - closure->off, 0); closure->len - closure->off, 0);
if (nwritten == -1) { if (nwritten == -1) {
if (errno == EINTR || errno == EAGAIN) if (errno == EINTR || errno == EAGAIN) {
sudo_debug_printf(
SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO,
"writing intercept message");
debug_return_bool(true); debug_return_bool(true);
}
sudo_warn("send"); sudo_warn("send");
goto done; goto done;
} }