Index: ping.c =================================================================== RCS file: /cvs/src/sbin/ping/ping.c,v retrieving revision 1.117 diff -u -p -r1.117 ping.c --- ping.c 12 Mar 2015 09:54:11 -0000 1.117 +++ ping.c 13 Mar 2015 02:52:39 -0000 @@ -154,6 +154,8 @@ quad_t tsumsq = 0; /* sum of all times int bufspace = IP_MAXPACKET; +struct tv64 tv64_offset; + void fill(char *, char *); void catcher(int signo); void prtsig(int signo); @@ -338,6 +340,8 @@ main(int argc, char *argv[]) if (argc != 1) usage(); + arc4random_buf(&tv64_offset, sizeof(tv64_offset)); + memset(&interstr, 0, sizeof(interstr)); interstr.it_value.tv_sec = interval; @@ -620,8 +624,10 @@ pinger(void) if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) err(1, "clock_gettime(CLOCK_MONOTONIC)"); - tv64.tv64_sec = htobe64(ts.tv_sec); - tv64.tv64_nsec = htobe64(ts.tv_nsec); + tv64.tv64_sec = htobe64((u_int64_t)ts.tv_sec ^ + tv64_offset.tv64_sec); + tv64.tv64_nsec = htobe64((u_int64_t)ts.tv_nsec ^ + tv64_offset.tv64_nsec); memcpy(&outpack[8], &tv64, sizeof(tv64)); } @@ -703,8 +709,10 @@ pr_pack(char *buf, int cc, struct sockad timinginfo++; pkttime = (char *)icp->icmp_data; memcpy(&tv64, pkttime, sizeof(tv64)); - tp.tv_sec = betoh64(tv64.tv64_sec); - tp.tv_nsec = betoh64(tv64.tv64_nsec); + tp.tv_sec = betoh64(tv64.tv64_sec) ^ + tv64_offset.tv64_sec; + tp.tv_nsec = betoh64(tv64.tv64_nsec) ^ + tv64_offset.tv64_nsec; timespecsub(&ts, &tp, &ts); triptime = (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000);