diff options
author | 2013-04-04 17:58:42 +0000 | |
---|---|---|
committer | 2013-04-04 17:58:42 +0000 | |
commit | 54ff71afea9c090c968c505ad90f4d6213098419 (patch) | |
tree | 1f2ce6a9e0c16ab35ea5a25bd15fb575027a65bf | |
parent | fix alignment issue in getnetby{addr,name}() too. (diff) | |
download | wireguard-openbsd-54ff71afea9c090c968c505ad90f4d6213098419.tar.xz wireguard-openbsd-54ff71afea9c090c968c505ad90f4d6213098419.zip |
Make icmp6 ready for 64 bit time_t by adding a range check and an
explicit cast.
OK deraadt@
-rw-r--r-- | sys/netinet6/icmp6.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c index 18ac530a8b2..64166d22184 100644 --- a/sys/netinet6/icmp6.c +++ b/sys/netinet6/icmp6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: icmp6.c,v 1.123 2013/03/28 16:45:16 tedu Exp $ */ +/* $OpenBSD: icmp6.c,v 1.124 2013/04/04 17:58:42 bluhm Exp $ */ /* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */ /* @@ -1819,11 +1819,15 @@ ni6_store_addrs(struct icmp6_nodeinfo *ni6, struct icmp6_nodeinfo *nni6, if (ifa6->ia6_lifetime.ia6t_expire == 0) ltime = ND6_INFINITE_LIFETIME; else { - if (ifa6->ia6_lifetime.ia6t_expire > - time_second) - ltime = htonl(ifa6->ia6_lifetime.ia6t_expire - time_second); - else + time_t diff = ifa6->ia6_lifetime.ia6t_expire - + time_second; + + if (diff <= 0) ltime = 0; + else if (diff >= ND6_INFINITE_LIFETIME) + ltime = ND6_INFINITE_LIFETIME; + else + ltime = htonl((u_int32_t)diff); } bcopy(<ime, cp, sizeof(u_int32_t)); |