flow: Fix null pointer dereference in flow_from_match().
authorBen Pfaff <blp@nicira.com>
Wed, 10 Feb 2010 19:09:40 +0000 (11:09 -0800)
committerBen Pfaff <blp@nicira.com>
Thu, 11 Feb 2010 18:33:11 +0000 (10:33 -0800)
Found by Clang (http://clang-analyzer.llvm.org).

lib/flow.c

index 7d4a1bd..bfbd542 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -283,13 +283,14 @@ flow_from_match(flow_t *flow, uint32_t *wildcards,
 {
     if (wildcards) {
         *wildcards = ntohl(match->wildcards);
-    }
-    /* The datapath supports matching on an ARP's opcode and IP addresses, 
-     * but OpenFlow does not.  In case the controller hasn't, we need to 
-     * set the appropriate wildcard bits so that we're externally 
-     * OpenFlow-compliant. */
-    if (match->dl_type == htons(ETH_TYPE_ARP)) {
-        *wildcards |= (OFPFW_NW_PROTO | OFPFW_NW_SRC_ALL | OFPFW_NW_DST_ALL);
+
+        /* The datapath supports matching on an ARP's opcode and IP addresses,
+         * but OpenFlow does not.  In case the controller hasn't, we need to
+         * set the appropriate wildcard bits so that we're externally
+         * OpenFlow-compliant. */
+        if (match->dl_type == htons(ETH_TYPE_ARP)) {
+            *wildcards |= OFPFW_NW_PROTO | OFPFW_NW_SRC_ALL | OFPFW_NW_DST_ALL;
+        }
     }
 
     flow->nw_src = match->nw_src;