[PATCH] qmicli,wds: fix uninitialized values in --wds-start-network

Aleksander Morgado aleksander at aleksander.es
Tue Mar 21 12:34:56 UTC 2017


The 'ip-type' support in --wds-start-network was introduced in commit
81c21379, and that patch lacked a proper initialization of the
'ip_type' field (e.g. as QMI_WDS_IP_FAMILY_UNSPECIFIED) inside the
'props' struct.

A follow up commit, 4c678418, tried to fix that by assuming the
'ip_type' field was initialized to 0 instead of
QMI_WDS_IP_FAMILY_UNSPECIFIED, which wasn't the case either, as the
'props' struct isn't static and therefore requires explicit
initialization of its members.

This patch tries to address the issue by using memset() to initialize
to 0/FALSE/NULL the whole struct members, and then explicitly
initialize to valid enum values the enum members.

This also fixes the initialization of the 'autoconnect' and
'autoconnect_set' fields, which were not initialized to anything.
---

Hey Dan,

I believe the fix done in 4c678418 (assuming the struct member was initialized to 0) wasn't the proper one; instead we should have explicitly initialized the struct member to QMI_WDS_IP_FAMILY_UNSPECIFIED.

How about this fix to initialize the whole struct to 0/NULL/FALSE and then the enum members to specific enum values?

---
 src/qmicli/qmicli-wds.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/qmicli/qmicli-wds.c b/src/qmicli/qmicli-wds.c
index 75d7992..55d10b7 100644
--- a/src/qmicli/qmicli-wds.c
+++ b/src/qmicli/qmicli-wds.c
@@ -473,15 +473,13 @@ start_network_input_create (const gchar *str)
     gchar *ip_type_str = NULL;
     gchar **split = NULL;
     QmiMessageWdsStartNetworkInput *input = NULL;
-    StartNetworkProperties props = {
-        .apn                 = NULL,
-        .profile_index_3gpp  = 0,
-        .profile_index_3gpp2 = 0,
-        .auth                = QMI_WDS_AUTHENTICATION_NONE,
-        .auth_set            = FALSE,
-        .username            = NULL,
-        .password            = NULL,
-    };
+    StartNetworkProperties props;
+
+    /* Initialize all struct members to 0/FALSE/NULL, and explicitly initialize
+     * the enum members to actual enum values */
+    memset (&props, 0, sizeof (props));
+    props.auth    = QMI_WDS_AUTHENTICATION_NONE;
+    props.ip_type = QMI_WDS_IP_FAMILY_UNSPECIFIED;

     /* An empty string is totally valid (i.e. no TLVs) */
     if (!str[0])
@@ -537,7 +535,7 @@ start_network_input_create (const gchar *str)
         qmi_message_wds_start_network_input_set_profile_index_3gpp2 (input, props.profile_index_3gpp2, NULL);

     /* Set IP Type */
-    if (props.ip_type != 0) {
+    if (props.ip_type != QMI_WDS_IP_FAMILY_UNSPECIFIED) {
         qmi_message_wds_start_network_input_set_ip_family_preference (input, props.ip_type, NULL);
         if (props.ip_type == QMI_WDS_IP_FAMILY_IPV4)
             ip_type_str = "4";
--
2.12.0


More information about the libqmi-devel mailing list