diff options
| author | Mobashshera Rasool <mrasool@vmware.com> | 2021-09-03 05:10:26 -0700 | 
|---|---|---|
| committer | Mobashshera Rasool <mrasool@vmware.com> | 2021-09-03 06:44:56 -0700 | 
| commit | 3cb62bb387d0630e8b2e3fe053de155563bac077 (patch) | |
| tree | 3bfd80861dee3c0414cb66566a51b97c508ce08c /ospfd/ospf_packet.c | |
| parent | 44d1115ad6e7c01090d95480a27bd4484c91ffc5 (diff) | |
ospfd: RFC conformance test case 25.23 issue fix
Problem Statement :
===================
LSA with InitialSequenceNumber is not originated
after MaxSequenceNumber.
ANVL Test case 25.33 states:
============================
As soon as this flooding of a LSA with LS sequence number
MaxSequenceNumber has been acknowledged by all adjacent neighbors,
a new instance can be originated with sequence number of InitialSequenceNumber.
RCA :
=====
DUT did not originated LSA with INITIAL_SEQUENCE number even
after receiving ACK for max sequence LSA.
Code is not present to handle this situation in the lsa ack flow.
Fix :
=====
Add code to originate LSA with initial sequence number in the
LSA ack flow in case of wrap around sequence number.
Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'ospfd/ospf_packet.c')
| -rw-r--r-- | ospfd/ospf_packet.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index 8a76e265bc..000bbadc54 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -2090,8 +2090,7 @@ static void ospf_ls_upd(struct ospf *ospf, struct ip *iph,  		    || (ret = ospf_lsa_more_recent(current, lsa)) < 0) {  			/* CVE-2017-3224 */  			if (current && (IS_LSA_MAX_SEQ(current)) -				&& (IS_LSA_MAX_SEQ(lsa)) -				&& !IS_LSA_MAXAGE(lsa)) { +			    && (IS_LSA_MAX_SEQ(lsa)) && !IS_LSA_MAXAGE(lsa)) {  				zlog_debug(  					"Link State Update[%s]: has Max Seq and higher checksum but not MaxAge. Dropping it",  					dump_lsa_key(lsa)); @@ -2271,8 +2270,10 @@ static void ospf_ls_ack(struct ip *iph, struct ospf_header *ospfh,  		lsr = ospf_ls_retransmit_lookup(nbr, lsa); -		if (lsr != NULL && ospf_lsa_more_recent(lsr, lsa) == 0) +		if (lsr != NULL && ospf_lsa_more_recent(lsr, lsa) == 0) {  			ospf_ls_retransmit_delete(nbr, lsr); +			ospf_check_and_gen_init_seq_lsa(oi, lsa); +		}  		lsa->data = NULL;  		ospf_lsa_discard(lsa);  | 
