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