summaryrefslogtreecommitdiff
path: root/sntp/networking.c
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/networking.c')
-rw-r--r--sntp/networking.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/sntp/networking.c b/sntp/networking.c
index 75c2f71..bef7352 100644
--- a/sntp/networking.c
+++ b/sntp/networking.c
@@ -80,7 +80,7 @@ skip_efields(
while ((tail - head) > 6) {
nlen = ntohl(*head++) & 0xffff;
nlen = (nlen + 3) >> 2;
- if (nlen > (tail - head) || nlen < 4)
+ if (nlen > (u_int)(tail - head) || nlen < 4)
return NULL; /* Blooper! Inconsistent! */
head += nlen;
}
@@ -129,8 +129,7 @@ process_pkt (
* extension field is present, so we subtract the length of the
* field and go around again.
*/
- if (pkt_len < LEN_PKT_NOMAC || (pkt_len & 3) != 0) {
-unusable:
+ if (pkt_len < (int)LEN_PKT_NOMAC || (pkt_len & 3) != 0) {
msyslog(LOG_ERR,
"%s: Incredible packet length: %d. Discarding.",
func_name, pkt_len);
@@ -139,8 +138,12 @@ unusable:
/* Note: pkt_len must be a multiple of 4 at this point! */
packet_end = (u_int32*)((char*)rpkt + pkt_len);
exten_end = skip_efields(rpkt->exten, packet_end);
- if (NULL == exten_end)
- goto unusable;
+ if (NULL == exten_end) {
+ msyslog(LOG_ERR,
+ "%s: Missing extension field. Discarding.",
+ func_name);
+ return PACKET_UNUSEABLE;
+ }
/* get size of MAC in cells; can be zero */
exten_len = (u_int)(packet_end - exten_end);
@@ -156,7 +159,10 @@ unusable:
break;
case 3: /* key ID + 3DES MAC -- unsupported! */
- goto unusable;
+ msyslog(LOG_ERR,
+ "%s: Key ID + 3DES MAC is unsupported. Discarding.",
+ func_name);
+ return PACKET_UNUSEABLE;
case 5: /* key ID + MD5 MAC */
case 6: /* key ID + SHA MAC */
@@ -190,7 +196,10 @@ unusable:
break;
default:
- goto unusable;
+ msyslog(LOG_ERR,
+ "%s: Unexpected extension length: %d. Discarding.",
+ func_name, exten_len);
+ return PACKET_UNUSEABLE;
}
switch (is_authentic) {