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

Reply via email to