In ip_forward():
Avoid forwarding ip unicast packets which were contained inside link-level multicast packets; having M_MCAST still set in the packet header flags will mean that the packet will get multicast to a bogus group instead of unicast to the next hop. Malformed packets like this have occasionally been spotted "in the wild" on a mediaone cable modem segment which also had multiple netbsd machines running as router/NAT boxes. Without this, any subnet with multiple netbsd routers receiving all multicasts will generate a packet storm on receipt of such a multicast. Note that we already do the same check here for link-level broadcasts; ip6_forward already does this as well. Note that multicast forwarding does not go through ip_forward(). Adding some code to if_ethersubr to sanity check link-level vs. ip-level multicast addresses might also be worthwhile.
This commit is contained in:
parent
db3b140df8
commit
c2accd9f9c
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ip_input.c,v 1.92 1999/07/23 15:21:17 itojun Exp $ */
|
||||
/* $NetBSD: ip_input.c,v 1.93 1999/10/17 16:00:00 sommerfeld Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||
|
@ -1299,7 +1299,7 @@ ip_forward(m, srcrt)
|
|||
ntohl(ip->ip_src.s_addr),
|
||||
ntohl(ip->ip_dst.s_addr), ip->ip_ttl);
|
||||
#endif
|
||||
if (m->m_flags & M_BCAST || in_canforward(ip->ip_dst) == 0) {
|
||||
if (m->m_flags & (M_BCAST|M_MCAST) || in_canforward(ip->ip_dst) == 0) {
|
||||
ipstat.ips_cantforward++;
|
||||
m_freem(m);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue