dpif-linux: Zero 'stats' outputs of dpif_operate() ops on failure.
authorBen Pfaff <blp@nicira.com>
Wed, 20 Jun 2012 17:55:41 +0000 (10:55 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 25 Jun 2012 23:47:21 +0000 (16:47 -0700)
commitcfceb2b57a3872a45609e9105f54e0b719bd5ee2
tree5397dba0ab4d97aea199996a38047bddaed9dda6
parent74e60d69adf697e8167a1d1c4d29700ccbe3ee31
dpif-linux: Zero 'stats' outputs of dpif_operate() ops on failure.

When DPIF_OP_FLOW_PUT or DPIF_OP_FLOW_DEL operations failed, they left
their 'stats' outputs uninitialized.  For DPIF_OP_FLOW_DEL, this meant that
the caller would read indeterminate data:

Conditional jump or move depends on uninitialised value(s)
   at 0x805C1EB: subfacet_reset_dp_stats (ofproto-dpif.c:4410)
    by 0x80637D2: expire_batch (ofproto-dpif.c:3471)
    by 0x8066114: run (ofproto-dpif.c:3513)
    by 0x8059DF4: ofproto_run (ofproto.c:1035)
    by 0x8052E17: bridge_run (bridge.c:2005)
    by 0x8053F74: main (ovs-vswitchd.c:108)

It's unusual for a delete operation to fail.  The most common reason is an
administrator running "ovs-dpctl del-flows".

The only user of DPIF_OP_FLOW_PUT did not request stats, so this doesn't
fix an actual bug for that case.

Bug #11797.
Reported-by: James Schmidt <jschmidt@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/dpif-linux.c