Stop peeking into struct imsg when relaying control messages.
authorflorian <florian@openbsd.org>
Sat, 24 Aug 2024 16:34:23 +0000 (16:34 +0000)
committerflorian <florian@openbsd.org>
Sat, 24 Aug 2024 16:34:23 +0000 (16:34 +0000)
pointed out by & OK tb

sbin/slaacd/control.c
sbin/slaacd/slaacd.c
sbin/slaacd/slaacd.h

index a5fb37f..2cdf056 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: control.c,v 1.10 2024/08/24 09:44:41 florian Exp $    */
+/*     $OpenBSD: control.c,v 1.11 2024/08/24 16:34:23 florian Exp $    */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -296,10 +296,9 @@ control_imsg_relay(struct imsg *imsg)
 {
        struct ctl_conn *c;
 
-       if ((c = control_connbypid(imsg->hdr.pid)) == NULL)
+       if ((c = control_connbypid(imsg_get_pid(imsg))) == NULL)
                return (0);
 
-       return (imsg_compose_event(&c->iev, imsg->hdr.type, 0, imsg->hdr.pid,
-           -1, imsg->data, IMSG_DATA_SIZE(*imsg)));
+       return (imsg_forward_event(&c->iev, imsg));
 }
 #endif /* SMALL */
index c76bae0..da9a98e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: slaacd.c,v 1.71 2024/08/24 09:44:41 florian Exp $     */
+/*     $OpenBSD: slaacd.c,v 1.72 2024/08/24 16:34:23 florian Exp $     */
 
 /*
  * Copyright (c) 2017 Florian Obser <florian@openbsd.org>
@@ -587,6 +587,16 @@ imsg_compose_event(struct imsgev *iev, uint16_t type, uint32_t peerid,
        return (ret);
 }
 
+int
+imsg_forward_event(struct imsgev *iev, struct imsg *imsg)
+{
+       int     ret;
+
+       if ((ret = imsg_forward(&iev->ibuf, imsg)) != -1)
+               imsg_event_add(iev);
+
+       return (ret);
+}
 static int
 main_imsg_send_ipc_sockets(struct imsgbuf *frontend_buf,
     struct imsgbuf *engine_buf)
index 77087c3..9f7ba45 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: slaacd.h,v 1.39 2024/08/24 09:42:40 florian Exp $     */
+/*     $OpenBSD: slaacd.h,v 1.40 2024/08/24 16:34:23 florian Exp $     */
 
 /*
  * Copyright (c) 2017 Florian Obser <florian@openbsd.org>
@@ -27,8 +27,6 @@
 
 #define        MAX_RDNS_COUNT          8 /* max nameserver in a RTM_PROPOSAL */
 
-#define        IMSG_DATA_SIZE(imsg)    ((imsg).hdr.len - IMSG_HEADER_SIZE)
-
 struct imsgev {
        struct imsgbuf   ibuf;
        void            (*handler)(int, short, void *);
@@ -204,6 +202,7 @@ struct imsg_dup_addr {
 void           imsg_event_add(struct imsgev *);
 int            imsg_compose_event(struct imsgev *, uint16_t, uint32_t, pid_t,
                    int, void *, uint16_t);
+int            imsg_forward_event(struct imsgev *, struct imsg *);
 #ifndef        SMALL
 const char     *sin6_to_str(struct sockaddr_in6 *);
 const char     *i2s(uint32_t);