flow: Ignore invalid ICMPv6 fields when parsing packets
authorSimon Horman <simon.horman@netronome.com>
Thu, 13 Aug 2015 07:55:32 +0000 (16:55 +0900)
committerJesse Gross <jesse@nicira.com>
Thu, 13 Aug 2015 21:47:37 +0000 (14:47 -0700)
commitcc5dba2f32b12b9e887c94a2dd8a765be1a48818
tree06ecfd7aa4aad756614a1629e211c6a31fd5e4f7
parent43b2f131a229238619ed9ae9ee64092fcae092ca
flow: Ignore invalid ICMPv6 fields when parsing packets

There is a miss-match between the handling of invalid ICMPv6 fields in the
implementations of parse_icmpv6() in user-space and in the kernel datapath.

This patch addresses that by modifying the user-space implementation to
match that of the kernel datapath; processing is terminated without
rather than with an error and partial information is cleared.

With these changes the user-space implementation of parse_icmpv6()
never returns an error. Accordingly the return type and caller have been
updated.

The original motivation for this is to allow matching the ICMPv6 type and
code of packets with invalid neighbour discovery options although only the
change around the '(!opt_len || opt_len > *sizep)' conditional is necessary
to achieve that goal.

Signed-off-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
lib/flow.c