Hi,

This makes icmp6 ready for 64 bit time_t by adding a range check
and an explicit cast.

ok?

bluhm

Index: netinet6/icmp6.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/icmp6.c,v
retrieving revision 1.123
diff -u -p -r1.123 icmp6.c
--- netinet6/icmp6.c    28 Mar 2013 16:45:16 -0000      1.123
+++ netinet6/icmp6.c    3 Apr 2013 22:13:36 -0000
@@ -1819,11 +1819,15 @@ ni6_store_addrs(struct icmp6_nodeinfo *n
                        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(&ltime, cp, sizeof(u_int32_t));

Reply via email to