secchan: Validate subrules before attempting to dereference their super-rules.
authorBen Pfaff <blp@nicira.com>
Fri, 13 Mar 2009 20:17:01 +0000 (13:17 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 13 Mar 2009 20:17:01 +0000 (13:17 -0700)
commit03389e550a4bbdb76ff5a908ac5c7401508ff1d8
treefd05971dff3eb66b687f3b2f7d3f90db845a388e
parent4a33b0f3f6cbca1d5f645ff0e8d09a7ed70a8afe
secchan: Validate subrules before attempting to dereference their super-rules.

rule_make_actions() is supposed to compose the datapath actions for an
exact-match rule, and to do so it needs to look up the super-rule (if the
rule is a subrule).  The "super" pointer might be set to UNKNOWN_SUPER,
though, and before this commit that would cause a segfault.

This commit modifies the callers of rule_make_actions() to ensure that
the rule passed in can never have a "super" of UNKNOWN_SUPER.  In most
cases, this was already impossible (e.g. we're passing in a new rule that
we just added to the table), but in two cases where the rule was obtained
from a bare classifier lookup we needed to validate the rule before
attempting to use it.

Fixes a crash reported by Keith.
secchan/ofproto.c