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:21:45 +0000 (16:21 -0800)
commitcdf81c5aa6c081df34a933c1947c08c591481663
treee93cf106cde15fb2767f2845eaf91c0cb9713a94
parent5c1796977b2cae7a47643a67cb855c87da0df2ff
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