aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobbie Harwood <rharwood@redhat.com>2021-05-29 13:25:59 -0400
committerGreg Hudson <ghudson@mit.edu>2021-07-12 12:00:30 -0400
commitd8c95fe992fe7e0d9314a28364fc26992f1da628 (patch)
tree635aeb9dd6c52dcdbcabd708097d98d6cac97886
parent5cf95e57e1a45f20d6ae1ea8232c1511f4b1940b (diff)
downloadkrb5-d8c95fe992fe7e0d9314a28364fc26992f1da628.zip
krb5-d8c95fe992fe7e0d9314a28364fc26992f1da628.tar.gz
krb5-d8c95fe992fe7e0d9314a28364fc26992f1da628.tar.bz2
Fix use-after-free during krad remote_shutdown()
Since elements of the queue can be removed on out-of-memory errors, the correct call is K5_TAILQ_FOREACH_SAFE, not K5_TAILQ_FOREACH. Reported by Coverity. (cherry picked from commit 8c88defb16b34937d5b72b4832c854ce2dbe32d1) ticket: 9015 version_fixed: 1.19.2
-rw-r--r--src/lib/krad/remote.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lib/krad/remote.c b/src/lib/krad/remote.c
index c96a9b4..a938665 100644
--- a/src/lib/krad/remote.c
+++ b/src/lib/krad/remote.c
@@ -220,12 +220,12 @@ static void
remote_shutdown(krad_remote *rr)
{
krb5_error_code retval;
- request *r;
+ request *r, *next;
remote_disconnect(rr);
/* Start timers for all unsent packets. */
- K5_TAILQ_FOREACH(r, &rr->list, list) {
+ K5_TAILQ_FOREACH_SAFE(r, &rr->list, list, next) {
if (r->timer == NULL) {
retval = request_start_timer(r, rr->vctx);
if (retval != 0)