Hi,

since there's a 'sa_free(sa)' followed by a 'continue' a few lines down
from the RB_FOREACH(), we must use RB_FOREACH_SAFE() instead.

Gerhard


Index: sbin/iked/ikev2.c
===================================================================
RCS file: /cvs/src/sbin/iked/ikev2.c,v
retrieving revision 1.346
diff -u -p -C6 -u -p -r1.346 ikev2.c
--- sbin/iked/ikev2.c   14 Mar 2022 12:58:55 -0000      1.346
+++ sbin/iked/ikev2.c   28 May 2022 13:08:29 -0000
@@ -223,13 +223,13 @@ ikev2_shutdown(struct privsep_proc *p)
 }
 
 int
 ikev2_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 {
        struct iked             *env = p->p_env;
-       struct iked_sa          *sa;
+       struct iked_sa          *sa, *satmp;
        struct iked_policy      *pol, *old;
 
        switch (imsg->hdr.type) {
        case IMSG_CTL_RESET:
                return (config_getreset(env, imsg));
        case IMSG_CTL_COUPLE:
@@ -242,13 +242,13 @@ ikev2_dispatch_parent(int fd, struct pri
                timer_del(env, &env->sc_inittmr);
                TAILQ_FOREACH(pol, &env->sc_policies, pol_entry) {
                        if (policy_generate_ts(pol) == -1)
                                fatalx("%s: too many traffic selectors", 
__func__);
                }
                /* Find new policies for dangling SAs */
-               RB_FOREACH(sa, iked_sas, &env->sc_sas) {
+               RB_FOREACH_SAFE(sa, iked_sas, &env->sc_sas, satmp) {
                        if (sa->sa_state != IKEV2_STATE_ESTABLISHED) {
                                sa_state(env, sa, IKEV2_STATE_CLOSING);
                                ikev2_ike_sa_setreason(sa, "reload");
                                sa_free(env, sa);
                                continue;
                        }

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to