This patch also fixes a potential crash:

#0  connman_network_set_ipaddress (network=0x1aade90, ipaddress=0x0) at 
src/network.c:1744
#1  0x000302a4 in set_connected (modem=0x1aa30e0) at plugins/ofono.c:306
#2  0x000321a0 in context_changed (conn=<optimized out>, message=0x1aae7e0, 
user_data=<optimized out>) at plugins/ofono.c:1294
#3  0x00083ed0 in signal_filter (connection=0x1a71448, message=0x1aae7e0, 
user_data=0x1aa5458) at gdbus/watch.c:407
#4  0x00083d24 in message_filter (connection=0x1a71448, message=0x1aae7e0, 
user_data=<optimized out>) at gdbus/watch.c:556
#5  0x4038ff50 in dbus_connection_dispatch (connection=0x1a71448) at 
dbus-connection.c:4658
#6  0x00082be4 in message_dispatch (data=0x1a71448) at gdbus/mainloop.c:72
#7  0x4028ba8c in g_idle_dispatch (source=<optimized out>, callback=0x82bd4 
<message_dispatch>, user_data=<optimized out>) at gmain.c:5251
#8  0x4028fb20 in g_main_dispatch (context=0x1a70500) at gmain.c:3066
#9  g_main_context_dispatch (context=0x1a70500) at gmain.c:3642
#10 0x4028fe24 in g_main_context_iterate (context=0x1a70500, block=1, 
dispatch=1, self=<optimized out>) at gmain.c:3713
#11 0x4029048c in g_main_loop_run (loop=0x1a6f208) at gmain.c:3906
#12 0x00014b5c in main (argc=563596, argv=0x906b8) at src/main.c:740

Br,
Pasi
________________________________________
From: connman [connman-boun...@connman.net] on behalf of pasi.sjoh...@jolla.com 
[pasi.sjoh...@jolla.com]
Sent: Thursday, December 18, 2014 16:02
To: connman@connman.net
Subject: [PATCH 6/6] ofono: make sure valid addresses/methods are used in 
set_connected

From: Pasi Sjöholm <pasi.sjoh...@jollamobile.com>

When connection is set connected, method needs to be set
CONNMAN_IPCONFIG_METHOD_UNKNOWN so that no old configuration
is used in case only ipv4/ipv6-configuration is set.

IPv6 can be also CONNMAN_IPCONFIG_METHOD_AUTO with dual/ipv4v6.
---
 plugins/ofono.c | 55 +++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 39 insertions(+), 16 deletions(-)

diff --git a/plugins/ofono.c b/plugins/ofono.c
index 94c6536..5afaa50 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -266,10 +266,8 @@ static void set_connected(struct modem_data *modem)

        index = modem->context->index;

-       method = modem->context->ipv4_method;
-       if (index < 0 || (!modem->context->ipv4_address &&
-                               method == CONNMAN_IPCONFIG_METHOD_FIXED)) {
-               connman_error("Invalid index and/or address");
+       if (index < 0 ) {
+               connman_error("Invalid index");
                return;
        }

@@ -277,28 +275,48 @@ static void set_connected(struct modem_data *modem)
        if (!service)
                return;

-       if (method == CONNMAN_IPCONFIG_METHOD_FIXED ||
-                       method == CONNMAN_IPCONFIG_METHOD_DHCP) {
+       method = modem->context->ipv4_method;
+       if (method == CONNMAN_IPCONFIG_METHOD_DHCP) {
                connman_service_create_ip4config(service, index);
-               connman_network_set_index(modem->network, index);
-
                connman_network_set_ipv4_method(modem->network, method);

                setip = true;
-       }
-
-       if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
-               connman_network_set_ipaddress(modem->network,
+       } else if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+               if (modem->context->ipv4_address) {
+                       connman_service_create_ip4config(service, index);
+                       connman_network_set_ipv4_method(modem->network, method);
+                       connman_network_set_ipaddress(modem->network,
                                                modem->context->ipv4_address);
+                       setip = true;
+               } else {
+                       connman_error("Invalid ipv4-address");
+                       return;
+               }
+       } else {
+               connman_service_create_ip4config(service, index);
+               connman_network_set_ipv4_method(modem->network, 
CONNMAN_IPCONFIG_METHOD_UNKNOWN);
        }

        method = modem->context->ipv6_method;
-       if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+       if (method == CONNMAN_IPCONFIG_METHOD_AUTO) {
                connman_service_create_ip6config(service, index);
                connman_network_set_ipv6_method(modem->network, method);
-               connman_network_set_ipaddress(modem->network,
-                                               modem->context->ipv6_address);
+
                setip = true;
+       } else if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+               if (modem->context->ipv6_address) {
+                       connman_service_create_ip6config(service, index);
+                       connman_network_set_ipv6_method(modem->network, method);
+                       connman_network_set_ipaddress(modem->network,
+                                               modem->context->ipv6_address);
+                       setip = true;
+               } else {
+                       connman_error("Invalid ipv6-address");
+                       return;
+               }
+       } else {
+               connman_service_create_ip6config(service, index);
+               connman_network_set_ipv6_method(modem->network, 
CONNMAN_IPCONFIG_METHOD_UNKNOWN);
        }

        /* Set the nameservers */
@@ -317,8 +335,13 @@ static void set_connected(struct modem_data *modem)
                                        modem->context->ipv6_nameservers);
        }

-       if (setip)
+       if (setip) {
+               connman_network_set_index(modem->network, index);
                connman_network_set_connected(modem->network, true);
+       } else {
+               connman_error("Invalid address(es)");
+       }
+
 }

 static void set_disconnected(struct modem_data *modem)
--
2.1.0

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman
_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to