2
0
mirror of https://github.com/sudo-project/sudo.git synced 2025-08-22 01:49:11 +00:00

Make restart and elapsed members of the closure structs not pointers.

Fixes coverity CID 207992
This commit is contained in:
Todd C. Miller 2020-02-07 13:12:38 -07:00
parent 9d5f066180
commit 630fc9b17b
2 changed files with 19 additions and 23 deletions

View File

@ -418,8 +418,6 @@ client_closure_free(struct client_closure *closure)
#endif
TAILQ_REMOVE(&connections, closure, entries);
close(closure->sock);
free(closure->elapsed);
free(closure->restart);
sudo_ev_free(closure->read_ev);
sudo_ev_free(closure->write_ev);
#if defined(HAVE_OPENSSL)
@ -454,12 +452,10 @@ client_closure_alloc(int sock,
closure->state = RECV_HELLO;
closure->log_info = log_info;
closure->elapsed = malloc(sizeof(struct timespec));
closure->restart = malloc(sizeof(struct timespec));
closure->elapsed->tv_sec = elapsed->tv_sec;
closure->elapsed->tv_nsec = elapsed->tv_nsec;
closure->restart->tv_sec = restart->tv_sec;
closure->restart->tv_nsec = restart->tv_nsec;
closure->elapsed.tv_sec = elapsed->tv_sec;
closure->elapsed.tv_nsec = elapsed->tv_nsec;
closure->restart.tv_sec = restart->tv_sec;
closure->restart.tv_nsec = restart->tv_nsec;
closure->iolog_id = iolog_id;
@ -755,10 +751,10 @@ fmt_restart_message(struct client_closure *closure)
sudo_debug_printf(SUDO_DEBUG_INFO,
"%s: sending RestartMessage, [%lld, %ld]", __func__,
(long long)closure->restart->tv_sec, closure->restart->tv_nsec);
(long long)closure->restart.tv_sec, closure->restart.tv_nsec);
tv.tv_sec = closure->restart->tv_sec;
tv.tv_nsec = closure->restart->tv_nsec;
tv.tv_sec = closure->restart.tv_sec;
tv.tv_nsec = closure->restart.tv_nsec;
restart_msg.resume_point = &tv;
restart_msg.log_id = (char *)closure->iolog_id;
@ -961,13 +957,13 @@ again:
}
/* Track elapsed time for comparison with commit points. */
sudo_timespecadd(&timing->delay, closure->elapsed, closure->elapsed);
sudo_timespecadd(&timing->delay, &closure->elapsed, &closure->elapsed);
/* If we have a restart point, ignore records until we hit it. */
if (closure->restart != NULL) {
if (sudo_timespeccmp(closure->restart, closure->elapsed, >=))
if (sudo_timespecisset(&closure->restart)) {
if (sudo_timespeccmp(&closure->restart, &closure->elapsed, >=))
goto again;
closure->restart = NULL; /* caught up */
sudo_timespecclear(&closure->restart); /* caught up */
}
switch (timing->event) {
@ -1177,7 +1173,7 @@ handle_server_message(uint8_t *buf, size_t len,
if (tls && !do_tls_handshake(closure))
debug_return_bool(false);
#endif
if (sudo_timespecisset(closure->restart)) {
if (sudo_timespecisset(&closure->restart)) {
closure->state = SEND_RESTART;
ret = fmt_restart_message(closure);
} else {
@ -1188,7 +1184,7 @@ handle_server_message(uint8_t *buf, size_t len,
break;
case SERVER_MESSAGE__TYPE_COMMIT_POINT:
ret = handle_commit_point(msg->commit_point, closure);
if (sudo_timespeccmp(closure->elapsed, &closure->committed, ==)) {
if (sudo_timespeccmp(&closure->elapsed, &closure->committed, ==)) {
sudo_ev_del(NULL, closure->read_ev);
closure->state = FINISHED;
if (++finished_transmissions == nr_of_conns)
@ -1613,9 +1609,9 @@ main(int argc, char *argv[])
/* Open the I/O log files and seek to restart point if there is one. */
if (!iolog_open_all(iolog_dir_fd, iolog_dir, closure->iolog_files, open_mode))
goto bad;
if (sudo_timespecisset(&restart)) {
if (!iolog_seekto(iolog_dir_fd, iolog_dir, closure->iolog_files, &elapsed,
&restart))
if (sudo_timespecisset(&closure->restart)) {
if (!iolog_seekto(iolog_dir_fd, iolog_dir, closure->iolog_files,
&closure->elapsed, &closure->restart))
goto bad;
}
@ -1638,7 +1634,7 @@ main(int argc, char *argv[])
if (closure->state != FINISHED) {
sudo_warnx(U_("exited prematurely with state %d"), closure->state);
sudo_warnx(U_("elapsed time sent to server [%lld, %ld]"),
(long long)closure->elapsed->tv_sec, closure->elapsed->tv_nsec);
(long long)closure->elapsed.tv_sec, closure->elapsed.tv_nsec);
sudo_warnx(U_("commit point received from server [%lld, %ld]"),
(long long)closure->committed.tv_sec, closure->committed.tv_nsec);
goto bad;

View File

@ -46,8 +46,8 @@ struct client_closure {
bool read_instead_of_write;
bool write_instead_of_read;
bool temporary_write_event;
struct timespec *restart;
struct timespec *elapsed;
struct timespec restart;
struct timespec elapsed;
struct timespec committed;
struct timing_closure timing;
struct connection_buffer read_buf;