untrusted comment: verify with openbsd-75-base.pub
RWRGj1pRpprAftVfUP/AVFEX44/5EmaEBZaDdN9E13hPf2Why5rsuciroMnEzxrDOHiHNMkmCsj51GpwCFc40GByi1n4p3LmawA=

OpenBSD 7.5 errata 022, April 9, 2025:

iked(8) and isakmpd(8) fix double-free in ecdh mode.

Apply by doing:
   signify -Vep /etc/signify/openbsd-75-base.pub -x 022_ike.patch.sig \
       -m - | (cd /usr/src && patch -p0)

And then rebuild and install iked and isakmpd:
   cd /usr/src/sbin/iked
   make obj
   make
   make install
   cd /usr/src/sbin/isakmpd
   make obj
   make
   make install

Index: sbin/iked/dh.c
===================================================================
RCS file: /cvs/src/sbin/iked/dh.c,v
diff -u -p -r1.33 dh.c
--- sbin/iked/dh.c      28 Jul 2023 07:31:38 -0000      1.33
+++ sbin/iked/dh.c      25 Mar 2025 15:02:49 -0000
@@ -670,9 +670,9 @@ ec_raw2point(struct dh_group *group, uin
{
       const EC_GROUP  *ecgroup = NULL;
       EC_POINT        *point = NULL;
+       EC_POINT        *ret = NULL;
       BN_CTX          *bnctx = NULL;
       BIGNUM          *x = NULL, *y = NULL;
-       int              ret = -1;
       size_t           eclen;
       size_t           xlen, ylen;

@@ -700,10 +700,12 @@ ec_raw2point(struct dh_group *group, uin
       if (!EC_POINT_set_affine_coordinates(ecgroup, point, x, y, bnctx))
               goto done;

-       ret = 0;
+       /* success */
+       ret = point;
+       point = NULL;   /* owned by caller */
+
 done:
-       if (ret != 0 && point != NULL)
-               EC_POINT_clear_free(point);
+       EC_POINT_clear_free(point);
       /* Make sure to erase sensitive data */
       if (x != NULL)
               BN_clear(x);
@@ -712,7 +714,7 @@ ec_raw2point(struct dh_group *group, uin
       BN_CTX_end(bnctx);
       BN_CTX_free(bnctx);

-       return (point);
+       return (ret);
}

int
Index: sbin/isakmpd/dh.c
===================================================================
RCS file: /cvs/src/sbin/isakmpd/dh.c,v
diff -u -p -r1.27 dh.c
--- sbin/isakmpd/dh.c   31 Mar 2023 07:28:46 -0000      1.27
+++ sbin/isakmpd/dh.c   25 Mar 2025 15:02:49 -0000
@@ -581,9 +581,9 @@ ec_raw2point(struct group *group, u_int8
{
       const EC_GROUP  *ecgroup = NULL;
       EC_POINT        *point = NULL;
+       EC_POINT        *ret = NULL;
       BN_CTX          *bnctx = NULL;
       BIGNUM          *x = NULL, *y = NULL;
-       int              ret = -1;
       size_t           eclen;
       size_t           xlen, ylen;

@@ -611,10 +611,12 @@ ec_raw2point(struct group *group, u_int8
       if (!EC_POINT_set_affine_coordinates(ecgroup, point, x, y, bnctx))
               goto done;

-       ret = 0;
+       /* success */
+       ret = point;
+       point = NULL;   /* owned by caller */
+
 done:
-       if (ret != 0 && point != NULL)
-               EC_POINT_clear_free(point);
+       EC_POINT_clear_free(point);
       /* Make sure to erase sensitive data */
       if (x != NULL)
               BN_clear(x);
@@ -623,5 +625,5 @@ ec_raw2point(struct group *group, u_int8
       BN_CTX_end(bnctx);
       BN_CTX_free(bnctx);

-       return (point);
+       return (ret);
}