Bug 1643065
| Summary: | [OVS 2.10] ofproto-dpif-xlate: Avoid deadlock on multicast snooping recursion. | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Flavio Leitner <fleitner> | |
| Component: | openvswitch2.10 | Assignee: | Timothy Redaelli <tredaelli> | |
| Status: | CLOSED ERRATA | QA Contact: | Rick Alongi <ralongi> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | high | |||
| Version: | 7.5 | CC: | aguetta, amuller, apevec, atelang, atragler, bshephar, chrisw, ctrautma, fleitner, igkioka, ovs-team, qding, ragiman, ralongi, rhos-maint, tredaelli | |
| Target Milestone: | rc | |||
| Target Release: | --- | |||
| Hardware: | All | |||
| OS: | Linux | |||
| Whiteboard: | ||||
| Fixed In Version: | openvswitch2.10-2.10.0-25.el7fdn | Doc Type: | Bug Fix | |
| Doc Text: |
Consequence:
Open vSwitch goes into deadlocked state when receiving an ICMPv6 multicast listener report v2 packet on a system port and trying to send it back on the IN_PORT after modifying the VLAN tag
Fix:
This patch fixes the problem, by releasing the read-lock before doing any outputs.
|
Story Points: | --- | |
| Clone Of: | 1640875 | |||
| : | 1643071 (view as bug list) | Environment: | ||
| Last Closed: | 2019-01-07 08:51:12 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
|
Description
Flavio Leitner
2018-10-25 12:54:34 UTC
*** Bug 1640930 has been marked as a duplicate of this bug. *** SanityOnly verification:
[ralongi@ralongi openvswitch2.10]$ rhpkg switch-branch fast-datapath-rhel-7
Switched to branch 'fast-datapath-rhel-7'
[ralongi@ralongi openvswitch2.10]$ git log --oneline --grep=1643065
80be318 Rebase to openvswitch2.10-2.10.0-28.el7fdn
[ralongi@ralongi openvswitch2.10]$ git show 80be318
.....
commit 97ee068715c1597f430ba8f664917c306628aeb5
Author: Timothy Redaelli <tredaelli>
Date: Tue Nov 6 15:22:36 2018 +0100
Backport "ofproto-dpif-xlate: Avoid deadlock on multicast snooping recursion"
Resolves: #1643065
.....
[ralongi@ralongi openvswitch2.10]$ git show 80be318 | grep snoop
Backport "ofproto-dpif-xlate: Avoid deadlock on multicast snooping recursion"
diff --git a/0001-ofproto-dpif-xlate-Avoid-deadlock-on-multicast-snoop.patch b/0001-ofproto-dpif-xlate-Avoid-deadlock-on-multicast-snoop.patch
+++ b/0001-ofproto-dpif-xlate-Avoid-deadlock-on-multicast-snoop.patch
+Subject: [PATCH] ofproto-dpif-xlate: Avoid deadlock on multicast snooping
+Until now, OVS did multicast snooping outputs holding the read-lock on
+the mcast_snooping object. This could recurse via a patch port to try to
+It would probably be better to use RCU for mcast_snooping. That would be
+@@ -2662,6 +2664,53 @@ update_mcast_snooping_table(const struct xlate_ctx *ctx,
++ * mcast_snooping's rwlock for reading to iterate through the port lists and
++ * same mcast_snooping and attempt to take the write lock (see
+ struct mcast_snooping *ms OVS_UNUSED,
+ struct mcast_snooping *ms,
+ struct mcast_snooping *ms,
+ struct mcast_snooping *ms,
+ if (mcast_snooping_is_membership(flow->tp_src)) {
+ /* RFC4541: section 2.1.1, item 1: A snooping switch should
+ grp = mcast_snooping_lookup4(ms, flow->nw_dst, vlan);
+ grp = mcast_snooping_lookup(ms, &flow->ipv6_dst, vlan);
+ if (mcast_snooping_flood_unreg(ms)) {
+Patch170: 0001-ofproto-dpif-xlate-Avoid-deadlock-on-multicast-snoop.patch
+- Backport "ofproto-dpif-xlate: Avoid deadlock on multicast snooping recursion" (#1643065
Regression test job link: https://beaker.engineering.redhat.com/jobs/3119375
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2019:0029 |