summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2021-08-10 19:21:19 -0400
committerDonald Sharp <sharpd@nvidia.com>2021-09-14 13:07:06 -0400
commitcf680c38a91f92f3389c08b947faa37a16f08076 (patch)
tree20567c2166e495916b5a3d0a3c1ea6bd0c1c891d
parent2a8ded2b97b578a98ce4805d2d57e785f2acd0ac (diff)
ospfd: Ensure we have some non header lsa data
In some cases FRR is receiving a lsa data packet with a length set to the length of the header only. If we are expecting data from a peer in the form of lsa data. Let's enforce it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
-rw-r--r--ospfd/ospf_opaque.h2
-rw-r--r--ospfd/ospf_packet.c6
2 files changed, 5 insertions, 3 deletions
diff --git a/ospfd/ospf_opaque.h b/ospfd/ospf_opaque.h
index 7d401c3dcc..aeaeea9189 100644
--- a/ospfd/ospf_opaque.h
+++ b/ospfd/ospf_opaque.h
@@ -77,6 +77,8 @@
#define OPAQUE_TYPE_RANGE_RESERVED(type) (127 < (type) && (type) <= 255)
+#define OSPF_OPAQUE_LSA_MIN_SIZE 4U
+
#define VALID_OPAQUE_INFO_LEN(lsahdr) \
((ntohs((lsahdr)->length) >= sizeof(struct lsa_header)) \
&& ((ntohs((lsahdr)->length) < OSPF_MAX_LSA_SIZE)) \
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 1efdfee3b4..7c32c18d4c 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -108,9 +108,9 @@ static const uint16_t ospf_lsa_minlen[] = {
0,
OSPF_AS_EXTERNAL_LSA_MIN_SIZE,
0,
- 0,
- 0,
- 0,
+ OSPF_OPAQUE_LSA_MIN_SIZE,
+ OSPF_OPAQUE_LSA_MIN_SIZE,
+ OSPF_OPAQUE_LSA_MIN_SIZE,
};
/* for ospf_check_auth() */