diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -546,6 +546,9 @@ /* Discard ICMP's in response to multicast packets */ if (IN_MULTICAST(ntohl(icp->icmp_ip.ip_dst.s_addr))) goto badcode; + /* Filter out responses to INADDR_ANY, protocols ignore it. */ + if (icp->icmp_ip.ip_dst.s_addr == INADDR_ANY) + goto freeit; #ifdef ICMPPRINTFS if (icmpprintfs) printf("deliver to protocol %d\n", icp->icmp_ip.ip_p); diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -272,9 +272,6 @@ struct sctp_init_chunk *ch; struct sockaddr_in src, dst; - if (sin->sin_addr.s_addr == INADDR_ANY) { - return; - } if (PRC_IS_REDIRECT(cmd)) { ip = NULL; } else if ((unsigned)cmd >= PRC_NCMDS || inetctlerrmap[cmd] == 0) { diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -2866,9 +2866,6 @@ tcp_seq icmp_tcp_seq; int mtu; - if (sin->sin_addr.s_addr == INADDR_ANY) - return; - if (cmd == PRC_MSGSIZE) notify = tcp_mtudisc_notify; else if (V_icmp_may_rst && (cmd == PRC_UNREACH_ADMIN_PROHIB || diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -746,9 +746,6 @@ struct udphdr *uh; struct inpcb *inp; - if (sin->sin_addr.s_addr == INADDR_ANY) - return; - if (PRC_IS_REDIRECT(cmd)) { /* signal EHOSTDOWN, as it flushes the cached route */ in_pcbnotifyall(pcbinfo, sin->sin_addr, EHOSTDOWN, udp_notify);