Skip to content

Commit

Permalink
ospfd: fix packet length check for auth/LLS cases
Browse files Browse the repository at this point in the history
An OSPFv2 packet with trailing data blocks (authentication and/or
link-local signaling) failed the recently implemented packet length
check, because trailing data length isn't counted in the packet header
"length" field. This commit fixes respective check conditions.

* ospf_packet.c
  * ospf_packet_examin(): use "bytesdeclared" instead of "bytesonwire"
  • Loading branch information
infrastation authored and eqvinox committed Mar 12, 2012
1 parent 4e31de7 commit b29adf9
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions ospfd/ospf_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -2564,22 +2564,22 @@ ospf_packet_examin (struct ospf_header * oh, const unsigned bytesonwire)
case OSPF_MSG_HELLO:
/* RFC2328 A.3.2, packet header + OSPF_HELLO_MIN_SIZE bytes followed
by N>=0 router-IDs. */
ret = (bytesonwire - OSPF_HEADER_SIZE - OSPF_HELLO_MIN_SIZE) % 4 ? MSG_NG : MSG_OK;
ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_HELLO_MIN_SIZE) % 4 ? MSG_NG : MSG_OK;
break;
case OSPF_MSG_DB_DESC:
/* RFC2328 A.3.3, packet header + OSPF_DB_DESC_MIN_SIZE bytes followed
by N>=0 header-only LSAs. */
ret = ospf_lsaseq_examin
(
(struct lsa_header *) ((caddr_t) oh + OSPF_HEADER_SIZE + OSPF_DB_DESC_MIN_SIZE),
bytesonwire - OSPF_HEADER_SIZE - OSPF_DB_DESC_MIN_SIZE,
bytesdeclared - OSPF_HEADER_SIZE - OSPF_DB_DESC_MIN_SIZE,
1, /* header-only LSAs */
0
);
break;
case OSPF_MSG_LS_REQ:
/* RFC2328 A.3.4, packet header followed by N>=0 12-bytes request blocks. */
ret = (bytesonwire - OSPF_HEADER_SIZE - OSPF_LS_REQ_MIN_SIZE) %
ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_REQ_MIN_SIZE) %
OSPF_LSA_KEY_SIZE ? MSG_NG : MSG_OK;
break;
case OSPF_MSG_LS_UPD:
Expand All @@ -2589,7 +2589,7 @@ ospf_packet_examin (struct ospf_header * oh, const unsigned bytesonwire)
ret = ospf_lsaseq_examin
(
(struct lsa_header *) ((caddr_t) lsupd + OSPF_LS_UPD_MIN_SIZE),
bytesonwire - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
0, /* full LSAs */
ntohl (lsupd->num_lsas) /* 32 bits */
);
Expand All @@ -2599,7 +2599,7 @@ ospf_packet_examin (struct ospf_header * oh, const unsigned bytesonwire)
ret = ospf_lsaseq_examin
(
(struct lsa_header *) ((caddr_t) oh + OSPF_HEADER_SIZE + OSPF_LS_ACK_MIN_SIZE),
bytesonwire - OSPF_HEADER_SIZE - OSPF_LS_ACK_MIN_SIZE,
bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_ACK_MIN_SIZE,
1, /* header-only LSAs */
0
);
Expand Down

0 comments on commit b29adf9

Please sign in to comment.