[ovs-dev] [PATCH] ofproto-dpif-xlate: fix crash when using multicast snooping
Aaron Conole
aconole at redhat.com
Wed Feb 17 15:24:14 UTC 2016
Greetings Thadeu,
Thadeu Lima de Souza Cascardo <cascardo at 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.
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?).
Thanks,
Aaron
> Not-Signed-off-yet: Thadeu Lima de Souza Cascardo <cascardo at redhat.com>
> Reported-by: Yi Ba <yby.developer at yahoo.com>
> Reported-at: http://openvswitch.org/pipermail/discuss/2016-January/020023.html
> Fixes: 06994f879c9d ("mcast-snooping: Add Multicast Listener Discovery support")
> ---
>
> Hi, Yi Ba.
>
> Can you test this patch for your mcast_snooping bug? Remember to enable
> OVS_ENABLE_SG_FIREWALL_MULTICAST again. In order to verify it's working, you can
> run ovs-vsctl get bridge br-ex mcast_snooping_enable.
>
> Thanks.
> Cascardo.
>
> ---
> AUTHORS | 1 +
> ofproto/ofproto-dpif-xlate.c | 4 ++--
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/AUTHORS b/AUTHORS
> index 936394d..366b72f 100644
> --- a/AUTHORS
> +++ b/AUTHORS
> @@ -412,6 +412,7 @@ Vishal Swarankar vishal.swarnkar at gmail.com
> Vjekoslav Brajkovic balkan at cs.washington.edu
> Voravit T. voravit at kth.se
> Yeming Zhao zhaoyeming at gmail.com
> +Yi Ba yby.developer at yahoo.com
> Ying Chen yingchen at vmware.com
> Yongqiang Liu liuyq7809 at gmail.com
> ZHANG Zhiming zhangzhiming at yunshan.net.cn
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index a6ea067..7195d45 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -2409,7 +2409,7 @@ xlate_normal(struct xlate_ctx *ctx)
> if (is_igmp(flow)) {
> if (mcast_snooping_is_membership(flow->tp_src) ||
> mcast_snooping_is_query(flow->tp_src)) {
> - if (ctx->xin->may_learn) {
> + if (ctx->xin->may_learn && ctx->xin->packet) {
> update_mcast_snooping_table(ctx->xbridge, flow, vlan,
> in_xbundle, ctx->xin->packet);
> }
> @@ -2441,7 +2441,7 @@ xlate_normal(struct xlate_ctx *ctx)
> return;
> } else if (is_mld(flow)) {
> ctx->xout->slow |= SLOW_ACTION;
> - if (ctx->xin->may_learn) {
> + if (ctx->xin->may_learn && ctx->xin->packet) {
> update_mcast_snooping_table(ctx->xbridge, flow, vlan,
> in_xbundle, ctx->xin->packet);
> }
More information about the dev
mailing list