--- sys/netinet/in_mcast.c.orig 2009-08-03 08:13:06.000000000 +0000 +++ sys/netinet/in_mcast.c 2009-09-09 01:35:06.000000000 +0000 @@ -1964,4 +1964,8 @@ if (idx == -1) { is_new = 1; + } else if (sopt->sopt_name == IP_ADD_MEMBERSHIP) { + /* Trying to join the same Any-source group again. */ + error = EADDRINUSE; + goto out_inp_locked; } else { inm = imo->imo_membership[idx]; @@ -2139,6 +2143,9 @@ } - if (!in_nullhost(gsa->sin.sin_addr)) + if (!in_nullhost(gsa->sin.sin_addr)) { INADDR_TO_IFP(mreqs.imr_interface, ifp); + if (ifp == NULL) + return (EADDRNOTAVAIL); + } CTR3(KTR_IGMPV3, "%s: imr_interface = %s, ifp = %p",