Thanks for the update Mohammad. I like this version much better.
Acked-by: Mark Michelson <[email protected]>
On 4/3/22 07:26, Mohammad Heib wrote:
currently pinctrl uses some hash tables that were supplied
by ovn-controller to prepare and send IPv6 RAs, those
hash tables are not updated properly when a port_bindings record
deleted and in this case, some port_bindings records remain in the
hash table where they should be removed.
This patch handles such changes and update those lists
to avoid invalid memory access.
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2052945
Signed-off-by: Mohammad Heib <[email protected]>
---
controller/binding.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/controller/binding.c b/controller/binding.c
index 4d62b0858..36884b1ea 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -481,6 +481,20 @@ remove_related_lport(const struct sbrec_port_binding *pb,
}
}
+static void
+delete_active_pb_ras_pd(const struct sbrec_port_binding *pb,
+ struct shash *map)
+{
+ struct shash_node *iter = shash_find(map, pb->logical_port);
+
+ if (iter) {
+ struct pb_ld_binding *ras_pd = iter->data;
+ shash_delete(map, iter);
+ free(ras_pd);
+ return;
+ }
+}
+
static void
update_active_pb_ras_pd(const struct sbrec_port_binding *pb,
struct hmap *local_datapaths,
@@ -2251,6 +2265,9 @@ binding_handle_port_binding_changes(struct binding_ctx_in
*b_ctx_in,
continue;
}
+ delete_active_pb_ras_pd(pb, b_ctx_out->local_active_ports_ipv6_pd);
+ delete_active_pb_ras_pd(pb, b_ctx_out->local_active_ports_ras);
+
enum en_lport_type lport_type = get_lport_type(pb);
struct binding_lport *b_lport =
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev