connman-gnome: fixed DHCP segfault

Submitted by Emilia Ciobanu on May 17, 2013, 10:32 a.m.

Details

Message ID 1368786726-32071-1-git-send-email-emilia.maria.silvia.ciobanu@intel.com
State New
Headers show

Commit Message

Emilia Ciobanu May 17, 2013, 10:32 a.m.
In networks that don't have a DHCP server configured, ipv4 address
allocation fails and the ipv4 structure doesn't get populated.
The patch checks this case also.

[YOCTO #3945]

Signed-off-by: Emilia Ciobanu <emilia.maria.silvia.ciobanu@intel.com>
---
 .../connman-gnome/null_check_for_ipv4_config.patch |   26 ++++++++++++++++++++
 .../connman/connman-gnome_0.7.bb                   |    1 +
 2 files changed, 27 insertions(+)
 create mode 100644 meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch

Patch hide | download patch | download mbox

diff --git a/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch b/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch
new file mode 100644
index 0000000..456a4ba
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch
@@ -0,0 +1,26 @@ 
+Index: git/properties/ethernet.c
+===================================================================
+--- git.orig/properties/ethernet.c
++++ git/properties/ethernet.c
+@@ -194,7 +194,7 @@ void add_ethernet_service(GtkWidget *mai
+ 
+ 	data->button = button;
+ 
+-	if (g_str_equal(ipv4_config.method, "dhcp") == TRUE)
++	if (!ipv4_config.method || g_str_equal(ipv4_config.method, "dhcp") == TRUE)
+ 		update_ethernet_ipv4(data, CONNMAN_POLICY_DHCP);
+ 	else
+ 		update_ethernet_ipv4(data, CONNMAN_POLICY_MANUAL);
+Index: git/properties/wifi.c
+===================================================================
+--- git.orig/properties/wifi.c
++++ git/properties/wifi.c
+@@ -230,7 +230,7 @@ static void wifi_ipconfig(GtkWidget *tab
+ 
+ 	data->ipv4_config = ipv4_config;
+ 
+-	if (g_str_equal(ipv4_config.method, "dhcp") == TRUE)
++	if (!ipv4_config.method || g_str_equal(ipv4_config.method, "dhcp") == TRUE)
+ 		update_wifi_ipv4(data, CONNMAN_POLICY_DHCP);
+ 	else
+ 		update_wifi_ipv4(data, CONNMAN_POLICY_MANUAL);
diff --git a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
index 6299e70..4f8875c 100644
--- a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
+++ b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
@@ -12,6 +12,7 @@  DEPENDS = "gtk+ dbus-glib intltool-native"
 SRCREV = "cf3c325b23dae843c5499a113591cfbc98acb143"
 SRC_URI = "git://github.com/connectivity/connman-gnome.git;protocol=git \
 	   file://0001-Removed-icon-from-connman-gnome-about-applet.patch \
+	   file://null_check_for_ipv4_config.patch \
 	   file://images/* \
           "
 

Comments

Saul Wold May 17, 2013, 10:30 a.m.
On 05/17/2013 01:32 PM, Emilia Ciobanu wrote:
> In networks that don't have a DHCP server configured, ipv4 address
> allocation fails and the ipv4 structure doesn't get populated.
> The patch checks this case also.
>
> [YOCTO #3945]
>
> Signed-off-by: Emilia Ciobanu <emilia.maria.silvia.ciobanu@intel.com>
> ---
>   .../connman-gnome/null_check_for_ipv4_config.patch |   26 ++++++++++++++++++++
>   .../connman/connman-gnome_0.7.bb                   |    1 +
>   2 files changed, 27 insertions(+)
>   create mode 100644 meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch
>
> diff --git a/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch b/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch
> new file mode 100644
> index 0000000..456a4ba
> --- /dev/null
> +++ b/meta/recipes-connectivity/connman/connman-gnome/null_check_for_ipv4_config.patch

You need to have Signed-off-by and Upstream-Status in your patch files also.

And any Comments that might make it more clear.

Sau!


> @@ -0,0 +1,26 @@
> +Index: git/properties/ethernet.c
> +===================================================================
> +--- git.orig/properties/ethernet.c
> ++++ git/properties/ethernet.c
> +@@ -194,7 +194,7 @@ void add_ethernet_service(GtkWidget *mai
> +
> + 	data->button = button;
> +
> +-	if (g_str_equal(ipv4_config.method, "dhcp") == TRUE)
> ++	if (!ipv4_config.method || g_str_equal(ipv4_config.method, "dhcp") == TRUE)
> + 		update_ethernet_ipv4(data, CONNMAN_POLICY_DHCP);
> + 	else
> + 		update_ethernet_ipv4(data, CONNMAN_POLICY_MANUAL);
> +Index: git/properties/wifi.c
> +===================================================================
> +--- git.orig/properties/wifi.c
> ++++ git/properties/wifi.c
> +@@ -230,7 +230,7 @@ static void wifi_ipconfig(GtkWidget *tab
> +
> + 	data->ipv4_config = ipv4_config;
> +
> +-	if (g_str_equal(ipv4_config.method, "dhcp") == TRUE)
> ++	if (!ipv4_config.method || g_str_equal(ipv4_config.method, "dhcp") == TRUE)
> + 		update_wifi_ipv4(data, CONNMAN_POLICY_DHCP);
> + 	else
> + 		update_wifi_ipv4(data, CONNMAN_POLICY_MANUAL);
> diff --git a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
> index 6299e70..4f8875c 100644
> --- a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
> +++ b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
> @@ -12,6 +12,7 @@ DEPENDS = "gtk+ dbus-glib intltool-native"
>   SRCREV = "cf3c325b23dae843c5499a113591cfbc98acb143"
>   SRC_URI = "git://github.com/connectivity/connman-gnome.git;protocol=git \
>   	   file://0001-Removed-icon-from-connman-gnome-about-applet.patch \
> +	   file://null_check_for_ipv4_config.patch \
>   	   file://images/* \
>             "
>
>
Ross Burton May 17, 2013, 10:52 a.m.
On 17 May 2013 11:32, Emilia Ciobanu
<emilia.maria.silvia.ciobanu@intel.com> wrote:
> +-      if (g_str_equal(ipv4_config.method, "dhcp") == TRUE)
> ++      if (!ipv4_config.method || g_str_equal(ipv4_config.method, "dhcp") == TRUE)

Is this really the right behaviour if IPv4.Method isn't set?

Ross
Emilia Ciobanu May 17, 2013, 11:37 a.m.
Hi,

When using manual ip the ipv4_config structure has all fields populated and this condition
is skipped. The only case when the data structure fields are NULL is when we have
DHCP settings and for different reasons network configurations are not done. In this
case, connman automatically renews the ipv4 configurations in less than a minute.
Ethernet manual configuration behavior remains unchanged after this fix.

Thanks,
Ema