[ovs-dev] [PATCH 2/4] expr: Fix abort when simplifying "x != 0/0".

Ben Pfaff blp at ovn.org
Fri Oct 7 03:30:37 UTC 2016


The test added by this commit is very specific to the particular problem,
whereas a more general test would be better.  A later commit adds the
general test.

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 ovn/lib/expr.c | 11 ++++++++++-
 tests/ovn.at   |  2 ++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/ovn/lib/expr.c b/ovn/lib/expr.c
index a5dbcfa..a197474 100644
--- a/ovn/lib/expr.c
+++ b/ovn/lib/expr.c
@@ -1702,7 +1702,16 @@ expr_simplify_ne(struct expr *expr)
 
         new = expr_combine(EXPR_T_OR, new, e);
     }
-    ovs_assert(new);
+    if (!new) {
+        /* Handle a comparison like "ip4.dst != 0/0", where the mask has no
+         * 1-bits.
+         *
+         * The correct result for this expression may not be obvious.  It's
+         * easier to understand that "ip4.dst == 0/0" should be true, since 0/0
+         * matches every IPv4 address; then, "ip4.dst != 0/0" should have the
+         * opposite result. */
+        new = expr_create_boolean(false);
+    }
 
     expr_destroy(expr);
 
diff --git a/tests/ovn.at b/tests/ovn.at
index b2808e2..47153a4 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -431,6 +431,8 @@ simplify() {
 }
 AT_CHECK([simplify 'eth.dst == 0/0'], [0], [1
 ])
+AT_CHECK([simplify 'eth.dst != 0/0'], [0], [0
+])
 AT_CLEANUP
 
 AT_SETUP([ovn -- 4-term numeric expression normalization])
-- 
2.1.3




More information about the dev mailing list