summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2009-06-04 17:51:38 +0000
committereric <eric@openbsd.org>2009-06-04 17:51:38 +0000
commit977663ad4507440d2e918058550ce37d50e61195 (patch)
tree1986df91c757d0fcc8c242b5bd322d94785fd5c1
parentthe POOL_DEBUG checks needed to be more friendly with DIAGNOSTIC (diff)
downloadwireguard-openbsd-977663ad4507440d2e918058550ce37d50e61195.tar.xz
wireguard-openbsd-977663ad4507440d2e918058550ce37d50e61195.zip
make the imsg framework endian-safe so that it can also be used
for network message passing. ok pyr@
-rw-r--r--usr.sbin/relayd/imsg.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.sbin/relayd/imsg.c b/usr.sbin/relayd/imsg.c
index 0346651a3f2..a0a915c6f36 100644
--- a/usr.sbin/relayd/imsg.c
+++ b/usr.sbin/relayd/imsg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: imsg.c,v 1.16 2009/06/04 07:16:38 eric Exp $ */
+/* $OpenBSD: imsg.c,v 1.17 2009/06/04 17:51:38 eric Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -103,6 +103,9 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
return (0);
memcpy(&imsg->hdr, ibuf->r.buf, sizeof(imsg->hdr));
+ imsg->hdr.type = ntohs(imsg->hdr.type);
+ imsg->hdr.len = ntohs(imsg->hdr.len);
+ imsg->hdr.peerid = ntohl(imsg->hdr.peerid);
if (imsg->hdr.len < IMSG_HEADER_SIZE ||
imsg->hdr.len > MAX_IMSGSIZE) {
log_warnx("imsg_get: imsg hdr len %u out of bounds, type=%u",
@@ -224,7 +227,9 @@ imsg_close(struct imsgbuf *ibuf, struct buf *msg)
struct imsg_hdr *hdr;
hdr = (struct imsg_hdr *)msg->buf;
- hdr->len = (u_int16_t)msg->wpos;
+ hdr->type = htons(hdr->type);
+ hdr->len = htons(msg->wpos);
+ hdr->peerid = htonl(hdr->peerid);
buf_close(&ibuf->w, msg);
imsg_event_add(ibuf);