aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2017-08-03 14:25:33 -0700
committerAleksander Morgado <aleksander@aleksander.es>2017-08-04 14:08:18 +0200
commit0d3cca2c6f545cf9a91c75aed451df6d16ae5511 (patch)
treee3eea0fff30defa6d78a4a8ec2985ad88ad77661
parent625c204761592ac41f23de1680b32bc78365c144 (diff)
broadband-modem-qmi: fix potential use-after-freed issues
This patch fixes some potential use-after-freed issues in dms_get_ids_ready(). When an invalid ESN / MEID is retrieved, `ctx->self->priv->esn' / `ctx->self->priv->meid' is freed but not reset to NULL. If no IMEI is retrieved, `str' can be set to the already freed `ctx->self->priv->esn' / `ctx->self->priv->meid' and then propagated to a GSimpleAsyncResult object.
-rw-r--r--src/mm-broadband-modem-qmi.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 38356426..3a04e993 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -1231,7 +1231,7 @@ dms_get_ids_ready (QmiClientDms *client,
if (qmi_message_dms_get_ids_output_get_esn (output, &str, NULL) &&
str[0] != '\0') {
- g_free (ctx->self->priv->esn);
+ g_clear_pointer (&ctx->self->priv->esn, g_free);
len = strlen (str);
if (len == 7)
ctx->self->priv->esn = g_strdup_printf ("0%s", str); /* zero-pad to 8 chars */
@@ -1243,7 +1243,7 @@ dms_get_ids_ready (QmiClientDms *client,
if (qmi_message_dms_get_ids_output_get_meid (output, &str, NULL) &&
str[0] != '\0') {
- g_free (ctx->self->priv->meid);
+ g_clear_pointer (&ctx->self->priv->meid, g_free);
len = strlen (str);
if (len == 14)
ctx->self->priv->meid = g_strdup (str);