On 17 February 2016 at 07:24, Aaron Conole <acon...@redhat.com> wrote:
> Greetings Thadeu,
>
> Thadeu Lima de Souza Cascardo <casca...@redhat.com> writes:
>
>> The revalidator thread may set may_learn and call xlate_actions with no 
>> packet
>> data. If the revalidated flow is IGMPv3 or MLD, vswitchd will crash when 
>> trying
>> to access the NULL packet.
>>
>> Only process IGMP and MLD flows when there is a packet. This is a similar
>> behavior than what we have for other special packets.
>
> Just a question on the approach, would it make sense to check for the
> bundle being null as well? I don't know if the case where packet == NULL
> but bundle != NULL could ever exist so I could be off my rocker.

If you're referring to "in_xbundle", one of the first things that
xlate_normal() does is to ensure it is non-NULL.

> Alternately, maybe it's better to just patch the mcast functions to bail
> early (maybe with a ratelimited warning) in this case, so that if bundle
> != NULL but packet == NULL, some of the mcast group LRU cache can be
> updated? Don't know if that makes sense, either (maybe there's a
> security reason not to do that?).

This codepath shouldn't assume that it has a packet. It is called from
revalidator threads to attribute stats and do side-effects (like
learning, cache refresh). That path doesn't have a copy of a packet to
use for translation. If 'may_learn' is true, it indicates that packets
have hit this flow since the last time stats were attributed, so
learning/cache refresh should occur if applicable. In the case of
special handling of packets which are slowpathed (as indicated by the
"ctx->xout->slow |= SLOW_ACTION" line), it is fine to do nothing when
there is no packet. The slow path handling code will deal with
side-effects.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to