ovs_router_rule_add() is annotated with OVS_REQUIRES(mutex) but its
external caller rule_handle_msg() in route-table.c does not hold the
mutex. This could lead to data races on the rules pvector.
Fix this by changing the annotation to OVS_EXCLUDED(mutex) and
acquiring the mutex inside ovs_router_rule_add() around the call to
the internal ovs_router_rule_add__() function.
Fixes: e2a241560080 ("ovs-router: Introduce ovs/route/rule/{add, del}
commands.")
Signed-off-by: Matteo Perin <[email protected]>
---
lib/ovs-router.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/ovs-router.c b/lib/ovs-router.c
index d0cf0f6a9..75d9badfa 100644
--- a/lib/ovs-router.c
+++ b/lib/ovs-router.c
@@ -1338,11 +1338,13 @@ void
ovs_router_rule_add(uint32_t prio, bool invert, bool user, uint8_t src_len,
const struct in6_addr *from, uint32_t lookup_table,
bool ipv4)
- OVS_REQUIRES(mutex)
+ OVS_EXCLUDED(mutex)
{
if (use_system_routing_table) {
+ ovs_mutex_lock(&mutex);
ovs_router_rule_add__(prio, invert, user, src_len, from,
lookup_table, ipv4);
+ ovs_mutex_unlock(&mutex);
}
}
--
2.43.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev