summaryrefslogtreecommitdiff
path: root/ovn
diff options
context:
space:
mode:
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>2019-05-15 15:33:08 +0200
committerBen Pfaff <blp@ovn.org>2019-06-07 12:59:49 -0700
commita187bd814adc7f560f0d0524889f2a297caa8abd (patch)
tree6f52217d86d2eee75c320fa79d65a4cbe04859cd /ovn
parent88a28bbe5959a09d99d15ee2e6ee4714f9682ce8 (diff)
downloadopenvswitch-a187bd814adc7f560f0d0524889f2a297caa8abd.tar.gz
ovn: grab pinctrl_mutex before running pinctrl_handle_buffered_packets
pinctrl_handle_buffered_packets can insert new elements in buffered_packets_map hasmap and it runs concurrently with pinctrl_run starting from commit 3594ffab6b4b. Fix possible races grabbing pinctrl_mutex before running pinctrl_handle_buffered_packets Fixes: 3594ffab6b4b ("ovn-controller: Add a new thread in pinctrl module to handle packet-ins.") Acked-by: Han Zhou <hzhou8@ebay.com> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'ovn')
-rw-r--r--ovn/controller/pinctrl.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c
index b7bb4c990..2ecefcf60 100644
--- a/ovn/controller/pinctrl.c
+++ b/ovn/controller/pinctrl.c
@@ -466,6 +466,7 @@ static int
pinctrl_handle_buffered_packets(const struct flow *ip_flow,
struct dp_packet *pkt_in,
const struct match *md, bool is_arp)
+ OVS_REQUIRES(pinctrl_mutex)
{
struct buffered_packets *bp;
struct dp_packet *clone;
@@ -514,7 +515,9 @@ pinctrl_handle_arp(struct rconn *swconn, const struct flow *ip_flow,
return;
}
+ ovs_mutex_lock(&pinctrl_mutex);
pinctrl_handle_buffered_packets(ip_flow, pkt_in, md, true);
+ ovs_mutex_unlock(&pinctrl_mutex);
/* Compose an ARP packet. */
uint64_t packet_stub[128 / 8];
@@ -3139,7 +3142,9 @@ pinctrl_handle_nd_ns(struct rconn *swconn, const struct flow *ip_flow,
return;
}
+ ovs_mutex_lock(&pinctrl_mutex);
pinctrl_handle_buffered_packets(ip_flow, pkt_in, md, false);
+ ovs_mutex_unlock(&pinctrl_mutex);
uint64_t packet_stub[128 / 8];
struct dp_packet packet;