summaryrefslogtreecommitdiff
path: root/ofproto
diff options
context:
space:
mode:
authorlic121 <lic121@chinatelecom.cn>2022-04-29 07:32:44 +0000
committerIlya Maximets <i.maximets@ovn.org>2022-05-04 21:42:53 +0200
commitdd4d8e34ba5d246112a267e913339d28fb984223 (patch)
treec9858e83a51b89c1cb1842ec3e59d55b15501ba9 /ofproto
parentb91025187b9b1dae7c79a4877fff7573d011b26c (diff)
downloadopenvswitch-dd4d8e34ba5d246112a267e913339d28fb984223.tar.gz
ofproto-dpif-xlate: Remove mirror assert.
During the revalidation/upcall, mirror could be removed. Instead of crash the process, we can simply skip the deleted mirror. The issue had been triggered multiple times by ovs-tcpdump in my test. Fixes: ec7ceaed4f3e ("ofproto-dpif: Modularize mirror code.") Signed-off-by: lic121 <lic121@chinatelecom.cn> Tested-by: Adrian Moreno <amorenoz@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'ofproto')
-rw-r--r--ofproto/ofproto-dpif-xlate.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 17f7e2883..8e5d030ac 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -2142,9 +2142,14 @@ mirror_packet(struct xlate_ctx *ctx, struct xbundle *xbundle,
int snaplen;
/* Get the details of the mirror represented by the rightmost 1-bit. */
- ovs_assert(mirror_get(xbridge->mbridge, raw_ctz(mirrors),
- &vlans, &dup_mirrors,
- &out, &snaplen, &out_vlan));
+ if (OVS_UNLIKELY(!mirror_get(xbridge->mbridge, raw_ctz(mirrors),
+ &vlans, &dup_mirrors,
+ &out, &snaplen, &out_vlan))) {
+ /* The mirror got reconfigured before we got to read it's
+ * configuration. */
+ mirrors = zero_rightmost_1bit(mirrors);
+ continue;
+ }
/* If this mirror selects on the basis of VLAN, and it does not select