From: Jesse Gross Date: Thu, 19 May 2011 20:17:39 +0000 (-0700) Subject: datapath: Check that netdev vport is fully initialized. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d825e2a5dcc5193067215cbf2466417cebebab9b;p=openvswitch datapath: Check that netdev vport is fully initialized. Starting in 2.6.37 we have our own flag for identifying net_devices as being attached to OVS. However, it's possible to receive packets before this flag has been applied, resulting in a NULL vport when processing the packet. This checks to make sure that the vport is valid instead of crashing. Bug #5675 Reported-by: Brad Hall Signed-off-by: Jesse Gross Acked-by: Ben Pfaff --- diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c index 18fc5fee..3bab666c 100644 --- a/datapath/vport-netdev.c +++ b/datapath/vport-netdev.c @@ -268,6 +268,11 @@ int netdev_get_mtu(const struct vport *vport) /* Must be called with rcu_read_lock. */ static void netdev_port_receive(struct vport *vport, struct sk_buff *skb) { + if (unlikely(!vport)) { + kfree_skb(skb); + return; + } + /* Make our own copy of the packet. Otherwise we will mangle the * packet for anyone who came before us (e.g. tcpdump via AF_PACKET). * (No one comes after us, since we tell handle_bridge() that we took