diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2009-04-22 07:42:18 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2009-04-22 07:42:18 +0000 |
commit | 1d5ba041baa7f0924446ec8615ed568eb895fb45 (patch) | |
tree | 0aa3d9f173c5d945e40775eaa02624a7555fcf3d /usr.sbin/ntpd/client.c | |
parent | 751db947d0ffdea38adb7931a5a93702b258abfa (diff) |
ignore replies with timestamps after 2030 to prevent time_t / tv_sec wraps
input & ok theo
Diffstat (limited to 'usr.sbin/ntpd/client.c')
-rw-r--r-- | usr.sbin/ntpd/client.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/usr.sbin/ntpd/client.c b/usr.sbin/ntpd/client.c index 19c15e00d16..0d29878dbbf 100644 --- a/usr.sbin/ntpd/client.c +++ b/usr.sbin/ntpd/client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: client.c,v 1.84 2009/03/04 19:17:36 stevesk Exp $ */ +/* $OpenBSD: client.c,v 1.85 2009/04/22 07:42:17 henning Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -256,6 +256,16 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) T2 = lfp_to_d(msg.rectime); T3 = lfp_to_d(msg.xmttime); + /* + * XXX workaround: time_t / tv_sec must never wrap. + * around 2020 we will need a solution (64bit time_t / tv_sec). + * consider every answer with a timestamp beyond january 2030 bogus. + */ + if (T2 > JAN_2030 || T3 > JAN_2030) { + set_next(p, error_interval()); + return (0); + } + p->reply[p->shift].offset = ((T2 - T1) + (T3 - T4)) / 2; p->reply[p->shift].delay = (T4 - T1) - (T3 - T2); if (p->reply[p->shift].delay < 0) { |