summaryrefslogtreecommitdiffstats
path: root/usr.sbin/dvmrpd
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2009-06-07 00:40:46 +0000
committereric <eric@openbsd.org>2009-06-07 00:40:46 +0000
commit46a8da16810e181297cbb2e6ff3095ea5882ae74 (patch)
tree68a6e32e8d7c7797d8e0423be1f557af485ee27f /usr.sbin/dvmrpd
parentInitial documentation for the new stuff (diff)
downloadwireguard-openbsd-46a8da16810e181297cbb2e6ff3095ea5882ae74.tar.xz
wireguard-openbsd-46a8da16810e181297cbb2e6ff3095ea5882ae74.zip
Make the imsg protocol network-safe.
ok pyr@
Diffstat (limited to 'usr.sbin/dvmrpd')
-rw-r--r--usr.sbin/dvmrpd/imsg.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/usr.sbin/dvmrpd/imsg.c b/usr.sbin/dvmrpd/imsg.c
index 0d954e9e16f..06f7fa11117 100644
--- a/usr.sbin/dvmrpd/imsg.c
+++ b/usr.sbin/dvmrpd/imsg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: imsg.c,v 1.4 2009/06/06 22:11:25 eric Exp $ */
+/* $OpenBSD: imsg.c,v 1.5 2009/06/07 00:40:46 eric Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -105,8 +105,12 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
errno = ERANGE;
return (-1);
}
- if (imsg->hdr.len > av)
+ if ((imsg->hdr.len = ntohs(imsg->hdr.len)) > av)
return (0);
+ imsg->hdr.type = ntohl(imsg->hdr.type);
+ imsg->hdr.flags = ntohs(imsg->hdr.flags);
+ imsg->hdr.peerid = ntohl(imsg->hdr.peerid);
+ imsg->hdr.pid = ntohl(imsg->hdr.pid);
datalen = imsg->hdr.len - IMSG_HEADER_SIZE;
ibuf->r.rptr = ibuf->r.buf + IMSG_HEADER_SIZE;
if ((imsg->data = malloc(datalen)) == NULL) {
@@ -212,7 +216,11 @@ 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 = htonl(hdr->type);
+ hdr->len = htons(msg->wpos);
+ hdr->flags = htons(hdr->flags);
+ hdr->peerid = htonl(hdr->peerid);
+ hdr->pid = htonl(hdr->pid);
buf_close(&ibuf->w, msg);
}