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:
parent
9d5f066180
commit
630fc9b17b
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user