Revert my last two changes.
authormbuhl <mbuhl@openbsd.org>
Fri, 18 Nov 2022 18:56:39 +0000 (18:56 +0000)
committermbuhl <mbuhl@openbsd.org>
Fri, 18 Nov 2022 18:56:39 +0000 (18:56 +0000)
If csa_bundled is set, exactly two csas exist and they point to
each other. Therefore childsa_free already sets the bundled csa
pointer to NULL and it shouldn't be done after calling childsa_free.
ok tobhe@

sbin/iked/config.c
sbin/iked/ikev2.c

index 353ccde..23ae676 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: config.c,v 1.89 2022/11/13 21:19:40 mbuhl Exp $       */
+/*     $OpenBSD: config.c,v 1.90 2022/11/18 18:56:39 mbuhl Exp $       */
 
 /*
  * Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de>
@@ -314,7 +314,7 @@ void
 config_free_childsas(struct iked *env, struct iked_childsas *head,
     struct iked_spi *peerspi, struct iked_spi *localspi)
 {
-       struct iked_childsa     *csa, *csatmp;
+       struct iked_childsa     *csa, *csatmp, *ipcomp;
 
        if (localspi != NULL)
                bzero(localspi, sizeof(*localspi));
@@ -337,14 +337,11 @@ config_free_childsas(struct iked *env, struct iked_childsas *head,
                        RB_REMOVE(iked_activesas, &env->sc_activesas, csa);
                        (void)pfkey_sa_delete(env, csa);
                }
-               /* ipcomp */
-               if (csa->csa_bundled != NULL) {
-                       log_debug("%s: free IPCOMP %p", __func__,
-                           csa->csa_bundled);
-                       if (csa->csa_bundled->csa_loaded)
-                               (void)pfkey_sa_delete(env, csa->csa_bundled);
-                       childsa_free(csa->csa_bundled);
-                       csa->csa_bundled = NULL;
+               if ((ipcomp = csa->csa_bundled) != NULL) {
+                       log_debug("%s: free IPCOMP %p", __func__, ipcomp);
+                       if (ipcomp->csa_loaded)
+                               (void)pfkey_sa_delete(env, ipcomp);
+                       childsa_free(ipcomp);
                }
                childsa_free(csa);
                ikestat_inc(env, ikes_csa_removed);
index 798b923..e6555b9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ikev2.c,v 1.358 2022/11/11 17:58:14 mbuhl Exp $       */
+/*     $OpenBSD: ikev2.c,v 1.359 2022/11/18 18:56:39 mbuhl Exp $       */
 
 /*
  * Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de>
@@ -6592,7 +6592,7 @@ int
 ikev2_childsa_delete(struct iked *env, struct iked_sa *sa, uint8_t saproto,
     uint64_t spi, uint64_t *spiptr, int cleanup)
 {
-       struct iked_childsa     *csa, *csatmp = NULL;
+       struct iked_childsa     *csa, *csatmp = NULL, *ipcomp;
        uint64_t                 peerspi = 0;
        int                      found = 0;
 
@@ -6619,26 +6619,21 @@ ikev2_childsa_delete(struct iked *env, struct iked_sa *sa, uint8_t saproto,
                if (spi && csa->csa_spi.spi == spi)
                        peerspi = csa->csa_peerspi;
 
-               /* ipcomp */
-               if (csa->csa_bundled) {
-                       if (csa->csa_bundled->csa_loaded) {
-                               if (pfkey_sa_delete(env, csa->csa_bundled) != 0)
+               ipcomp = csa->csa_bundled;
+               if (ipcomp) {
+                       if (ipcomp->csa_loaded) {
+                               if (pfkey_sa_delete(env, ipcomp) != 0)
                                        log_info("%s: failed to delete IPCOMP"
                                            " SA spi %s", SPI_SA(sa, __func__),
-                                           print_spi(
-                                           csa->csa_bundled->csa_spi.spi,
-                                           csa->csa_bundled->csa_spi.spi_size
-                                           ));
+                                           print_spi(ipcomp->csa_spi.spi,
+                                           ipcomp->csa_spi.spi_size));
                                else
                                        log_debug("%s: deleted IPCOMP SA spi %s",
                                            SPI_SA(sa, __func__),
-                                           print_spi(
-                                           csa->csa_bundled->csa_spi.spi,
-                                           csa->csa_bundled->csa_spi.spi_size
-                                           ));
+                                           print_spi(ipcomp->csa_spi.spi,
+                                           ipcomp->csa_spi.spi_size));
                        }
-                       childsa_free(csa->csa_bundled);
-                       csa->csa_bundled = NULL;
+                       childsa_free(ipcomp);
                }
                TAILQ_REMOVE(&sa->sa_childsas, csa, csa_entry);
                ikestat_inc(env, ikes_csa_removed);