Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/rtadvd Fix some unaligned pointer issues.
details: https://anonhg.NetBSD.org/src/rev/22cc0bb1888d
branches: trunk
changeset: 361264:22cc0bb1888d
user: roy <roy%NetBSD.org@localhost>
date: Fri Apr 20 10:26:34 2018 +0000
description:
Fix some unaligned pointer issues.
diffstat:
usr.sbin/rtadvd/rrenum.c | 9 ++++++---
usr.sbin/rtadvd/rtadvd.c | 21 ++++++++++++---------
2 files changed, 18 insertions(+), 12 deletions(-)
diffs (125 lines):
diff -r e3d6e52eafe7 -r 22cc0bb1888d usr.sbin/rtadvd/rrenum.c
--- a/usr.sbin/rtadvd/rrenum.c Fri Apr 20 09:56:22 2018 +0000
+++ b/usr.sbin/rtadvd/rrenum.c Fri Apr 20 10:26:34 2018 +0000
@@ -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 @@
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 @@
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 @@
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);
diff -r e3d6e52eafe7 -r 22cc0bb1888d usr.sbin/rtadvd/rtadvd.c
--- a/usr.sbin/rtadvd/rtadvd.c Fri Apr 20 09:56:22 2018 +0000
+++ b/usr.sbin/rtadvd/rtadvd.c Fri Apr 20 10:26:34 2018 +0000
@@ -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 @@
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 @@
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 @@
" (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 @@
" 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 @@
" (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 @@
" 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,
Home |
Main Index |
Thread Index |
Old Index