bridge: ignore bogus STP config packets
If the message_age is already greater than the max_age, then the BPDU is bogus. Linux won't generate BPDU, but conformance tester or buggy implementation might. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0c03150e7e
commit
0652cac22c
|
@ -210,6 +210,17 @@ void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
|
||||||
bpdu.hello_time = br_get_ticks(buf+28);
|
bpdu.hello_time = br_get_ticks(buf+28);
|
||||||
bpdu.forward_delay = br_get_ticks(buf+30);
|
bpdu.forward_delay = br_get_ticks(buf+30);
|
||||||
|
|
||||||
|
if (bpdu.message_age > bpdu.max_age) {
|
||||||
|
if (net_ratelimit())
|
||||||
|
br_notice(p->br,
|
||||||
|
"port %u config from %pM"
|
||||||
|
" (message_age %ul > max_age %ul)\n",
|
||||||
|
p->port_no,
|
||||||
|
eth_hdr(skb)->h_source,
|
||||||
|
bpdu.message_age, bpdu.max_age);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
br_received_config_bpdu(p, &bpdu);
|
br_received_config_bpdu(p, &bpdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue