Module Name: src
Committed By: roy
Date: Fri Apr 20 10:26:34 UTC 2018
Modified Files:
src/usr.sbin/rtadvd: rrenum.c rtadvd.c
Log Message:
Fix some unaligned pointer issues.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/usr.sbin/rtadvd/rrenum.c
cvs rdiff -u -r1.59 -r1.60 src/usr.sbin/rtadvd/rtadvd.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/rtadvd/rrenum.c
diff -u src/usr.sbin/rtadvd/rrenum.c:1.20 src/usr.sbin/rtadvd/rrenum.c:1.21
--- src/usr.sbin/rtadvd/rrenum.c:1.20 Mon Nov 6 15:15:04 2017
+++ src/usr.sbin/rtadvd/rrenum.c Fri Apr 20 10:26:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rrenum.c,v 1.20 2017/11/06 15:15:04 christos Exp $ */
+/* $NetBSD: rrenum.c,v 1.21 2018/04/20 10:26:34 roy Exp $ */
/* $KAME: rrenum.c,v 1.14 2004/06/14 05:36:00 itojun Exp $ */
/*
@@ -147,6 +147,7 @@ do_use_prefix(int len, struct rr_pco_mat
struct rr_pco_use *rpu, *rpulim;
struct rainfo *rai;
struct prefix *pp;
+ struct in6_addr rpm_prefix, rpu_prefix;
rpu = (struct rr_pco_use *)(rpm + 1);
rpulim = (struct rr_pco_use *)((char *)rpm + len);
@@ -201,8 +202,10 @@ do_use_prefix(int len, struct rr_pco_mat
logit(LOG_ERR, "<%s> ioctl: %m", __func__);
/* very adhoc: should be rewritten */
+ memcpy(&rpm_prefix, &rpm->rpm_prefix, sizeof(rpm_prefix));
+ memcpy(&rpu_prefix, &rpu->rpu_prefix, sizeof(rpu_prefix));
if (rpm->rpm_code == RPM_PCO_CHANGE &&
- IN6_ARE_ADDR_EQUAL(&rpm->rpm_prefix, &rpu->rpu_prefix) &&
+ IN6_ARE_ADDR_EQUAL(&rpm_prefix, &rpu_prefix) &&
rpm->rpm_matchlen == rpu->rpu_uselen &&
rpu->rpu_uselen == rpu->rpu_keeplen) {
if ((rai = if_indextorainfo(ifindex)) == NULL)
@@ -212,7 +215,7 @@ do_use_prefix(int len, struct rr_pco_mat
struct timespec now;
if (prefix_match(&pp->prefix, pp->prefixlen,
- &rpm->rpm_prefix,
+ &rpm_prefix,
rpm->rpm_matchlen)) {
/* change parameters */
pp->validlifetime = ntohl(rpu->rpu_vltime);
Index: src/usr.sbin/rtadvd/rtadvd.c
diff -u src/usr.sbin/rtadvd/rtadvd.c:1.59 src/usr.sbin/rtadvd/rtadvd.c:1.60
--- src/usr.sbin/rtadvd/rtadvd.c:1.59 Sat Nov 25 02:37:04 2017
+++ src/usr.sbin/rtadvd/rtadvd.c Fri Apr 20 10:26:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rtadvd.c,v 1.59 2017/11/25 02:37:04 kre Exp $ */
+/* $NetBSD: rtadvd.c,v 1.60 2018/04/20 10:26:34 roy Exp $ */
/* $KAME: rtadvd.c,v 1.92 2005/10/17 14:40:02 suz Exp $ */
/*
@@ -1213,21 +1213,24 @@ prefix_check(struct nd_opt_prefix_info *
int inconsistent = 0;
char ntopbuf[INET6_ADDRSTRLEN], prefixbuf[INET6_ADDRSTRLEN];
struct timespec now;
+ struct in6_addr prefix;
#if 0 /* impossible */
if (pinfo->nd_opt_pi_type != ND_OPT_PREFIX_INFORMATION)
return 0;
#endif
+ memcpy(&prefix, &pinfo->nd_opt_pi_prefix, sizeof(prefix));
+
/*
* log if the adveritsed prefix has link-local scope(sanity check?)
*/
- if (IN6_IS_ADDR_LINKLOCAL(&pinfo->nd_opt_pi_prefix)) {
+ if (IN6_IS_ADDR_LINKLOCAL(&prefix)) {
logit(LOG_INFO,
"%s: link-local prefix %s/%d is advertised "
"from %s on %s",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
inet_ntop(AF_INET6, &from->sin6_addr,
@@ -1235,12 +1238,12 @@ prefix_check(struct nd_opt_prefix_info *
rai->ifname);
}
- if ((pp = find_prefix(rai, &pinfo->nd_opt_pi_prefix,
+ if ((pp = find_prefix(rai, &prefix,
pinfo->nd_opt_pi_prefix_len)) == NULL) {
logit(LOG_INFO,
"%s: prefix %s/%d from %s on %s is not in our list",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
inet_ntop(AF_INET6, &from->sin6_addr,
@@ -1268,7 +1271,7 @@ prefix_check(struct nd_opt_prefix_info *
" (decr. in real time) inconsistent on %s:"
" %d from %s, %ld from us",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
rai->ifname, preferred_time,
@@ -1283,7 +1286,7 @@ prefix_check(struct nd_opt_prefix_info *
" inconsistent on %s:"
" %d from %s, %d from us",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
rai->ifname, preferred_time,
@@ -1304,7 +1307,7 @@ prefix_check(struct nd_opt_prefix_info *
" (decr. in real time) inconsistent on %s:"
" %d from %s, %ld from us",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
rai->ifname, preferred_time,
@@ -1319,7 +1322,7 @@ prefix_check(struct nd_opt_prefix_info *
" inconsistent on %s:"
" %d from %s, %d from us",
__func__,
- inet_ntop(AF_INET6, &pinfo->nd_opt_pi_prefix,
+ inet_ntop(AF_INET6, &prefix,
prefixbuf, INET6_ADDRSTRLEN),
pinfo->nd_opt_pi_prefix_len,
rai->ifname, valid_time,