Direct leak of 64 byte(s) in 1 object(s) allocated from:
    0 0x56f127 in calloc (/root/master-ovn/ic/ovn-ic+0x56f127)
    1 0x731de2 in xcalloc__ /root/master-ovn/ovs/lib/util.c:125:31
    2 0x731e10 in xzalloc__ /root/master-ovn/ovs/lib/util.c:135:12
    3 0x731ed5 in xzalloc /root/master-ovn/ovs/lib/util.c:169:12
    4 0x706139 in ovsdb_idl_txn_add_map_op 
/root/master-ovn/ovs/lib/ovsdb-idl.c:4178:29
    5 0x705ff8 in ovsdb_idl_txn_write_partial_map 
/root/master-ovn/ovs/lib/ovsdb-idl.c:4335:5
    6 0x5b2f67 in update_isb_pb_external_ids /root/master-ovn/ic/ovn-ic.c:588:5
    7 0x5ab08e in create_isb_pb /root/master-ovn/ic/ovn-ic.c:733:5
    8 0x5ab08e in port_binding_run /root/master-ovn/ic/ovn-ic.c:821:21
    9 0x5ab08e in ovn_db_run /root/master-ovn/ic/ovn-ic.c:1901:5
    10 0x5a8143 in main /root/master-ovn/ic/ovn-ic.c:2337:21
    11 0x7f58bd0f9b74 in __libc_start_main (/lib64/libc.so.6+0x27b74)

This happens when, in a single transaction, we run something like
- isb_pb = icsbrec_port_binding_insert(ctx->ovnisb_txn);
- icsbrec_port_binding_update_external_ids_setkey(isb_pb, "router-id",uuid_s);
- icsbrec_port_binding_delete(isb_pb)

Signed-off-by: Xavier Simonart <[email protected]>
---
 ic/ovn-ic.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
index 18d1df039..dfefa538e 100644
--- a/ic/ovn-ic.c
+++ b/ic/ovn-ic.c
@@ -121,6 +121,9 @@ Options:\n\
     stream_usage("database", true, true, false);
 }
 
+static const char *
+get_lrp_name_by_ts_port_name(struct ic_context *ctx, const char *ts_port_name);
+
 static const struct icsbrec_availability_zone *
 az_run(struct ic_context *ctx)
 {
@@ -710,13 +713,19 @@ create_isb_pb(struct ic_context *ctx,
               const char *ts_name,
               uint32_t pb_tnl_key)
 {
+    if (!get_lrp_name_by_ts_port_name(ctx, sb_pb->logical_port)) {
+        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
+        VLOG_WARN_RL(&rl, "ignoring port %s on ts %s because "
+                     "logical router port is not found in NB.",
+                     sb_pb->logical_port, ts_name);
+        return;
+    }
     const struct icsbrec_port_binding *isb_pb =
         icsbrec_port_binding_insert(ctx->ovnisb_txn);
     icsbrec_port_binding_set_availability_zone(isb_pb, az);
     icsbrec_port_binding_set_transit_switch(isb_pb, ts_name);
     icsbrec_port_binding_set_logical_port(isb_pb, sb_pb->logical_port);
     icsbrec_port_binding_set_tunnel_key(isb_pb, pb_tnl_key);
-
     const char *address = get_lrp_address_for_sb_pb(ctx, sb_pb);
     if (address) {
         icsbrec_port_binding_set_address(isb_pb, address);
-- 
2.31.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to