From 33ccf61ef8d219c55777fba032e36c00e26d9182 Mon Sep 17 00:00:00 2001 From: Alex Williamson Date: Sun, 8 Feb 2009 17:49:17 -0800 Subject: [PATCH] --- yaml --- r: 131197 b: refs/heads/master c: cfbf84fcbcda98bb91ada683a8dc8e6901a83ebd h: refs/heads/master i: 131195: f114f6e38b03244432d4570cc3a3a6b8d6c2813c v: v3 --- [refs] | 2 +- trunk/drivers/net/tun.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) 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. */