There is a lot of duplication in iked's imsg_util.c Now here is a minimal diff removing all extra parts added that are not needed anymore. The removal of ibuf_zero() depends partially on my previous imsg diff.
With my imsg diff allocation are always zeroed so no need to call imsg_zero(). In ibuf_release() there is no need to call ibuf_zero() since the imsg API is already using freezero(). Also the NULL check is not needed. I moved the memset() into ibuf_reserve() so that can also go away. Iked does some rather unholy things with ibufs which I want to slowly clean up. This is step 1. -- :wq Claudio Index: iked.h =================================================================== RCS file: /cvs/src/sbin/iked/iked.h,v retrieving revision 1.210 diff -u -p -r1.210 iked.h --- iked.h 5 Mar 2023 22:17:22 -0000 1.210 +++ iked.h 22 May 2023 15:29:07 -0000 @@ -1282,7 +1282,6 @@ struct ibuf * ibuf_random(size_t); int ibuf_prepend(struct ibuf *, void *, size_t); void *ibuf_advance(struct ibuf *, size_t); -void ibuf_zero(struct ibuf *); int ibuf_strcat(struct ibuf **, const char *); int ibuf_strlen(struct ibuf *); Index: imsg_util.c =================================================================== RCS file: /cvs/src/sbin/iked/imsg_util.c,v retrieving revision 1.13 diff -u -p -r1.13 imsg_util.c --- imsg_util.c 17 May 2021 08:14:37 -0000 1.13 +++ imsg_util.c 22 May 2023 15:28:39 -0000 @@ -42,12 +42,6 @@ ibuf_cat(struct ibuf *dst, struct ibuf * return (ibuf_add(dst, src->buf, ibuf_size(src))); } -void -ibuf_zero(struct ibuf *buf) -{ - explicit_bzero(buf->buf, buf->wpos); -} - struct ibuf * ibuf_new(const void *data, size_t len) { @@ -57,8 +51,6 @@ ibuf_new(const void *data, size_t len) IKED_MSGBUF_MAX)) == NULL) return (NULL); - ibuf_zero(buf); - if (len == 0) return (buf); @@ -80,37 +72,19 @@ ibuf_new(const void *data, size_t len) struct ibuf * ibuf_static(void) { - struct ibuf *buf; - - if ((buf = ibuf_open(IKED_MSGBUF_MAX)) == NULL) - return (NULL); - - ibuf_zero(buf); - - return (buf); + return ibuf_open(IKED_MSGBUF_MAX); } void * ibuf_advance(struct ibuf *buf, size_t len) { - void *ptr; - - if ((ptr = ibuf_reserve(buf, len)) != NULL) - memset(ptr, 0, len); - - return (ptr); + return ibuf_reserve(buf, len); } void ibuf_release(struct ibuf *buf) { - if (buf == NULL) - return; - if (buf->buf != NULL) { - ibuf_zero(buf); - free(buf->buf); - } - free(buf); + ibuf_free(buf); } size_t