From: Mark Tomlinson <mark.tomlin...@alliedtelesis.co.nz> Date: Thu, 15 Sep 2016 11:40:05 +1200
> The function ip_rcv_finish() calls l3mdev_ip_rcv(). On any VRF except > the global VRF, this replaces skb->dev with the VRF master interface. > When calling ip_route_input_noref() from here, the checks for forwarding > look at this master device instead of the initial ingress interface. > This will allow packets to be routed which normally would be dropped. > For example, an interface that is not assigned an IP address should > drop packets, but because the checking is against the master device, the > packet will be forwarded. > > The fix here is to still call l3mdev_ip_rcv(), but remember the initial > net_device. This is passed to the other functions within ip_rcv_finish, > so they still see the original interface. > > Signed-off-by: Mark Tomlinson <mark.tomlin...@alliedtelesis.co.nz> > Acked-by: David Ahern <d...@cumulusnetworks.com> Applied.