From 79feb7dfc714780ba86de73d42fe366e45e22b05 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 8 Aug 2011 16:01:05 -0700 Subject: [PATCH] ofproto-dpif: Fix pointer arithmetic on null pointer. rule_dpif_lookup() can return a null pointer as 'rule' so we shouldn't try to calculate '&rule->up' before it's been found to be nonnull. This doesn't appear to fix a real bug because 'up' is the first member of 'rule' so when rule is NULL then &rule->up is also NULL. Reported-by: Ethan Jackson --- ofproto/ofproto-dpif.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 2aea4e11..4cad7af0 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -3920,7 +3920,7 @@ struct ofproto_trace { }; static void -trace_format_rule(struct ds *result, int level, const struct rule *rule) +trace_format_rule(struct ds *result, int level, const struct rule_dpif *rule) { ds_put_char_multiple(result, '\t', level); if (!rule) { @@ -3929,13 +3929,13 @@ trace_format_rule(struct ds *result, int level, const struct rule *rule) } ds_put_format(result, "Rule: cookie=%#"PRIx64" ", - ntohll(rule->flow_cookie)); - cls_rule_format(&rule->cr, result); + ntohll(rule->up.flow_cookie)); + cls_rule_format(&rule->up.cr, result); ds_put_char(result, '\n'); ds_put_char_multiple(result, '\t', level); ds_put_cstr(result, "OpenFlow "); - ofp_print_actions(result, rule->actions, rule->n_actions); + ofp_print_actions(result, rule->up.actions, rule->up.n_actions); ds_put_char(result, '\n'); } @@ -3962,7 +3962,7 @@ trace_resubmit(struct action_xlate_ctx *ctx, struct rule_dpif *rule) ds_put_char(result, '\n'); trace_format_flow(result, ctx->recurse + 1, "Resubmitted flow", trace); - trace_format_rule(result, ctx->recurse + 1, &rule->up); + trace_format_rule(result, ctx->recurse + 1, rule); } static void @@ -4050,7 +4050,7 @@ ofproto_unixctl_trace(struct unixctl_conn *conn, const char *args_, ds_put_char(&result, '\n'); rule = rule_dpif_lookup(ofproto, &flow); - trace_format_rule(&result, 0, &rule->up); + trace_format_rule(&result, 0, rule); if (rule) { struct ofproto_trace trace; struct ofpbuf *odp_actions; -- 2.30.2