2
0
mirror of https://github.com/sudo-project/sudo.git synced 2025-08-28 21:07:55 +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 #endif
TAILQ_REMOVE(&connections, closure, entries); TAILQ_REMOVE(&connections, closure, entries);
close(closure->sock); close(closure->sock);
free(closure->elapsed);
free(closure->restart);
sudo_ev_free(closure->read_ev); sudo_ev_free(closure->read_ev);
sudo_ev_free(closure->write_ev); sudo_ev_free(closure->write_ev);
#if defined(HAVE_OPENSSL) #if defined(HAVE_OPENSSL)
@ -454,12 +452,10 @@ client_closure_alloc(int sock,
closure->state = RECV_HELLO; closure->state = RECV_HELLO;
closure->log_info = log_info; closure->log_info = log_info;
closure->elapsed = malloc(sizeof(struct timespec)); closure->elapsed.tv_sec = elapsed->tv_sec;
closure->restart = malloc(sizeof(struct timespec)); closure->elapsed.tv_nsec = elapsed->tv_nsec;
closure->elapsed->tv_sec = elapsed->tv_sec; closure->restart.tv_sec = restart->tv_sec;
closure->elapsed->tv_nsec = elapsed->tv_nsec; closure->restart.tv_nsec = restart->tv_nsec;
closure->restart->tv_sec = restart->tv_sec;
closure->restart->tv_nsec = restart->tv_nsec;
closure->iolog_id = iolog_id; closure->iolog_id = iolog_id;
@ -755,10 +751,10 @@ fmt_restart_message(struct client_closure *closure)
sudo_debug_printf(SUDO_DEBUG_INFO, sudo_debug_printf(SUDO_DEBUG_INFO,
"%s: sending RestartMessage, [%lld, %ld]", __func__, "%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_sec = closure->restart.tv_sec;
tv.tv_nsec = closure->restart->tv_nsec; tv.tv_nsec = closure->restart.tv_nsec;
restart_msg.resume_point = &tv; restart_msg.resume_point = &tv;
restart_msg.log_id = (char *)closure->iolog_id; restart_msg.log_id = (char *)closure->iolog_id;
@ -961,13 +957,13 @@ again:
} }
/* Track elapsed time for comparison with commit points. */ /* 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 we have a restart point, ignore records until we hit it. */
if (closure->restart != NULL) { if (sudo_timespecisset(&closure->restart)) {
if (sudo_timespeccmp(closure->restart, closure->elapsed, >=)) if (sudo_timespeccmp(&closure->restart, &closure->elapsed, >=))
goto again; goto again;
closure->restart = NULL; /* caught up */ sudo_timespecclear(&closure->restart); /* caught up */
} }
switch (timing->event) { switch (timing->event) {
@ -1177,7 +1173,7 @@ handle_server_message(uint8_t *buf, size_t len,
if (tls && !do_tls_handshake(closure)) if (tls && !do_tls_handshake(closure))
debug_return_bool(false); debug_return_bool(false);
#endif #endif
if (sudo_timespecisset(closure->restart)) { if (sudo_timespecisset(&closure->restart)) {
closure->state = SEND_RESTART; closure->state = SEND_RESTART;
ret = fmt_restart_message(closure); ret = fmt_restart_message(closure);
} else { } else {
@ -1188,7 +1184,7 @@ handle_server_message(uint8_t *buf, size_t len,
break; break;
case SERVER_MESSAGE__TYPE_COMMIT_POINT: case SERVER_MESSAGE__TYPE_COMMIT_POINT:
ret = handle_commit_point(msg->commit_point, closure); 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); sudo_ev_del(NULL, closure->read_ev);
closure->state = FINISHED; closure->state = FINISHED;
if (++finished_transmissions == nr_of_conns) 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. */ /* 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)) if (!iolog_open_all(iolog_dir_fd, iolog_dir, closure->iolog_files, open_mode))
goto bad; goto bad;
if (sudo_timespecisset(&restart)) { if (sudo_timespecisset(&closure->restart)) {
if (!iolog_seekto(iolog_dir_fd, iolog_dir, closure->iolog_files, &elapsed, if (!iolog_seekto(iolog_dir_fd, iolog_dir, closure->iolog_files,
&restart)) &closure->elapsed, &closure->restart))
goto bad; goto bad;
} }
@ -1638,7 +1634,7 @@ main(int argc, char *argv[])
if (closure->state != FINISHED) { if (closure->state != FINISHED) {
sudo_warnx(U_("exited prematurely with state %d"), closure->state); sudo_warnx(U_("exited prematurely with state %d"), closure->state);
sudo_warnx(U_("elapsed time sent to server [%lld, %ld]"), 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]"), sudo_warnx(U_("commit point received from server [%lld, %ld]"),
(long long)closure->committed.tv_sec, closure->committed.tv_nsec); (long long)closure->committed.tv_sec, closure->committed.tv_nsec);
goto bad; goto bad;

View File

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