]> git.baikalelectronics.ru Git - kernel.git/commit
vlan: don't deliver frames for unknown vlans to protocols
authorFlorian Zumbiehl <florz@florz.de>
Sun, 7 Oct 2012 15:51:58 +0000 (15:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 8 Oct 2012 19:21:55 +0000 (15:21 -0400)
commit6fd6209f353f53f877b49bef4de6b4c28a780789
tree780c4919aeda44d0c6859b840a29847aeb792d1a
parentddcaeb382d87411b7293a5b2f4851c055bee4388
vlan: don't deliver frames for unknown vlans to protocols

c320c33652d2d75613f5c253d8e118f922ec9031 made the vlan code skip marking
vlan-tagged frames for not locally configured vlans as PACKET_OTHERHOST if
there was an rx_handler, as the rx_handler could cause the frame to be received
on a different (virtual) vlan-capable interface where that vlan might be
configured.

As rx_handlers do not necessarily return RX_HANDLER_ANOTHER, this could cause
frames for unknown vlans to be delivered to the protocol stack as if they had
been received untagged.

For example, if an ipv6 router advertisement that's tagged for a locally not
configured vlan is received on an interface with macvlan interfaces attached,
macvlan's rx_handler returns RX_HANDLER_PASS after delivering the frame to the
macvlan interfaces, which caused it to be passed to the protocol stack, leading
to ipv6 addresses for the announced prefix being configured even though those
are completely unusable on the underlying interface.

The fix moves marking as PACKET_OTHERHOST after the rx_handler so the
rx_handler, if there is one, sees the frame unchanged, but afterwards,
before the frame is delivered to the protocol stack, it gets marked whether
there is an rx_handler or not.

Signed-off-by: Florian Zumbiehl <florz@florz.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/if_vlan.h
net/8021q/vlan_core.c
net/core/dev.c