Skip to content

Commit ed85935

Browse files
shemmingergregkh
authored andcommitted
hv_netvsc: filter multicast/broadcast
[ Upstream commit 009f766 ] The netvsc driver was always enabling all multicast and broadcast even if netdevice flag had not enabled it. Signed-off-by: Stephen Hemminger <[email protected]> Signed-off-by: David S. Miller <[email protected]> Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent c039c53 commit ed85935

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

drivers/net/hyperv/rndis_filter.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -850,15 +850,19 @@ static void rndis_set_multicast(struct work_struct *w)
850850
{
851851
struct rndis_device *rdev
852852
= container_of(w, struct rndis_device, mcast_work);
853+
u32 filter = NDIS_PACKET_TYPE_DIRECTED;
854+
unsigned int flags = rdev->ndev->flags;
853855

854-
if (rdev->ndev->flags & IFF_PROMISC)
855-
rndis_filter_set_packet_filter(rdev,
856-
NDIS_PACKET_TYPE_PROMISCUOUS);
857-
else
858-
rndis_filter_set_packet_filter(rdev,
859-
NDIS_PACKET_TYPE_BROADCAST |
860-
NDIS_PACKET_TYPE_ALL_MULTICAST |
861-
NDIS_PACKET_TYPE_DIRECTED);
856+
if (flags & IFF_PROMISC) {
857+
filter = NDIS_PACKET_TYPE_PROMISCUOUS;
858+
} else {
859+
if (flags & IFF_ALLMULTI)
860+
flags |= NDIS_PACKET_TYPE_ALL_MULTICAST;
861+
if (flags & IFF_BROADCAST)
862+
flags |= NDIS_PACKET_TYPE_BROADCAST;
863+
}
864+
865+
rndis_filter_set_packet_filter(rdev, filter);
862866
}
863867

864868
void rndis_filter_update(struct netvsc_device *nvdev)

0 commit comments

Comments
 (0)