[ovs-dev] [PATCH v8 11/16] ofproto: Add group desc and stats tests

Ben Pfaff blp at nicira.com
Sun Nov 3 00:56:09 UTC 2013


On Wed, Oct 30, 2013 at 06:17:15PM +0900, Simon Horman wrote:
> Lightly exercise group desc and stats
> 
> Signed-off-by: Simon Horman <horms at verge.net.au>

I was just thinking that we needed some tests here.

These tests revealed an actual bug, by segfaulting.  Running under
valgrind, I found the problem and folded in the following bug fixes:

diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c
index 9e5a18c..915dc90 100644
--- a/lib/ofp-parse.c
+++ b/lib/ofp-parse.c
@@ -2332,7 +2332,12 @@ parse_ofp_group_mod_file(const char *file_name, uint16_t command,
         char *error;
 
         if (*n_gms >= allocated_gms) {
+            size_t i;
+
             *gms = x2nrealloc(*gms, &allocated_gms, sizeof **gms);
+            for (i = 0; i < *n_gms; i++) {
+                list_moved(&(*gms)[i].buckets);
+            }
         }
         error = parse_ofp_group_mod_str(&(*gms)[*n_gms], command, ds_cstr(&s),
                                         &usable);
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 4109e1b..9645e04 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -6162,11 +6162,11 @@ ofputil_encode_group_mod(enum ofp_version ofp_version,
     case OFP13_VERSION: {
         b = ofpraw_alloc(OFPRAW_OFPT11_GROUP_MOD, ofp_version, 0);
         start_ogm = b->size;
-        ofpbuf_put_uninit(b, sizeof *ogm);
+        ofpbuf_put_zeros(b, sizeof *ogm);
 
         LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
             start_bucket = b->size;
-            ofpbuf_put_uninit(b, sizeof *ob);
+            ofpbuf_put_zeros(b, sizeof *ob);
             if (bucket->ofpacts && bucket->ofpacts_len) {
                 ofpacts_put_openflow_actions(bucket->ofpacts,
                                              bucket->ofpacts_len, b,
@@ -6181,7 +6181,6 @@ ofputil_encode_group_mod(enum ofp_version ofp_version,
         ogm = ofpbuf_at_assert(b, start_ogm, sizeof *ogm);
         ogm->command = htons(gm->command);
         ogm->type = gm->type;
-        ogm->pad = 0;
         ogm->group_id = htonl(gm->group_id);
 
         break;



More information about the dev mailing list