0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Merge branch 'master' into mq-page-alloc

This commit is contained in:
Maria Matejka 2020-08-31 15:43:33 +02:00
commit f1065e3936
2 changed files with 21 additions and 5 deletions

View File

@ -14,6 +14,14 @@
#include "lib/mac.h" #include "lib/mac.h"
#include "lib/socket.h" #include "lib/socket.h"
const char * const ospf_pkt_names[] = {
[HELLO_P] = "HELLO",
[DBDES_P] = "DBDES",
[LSREQ_P] = "LSREQ",
[LSUPD_P] = "LSUPD",
[LSACK_P] = "LSACK",
};
void void
ospf_pkt_fill_hdr(struct ospf_iface *ifa, void *buf, u8 h_type) ospf_pkt_fill_hdr(struct ospf_iface *ifa, void *buf, u8 h_type)
{ {
@ -550,6 +558,10 @@ found:
if (rid == 0) if (rid == 0)
DROP1("zero router ID"); DROP1("zero router ID");
/* Check packet type here, ospf_pkt_checkauth3() expects valid values */
if (pkt->type < HELLO_P || pkt->type > LSACK_P)
DROP("invalid packet type", pkt->type);
/* In OSPFv2, neighbors are identified by either IP or Router ID, based on network type */ /* In OSPFv2, neighbors are identified by either IP or Router ID, based on network type */
uint t = ifa->type; uint t = ifa->type;
struct ospf_neighbor *n; struct ospf_neighbor *n;
@ -565,11 +577,15 @@ found:
return 1; return 1;
} }
/* Check packet type here, ospf_pkt_checkauth3() expects valid values */ /* We need to ignore out-of-state packets before ospf_pkt_checkauth3() */
if (pkt->type < HELLO_P || pkt->type > LSACK_P) if ((pkt->type > DBDES_P) && (n->state < NEIGHBOR_EXCHANGE))
DROP("invalid packet type", pkt->type); {
OSPF_TRACE(D_PACKETS, "%s packet ignored - lesser state than Exchange",
ospf_pkt_names[pkt->type]);
return 1;
}
/* ospf_pkt_checkauth() has its own error logging */ /* ospf_pkt_checkauthX() has its own error logging */
if ((ospf_is_v2(p) ? if ((ospf_is_v2(p) ?
!ospf_pkt_checkauth2(n, ifa, pkt, len) : !ospf_pkt_checkauth2(n, ifa, pkt, len) :
!ospf_pkt_checkauth3(n, ifa, pkt, len, sk->faddr))) !ospf_pkt_checkauth3(n, ifa, pkt, len, sk->faddr)))

View File

@ -335,7 +335,7 @@ ospf_originate_lsa(struct ospf_proto *p, struct ospf_new_lsa *lsa)
* equal to 0 while sizeof(struct ospf_lsa_header) is non-zero. * equal to 0 while sizeof(struct ospf_lsa_header) is non-zero.
* Therefore memcmp() is never executed with NULL here. * Therefore memcmp() is never executed with NULL here.
* */ * */
ASSUME((en->lsa.length == 0) == (en->lsa_body == NULL)); ASSUME(en->lsa.age >= LSA_MAXAGE || (en->lsa.length == 0) == (en->lsa_body == NULL));
/* Ignore the the new LSA if is the same as the current one */ /* Ignore the the new LSA if is the same as the current one */
if ((en->lsa.age < LSA_MAXAGE) && if ((en->lsa.age < LSA_MAXAGE) &&