From 9b10897474965bc1e16f684a62cb71941c34c564 Mon Sep 17 00:00:00 2001 From: itojun <> Date: Tue, 29 Feb 2000 18:25:52 +0000 Subject: fix alignment constraint in IPv6 routing header manipulation (ancillary data). documented in RFC2292. from: shin@kame.net --- src/lib/libc/net/rthdr.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lib/libc/net/rthdr.c b/src/lib/libc/net/rthdr.c index 2dff59668e..5cd485889b 100644 --- a/src/lib/libc/net/rthdr.c +++ b/src/lib/libc/net/rthdr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rthdr.c,v 1.1 1999/12/11 08:09:11 itojun Exp $ */ +/* $OpenBSD: rthdr.c,v 1.2 2000/02/29 18:25:52 itojun Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -63,7 +63,9 @@ inet6_rthdr_init(bp, type) int type; { register struct cmsghdr *ch = (struct cmsghdr *)bp; - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(ch + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(ch); ch->cmsg_level = IPPROTO_IPV6; ch->cmsg_type = IPV6_RTHDR; @@ -88,7 +90,9 @@ inet6_rthdr_add(cmsg, addr, flags) const struct in6_addr *addr; u_int flags; { - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(cmsg + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(cmsg); switch(rthdr->ip6r_type) { case IPV6_RTHDR_TYPE_0: @@ -135,7 +139,9 @@ inet6_rthdr_lasthop(cmsg, flags) struct cmsghdr *cmsg; unsigned int flags; { - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(cmsg + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(cmsg); switch(rthdr->ip6r_type) { case IPV6_RTHDR_TYPE_0: @@ -189,7 +195,9 @@ int inet6_rthdr_segments(cmsg) const struct cmsghdr *cmsg; { - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(cmsg + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(cmsg); switch(rthdr->ip6r_type) { case IPV6_RTHDR_TYPE_0: @@ -221,7 +229,9 @@ inet6_rthdr_getaddr(cmsg, index) struct cmsghdr *cmsg; int index; { - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(cmsg + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(cmsg); switch(rthdr->ip6r_type) { case IPV6_RTHDR_TYPE_0: @@ -260,7 +270,9 @@ inet6_rthdr_getflags(cmsg, index) const struct cmsghdr *cmsg; int index; { - register struct ip6_rthdr *rthdr = (struct ip6_rthdr *)(cmsg + 1); + register struct ip6_rthdr *rthdr; + + rthdr = (struct ip6_rthdr *)CMSG_DATA(cmsg); switch(rthdr->ip6r_type) { case IPV6_RTHDR_TYPE_0: -- cgit v1.2.3-55-g6feb