From 0728a791948101ca2e68a6e88400caa69d7384a9 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Fri, 13 Dec 2024 13:54:43 +0100 Subject: [PATCH] fixup! cloud-setup: parse OCI metadata related to VLAN config .get_config_data is only alive while the get_config task is running. We can't reach into it afterwards. ==92303== Invalid read of size 8 ==92303== at 0x41247D: _iface_data_free (nmcs-provider.c:228) ==92303== by 0x4CB33C1: ??? (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x4CB8082: g_hash_table_unref (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x412425: nm_g_hash_table_unref (nm-shared-utils.h:2171) ==92303== by 0x412425: nmcs_provider_get_config_result_free (nmcs-provider.c:133) ==92303== by 0x407871: main (main.c:995) ==92303== Address 0x63b63f8 is 8 bytes inside a block of size 64 free'd ==92303== at 0x4847B4C: free (vg_replace_malloc.c:989) ==92303== by 0x4CCB76C: g_free (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x4CE81DF: g_slice_free1 (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x411C7B: _get_config_done_cb (nmcs-provider-oci.c:247) ==92303== by 0x4AF2489: ??? (in /usr/lib64/libgio-2.0.so.0.6800.4) ==92303== by 0x4AF268A: ??? (in /usr/lib64/libgio-2.0.so.0.6800.4) ==92303== by 0x40A91C: _poll_req_done_cb (nm-http-client.c:529) ==92303== by 0x4AF2489: ??? (in /usr/lib64/libgio-2.0.so.0.6800.4) ==92303== by 0x4AF268A: ??? (in /usr/lib64/libgio-2.0.so.0.6800.4) ==92303== by 0x415381: _poll_return (nm-shared-utils.c:7174) ==92303== by 0x416D97: _poll_done_cb (nm-shared-utils.c:7201) ==92303== by 0x4AF2489: ??? (in /usr/lib64/libgio-2.0.so.0.6800.4) ==92303== Block was alloc'd at ==92303== at 0x484482F: malloc (vg_replace_malloc.c:446) ==92303== by 0x4CCEB88: g_malloc (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x4CE8C64: g_slice_alloc (in /usr/lib64/libglib-2.0.so.0.6800.4) ==92303== by 0x413113: nmcs_provider_get_config (nmcs-provider.c:304) ==92303== by 0x4076BD: _get_config (main.c:359) ==92303== by 0x4076BD: main (main.c:985) --- src/nm-cloud-setup/nmcs-provider.c | 4 +++- src/nm-cloud-setup/nmcs-provider.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/nm-cloud-setup/nmcs-provider.c b/src/nm-cloud-setup/nmcs-provider.c index ea323ed234..60888f7124 100644 --- a/src/nm-cloud-setup/nmcs-provider.c +++ b/src/nm-cloud-setup/nmcs-provider.c @@ -188,6 +188,7 @@ nmcs_provider_get_config_iface_data_create(NMCSProviderGetConfigTaskData *get_co iface_data = g_slice_new(NMCSProviderGetConfigIfaceData); *iface_data = (NMCSProviderGetConfigIfaceData) { + .provider = g_object_ref(get_config_data->self), .get_config_data = get_config_data, .hwaddr = g_strdup(hwaddr), .iface_idx = -1, @@ -225,8 +226,9 @@ _iface_data_free(gpointer data) g_free(iface_data->ipv4s_arr); nm_g_ptr_array_unref(iface_data->iproutes); g_free((char *) iface_data->hwaddr); - if (G_OBJECT_TYPE(iface_data->get_config_data->self) == nmcs_provider_oci_get_type()) + if (G_OBJECT_TYPE(iface_data->provider) == nmcs_provider_oci_get_type()) g_free((char *) iface_data->priv.oci.parent_hwaddr); + g_clear_object(&iface_data->provider); nm_g_slice_free(iface_data); } diff --git a/src/nm-cloud-setup/nmcs-provider.h b/src/nm-cloud-setup/nmcs-provider.h index 184e77cecd..95a591c651 100644 --- a/src/nm-cloud-setup/nmcs-provider.h +++ b/src/nm-cloud-setup/nmcs-provider.h @@ -17,6 +17,8 @@ typedef struct { * dictionary. */ const char *hwaddr; + struct _NMCSProvider *provider; + struct _NMCSProviderGetConfigTaskData *get_config_data; in_addr_t *ipv4s_arr;