diff options
author | Cy Schubert <cy@FreeBSD.org> | 2014-12-20 22:52:39 +0000 |
---|---|---|
committer | Cy Schubert <cy@FreeBSD.org> | 2014-12-20 22:52:39 +0000 |
commit | b5e14a1344528861a7016aa2c6b0f2e9630d1526 (patch) | |
tree | f04bed14f7e8aed5c0e9d2f7785175c7951036d3 /ntpd/refclock_hopfser.c | |
parent | 2b45e011ca352ce509bc83ae148230aeee0c7e0d (diff) | |
download | src-b5e14a1344528861a7016aa2c6b0f2e9630d1526.tar.gz src-b5e14a1344528861a7016aa2c6b0f2e9630d1526.zip |
Vendor import ntp 4.2.8.vendor/ntp/4.2.8
Reviewed by: roberto
Security: VUXML: 4033d826-87dd-11e4-9079-3c970e169bc2
Security: http://www.kb.cert.org/vuls/id/852879
Security: CVE-2014-9293
Security CVE-2014-9294
Security CVE-2014-9295
Security CVE-2014-9296
Notes
Notes:
svn path=/vendor/ntp/dist/; revision=275970
svn path=/vendor/ntp/4.2.8/; revision=275971; tag=vendor/ntp/4.2.8
Diffstat (limited to 'ntpd/refclock_hopfser.c')
-rw-r--r-- | ntpd/refclock_hopfser.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/ntpd/refclock_hopfser.c b/ntpd/refclock_hopfser.c index 48eea0022bb7..dae8b3761779 100644 --- a/ntpd/refclock_hopfser.c +++ b/ntpd/refclock_hopfser.c @@ -146,12 +146,11 @@ hopfserial_start ( /* * Allocate and initialize unit structure */ - up = emalloc(sizeof(*up)); - memset(up, 0, sizeof(*up)); + up = emalloc_zero(sizeof(*up)); pp = peer->procptr; - pp->unitptr = (caddr_t)up; + pp->unitptr = up; pp->io.clock_recv = hopfserial_receive; - pp->io.srcclock = (caddr_t)peer; + pp->io.srcclock = peer; pp->io.datalen = 0; pp->io.fd = fd; if (!io_addclock(&pp->io)) { @@ -170,7 +169,6 @@ hopfserial_start ( */ pp->clockdesc = DESCRIPTION; peer->precision = PRECISION; - peer->burst = NSTAGE; memcpy((char *)&pp->refid, REFID, 4); up->leap_status = 0; @@ -193,7 +191,7 @@ hopfserial_shutdown ( struct refclockproc *pp; pp = peer->procptr; - up = (struct hopfclock_unit *)pp->unitptr; + up = pp->unitptr; if (-1 != pp->io.fd) io_closeclock(&pp->io); @@ -216,30 +214,31 @@ hopfserial_receive ( struct refclockproc *pp; struct peer *peer; - int synch; /* synchhronization indicator */ - int DoW; /* Dow */ + int synch; /* synchhronization indicator */ + int DoW; /* Day of Week */ int day, month; /* ddd conversion */ + int converted; /* * Initialize pointers and read the timecode and timestamp. */ - peer = (struct peer *)rbufp->recv_srcclock; + peer = rbufp->recv_peer; pp = peer->procptr; - up = (struct hopfclock_unit *)pp->unitptr; + up = pp->unitptr; if (up->rpt_next == 0 ) return; - up->rpt_next = 0; /* wait until next poll interval occur */ - pp->lencode = (u_short)refclock_gtlin(rbufp, pp->a_lastcode, BMAX, &pp->lastrec); - - if (pp->lencode == 0) + pp->lencode = (u_short)refclock_gtlin(rbufp, pp->a_lastcode, + sizeof(pp->a_lastcode), + &pp->lastrec); + if (pp->lencode == 0) return; - sscanf(pp->a_lastcode, + converted = sscanf(pp->a_lastcode, #if 1 "%1x%1x%2d%2d%2d%2d%2d%2d", /* ...cr,lf */ #else @@ -259,9 +258,9 @@ hopfserial_receive ( Validate received values at least enough to prevent internal array-bounds problems, etc. */ - if((pp->hour < 0) || (pp->hour > 23) || - (pp->minute < 0) || (pp->minute > 59) || - (pp->second < 0) || (pp->second > 60) /*Allow for leap seconds.*/ || + if ((8 != converted) || (pp->hour < 0) || (pp->hour > 23) || + (pp->minute < 0) || (pp->minute > 59) || (pp->second < 0) || + (pp->second > 60) /*Allow for leap seconds.*/ || (day < 1) || (day > 31) || (month < 1) || (month > 12) || (pp->year < 0) || (pp->year > 99)) { @@ -356,7 +355,7 @@ hopfserial_poll ( struct refclockproc *pp; pp = peer->procptr; - up = (struct hopfclock_unit *)pp->unitptr; + up = pp->unitptr; pp->polls++; up->rpt_next = 1; |