ntpd: fix incorrect m_status field in outgoing packets. Closes 5120
authorPaul Marks <paul@pmarks.net>
Mon, 14 Jan 2013 01:39:10 +0000 (02:39 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 Jan 2013 01:39:10 +0000 (02:39 +0100)
When using busybox ntpd with an NTPv3 client and NTPv4 server (or vice
versa), the version numbers can be incorrectly ORed together, yielding
the bogus value of "NTPv7".  This makes ntpd unusable with clients
such as Chrony and Windows "Internet Time".

This patch avoids the version mangling, by copying only the Leap
Indicator bits from the server's status field.

Signed-off-by: Paul Marks <paul@pmarks.net>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ntpd.c

index 45485c0809b6c48afa7dece2cf82997f50dbcde2..79b7c379361f615c1ab49d106cdec283b527385e 100644 (file)
@@ -1851,7 +1851,7 @@ recv_and_process_client_pkt(void /*int fd*/)
 
        /* Build a reply packet */
        memset(&msg, 0, sizeof(msg));
-       msg.m_status = G.stratum < MAXSTRAT ? G.ntp_status : LI_ALARM;
+       msg.m_status = G.stratum < MAXSTRAT ? (G.ntp_status & LI_MASK) : LI_ALARM;
        msg.m_status |= (query_status & VERSION_MASK);
        msg.m_status |= ((query_status & MODE_MASK) == MODE_CLIENT) ?
                        MODE_SERVER : MODE_SYM_PAS;