From bd62353e78a55fce3bae6b098a794c2eec7be6e1 Mon Sep 17 00:00:00 2001 From: ihasz Date: Sun, 22 Mar 2026 17:58:23 +0100 Subject: [PATCH 1/2] cinterion: fix double-free of GError in ws46_query_ready() g_task_return_error() takes ownership of the GError, but the g_autoptr(GError) cleanup also frees it, causing a double free and crash when parsing fails. Fix by using g_steal_pointer(&error) when returning the error. --- src/plugins/cinterion/mm-broadband-modem-cinterion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/cinterion/mm-broadband-modem-cinterion.c b/src/plugins/cinterion/mm-broadband-modem-cinterion.c index 3d70cf509..fef34551b 100644 --- a/src/plugins/cinterion/mm-broadband-modem-cinterion.c +++ b/src/plugins/cinterion/mm-broadband-modem-cinterion.c @@ -1723,14 +1723,14 @@ ws46_query_ready (MMBaseModem *self, response = mm_base_modem_at_command_finish (self, res, &error); if (!response) { - g_task_return_error (task, error); + g_task_return_error(task, g_steal_pointer(&error)); g_object_unref (task); return; } if (!mm_cinterion_parse_ws46_response (response, &(result->allowed), &error)) { - g_task_return_error (task, error); + g_task_return_error(task, g_steal_pointer(&error)); g_object_unref (task); return; } From 8dd9671fd7c8cba9cfd722114cc7192b739380ae Mon Sep 17 00:00:00 2001 From: ihasz Date: Sun, 22 Mar 2026 17:59:10 +0100 Subject: [PATCH 2/2] cinterion: support additional WS46 modes (29, 30, 31) Some modems (e.g. Cinterion ELS62) report additional WS46 modes (29, 30, 31) which are currently treated as errors. Align behavior with Telit plugin by mapping these modes to appropriate MMModemMode bitmasks. --- src/plugins/cinterion/mm-modem-helpers-cinterion.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/plugins/cinterion/mm-modem-helpers-cinterion.c b/src/plugins/cinterion/mm-modem-helpers-cinterion.c index e30a471b4..19d11046e 100644 --- a/src/plugins/cinterion/mm-modem-helpers-cinterion.c +++ b/src/plugins/cinterion/mm-modem-helpers-cinterion.c @@ -2062,6 +2062,18 @@ mm_cinterion_parse_ws46_response (const gchar *response, /* E-UTRAN only */ *result = MM_MODEM_MODE_4G; break; + case 29: + /* GERAN and UTRAN */ + *result = MM_MODEM_MODE_2G | MM_MODEM_MODE_3G; + break; + case 30: + /* GERAN and E-UTRAN */ + *result = MM_MODEM_MODE_2G | MM_MODEM_MODE_4G; + break; + case 31: + /* UTRAN and E-UTRAN */ + *result = MM_MODEM_MODE_3G | MM_MODEM_MODE_4G; + break; default: g_set_error (error, MM_CORE_ERROR,