My plan is to make ibuf_data() return void * not uint8_t *. Because of
this you can't do pointer arithmetics with that function.
The following diff just uses the same construct that many other functions
in ikev2_pld.c use.

This code should be rewritten but we are not there yet. The goal is to
introduce a ibuf parse API that avoids all this pointer gymnastics.
-- 
:wq Claudio

Index: ikev2_pld.c
===================================================================
RCS file: /cvs/src/sbin/iked/ikev2_pld.c,v
retrieving revision 1.128
diff -u -p -r1.128 ikev2_pld.c
--- ikev2_pld.c 23 May 2023 13:12:19 -0000      1.128
+++ ikev2_pld.c 6 Jun 2023 10:49:50 -0000
@@ -1525,9 +1525,10 @@ ikev2_pld_ts(struct iked *env, struct ik
        struct sockaddr_in               s4;
        struct sockaddr_in6              s6;
        uint8_t                          buf[2][128];
+       uint8_t                         *msgbuf = ibuf_data(msg->msg_data);
        uint8_t                         *ptr;
 
-       ptr = ibuf_data(msg->msg_data) + offset;
+       ptr = msgbuf + offset;
 
        switch (type) {
        case IKEV2_TS_IPV4_ADDR_RANGE:
@@ -1867,6 +1868,7 @@ ikev2_pld_cp(struct iked *env, struct ik
        struct iked_addr        *addr;
        struct sockaddr_in      *in4;
        struct sockaddr_in6     *in6;
+       uint8_t                 *msgbuf = ibuf_data(msg->msg_data);
        uint8_t                 *ptr;
        size_t                   len;
        uint8_t                  buf[128];
@@ -1875,7 +1877,7 @@ ikev2_pld_cp(struct iked *env, struct ik
        if (ikev2_validate_cp(msg, offset, left, &cp))
                return (-1);
 
-       ptr = ibuf_data(msg->msg_data) + offset + sizeof(cp);
+       ptr = msgbuf + offset + sizeof(cp);
        len = left - sizeof(cp);
 
        log_debug("%s: type %s length %zu",

Reply via email to