diff --git a/[refs] b/[refs] index a5a8894da844..c2abd3f072d4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 23b904f35128f3c596831cc3320bab1f2db81f60 +refs/heads/master: cfbf84fcbcda98bb91ada683a8dc8e6901a83ebd diff --git a/trunk/drivers/net/tun.c b/trunk/drivers/net/tun.c index d7b81e4fdd56..09fea31d3e36 100644 --- a/trunk/drivers/net/tun.c +++ b/trunk/drivers/net/tun.c @@ -157,10 +157,16 @@ static int update_filter(struct tap_filter *filter, void __user *arg) nexact = n; - /* The rest is hashed */ + /* Remaining multicast addresses are hashed, + * unicast will leave the filter disabled. */ memset(filter->mask, 0, sizeof(filter->mask)); - for (; n < uf.count; n++) + for (; n < uf.count; n++) { + if (!is_multicast_ether_addr(addr[n].u)) { + err = 0; /* no filter */ + goto done; + } addr_hash_set(filter->mask, addr[n].u); + } /* For ALLMULTI just set the mask to all ones. * This overrides the mask populated above. */