dpif-netdev: Avoid using uninitialized memory with tunnel options.
authorJesse Gross <jesse@kernel.org>
Wed, 9 Dec 2015 20:55:17 +0000 (12:55 -0800)
committerJesse Gross <jesse@kernel.org>
Wed, 23 Dec 2015 00:20:57 +0000 (16:20 -0800)
commit3f32cfebcbad9a15e89014b4bbfa308d99d209fd
treed9b0015a6a1c6a5b4c7004643db8e2ac4705ca74
parentf6bf8880613aaaf547409e9282b675ad2d85c6ba
dpif-netdev: Avoid using uninitialized memory with tunnel options.

When handling an upcall with the userspace datapath, it's currently
possible for a flow from a packet with no tunnel options to come back
with matches on the options. If that happens, dpif-netdev will
attempt to translate the wildcards provided by ofproto into the format
used by dpif. The translation requires use of the original wildcards
from the flow, which since they didn't exist, is uninitalized memory.

Matching on fields which don't actually exist is itself a bug. However,
this can occur when we attempt to set a tunnel option on the packet -
ofproto generates a match on the field in the original packet. This is
being fixed separately.

In other situations where we have a match on an unexpected field, we
simply ignore it. This happens with tunnel options with the kernel
datapath, non-tunnel fields that don't exist in the packet, and even
with Geneve where we do have some options but not the particular one
that was matched on. This brings the same behavior for this case and
avoids the possibility of accessing uninitialized memory.

Reported-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Jesse Gross <jesse@kernel.org>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
lib/dpif-netdev.c