netdev-vport: Fix theoretical null pointer dereference.
authorEthan Jackson <ethan@nicira.com>
Thu, 27 Dec 2012 01:02:08 +0000 (17:02 -0800)
committerEthan Jackson <ethan@nicira.com>
Fri, 4 Jan 2013 00:51:04 +0000 (16:51 -0800)
Theoretically, its possible for netdev_get_status() to be called
on a netdev-vport which hasn't had its configuration set yet.  In
this case, netdev-vport would dereference a null pointer.

Reported-by: Jesse Gross <jesse@nicira.com>
Signed-off-by: Ethan Jackson <ethan@nicira.com>
lib/netdev-vport.c

index e93e5b4..94acd26 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2010, 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -465,6 +465,12 @@ netdev_vport_get_tnl_iface(const struct netdev *netdev)
     static char name[IFNAMSIZ];
 
     ndv = netdev_dev_vport_cast(netdev_get_dev(netdev));
+    if (!ndv->options) {
+        /* Race condition when 'ndv' was created, but did not have its
+         * configuration set yet. */
+        return NULL;
+    }
+
     if (tnl_port_config_from_nlattr(ndv->options->data, ndv->options->size,
                                     a)) {
         return NULL;