]> git.proxmox.com Git - ovs.git/commitdiff
netdev-dpdk: Avoid undefined behavior processing devargs
authorAaron Conole <aconole@redhat.com>
Thu, 9 Jan 2020 18:27:06 +0000 (13:27 -0500)
committerIan Stokes <ian.stokes@intel.com>
Mon, 13 Jan 2020 16:35:21 +0000 (16:35 +0000)
In "Use of library functions" in the C standard, the following statement
is written to apply to all library functions:

  If an argument to a function has an invalid value (such as ... a
  null pointer ... the behavior is undefined.

Later, under the "String handling" section, "Comparison functions" no
exception is listed for strcmp, which means NULL is invalid.  It may
be possible for the smap_get to return NULL.

Given the above, we must check that new_devargs is not null.  The check
against NULL for new_devargs later in the function is still valid.

Fixes: 55e075e65ef9 ("netdev-dpdk: Arbitrary 'dpdk' port naming")
Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Ciara Loftus <ciara.loftus@intel.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
lib/netdev-dpdk.c

index 8198a0b7dbddd2ff099642c8fca312425d013637..f439fad26d17ee54588099ace73d1a850b41565e 100644 (file)
@@ -1855,7 +1855,7 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args,
 
     new_devargs = smap_get(args, "dpdk-devargs");
 
-    if (dev->devargs && strcmp(new_devargs, dev->devargs)) {
+    if (dev->devargs && new_devargs && strcmp(new_devargs, dev->devargs)) {
         /* The user requested a new device.  If we return error, the caller
          * will delete this netdev and try to recreate it. */
         err = EAGAIN;