Update connman to v1.3, fix dependencies and runtime
v4 cover Update connman to v1.3, fix dependencies and runtime
Changes from V3: Messed up my patches. As well, added Ross Burton's patch:
[OE-core] [PATCH 2/2] connman: fix crashes on startup on PPC/MIPS
Update connman to v1.3.
Fix dependencies needed for tests.
Add patches to fix runtime segfault on mips and ppc architecture.
Machine tested: qemux86 / qemumips
Tests done on connman-gnome
OnlineMode / OfflineMode
Enable / Disable Wired Networks
Set manual IP configuration
Tests on connman v.1.3
addr-test
iptables-test
polkit-test
get-global-timeservers
get-proxy-autoconfig
get-services
get-state
list-services
show-introspection
test-clock
test-connman
test-counter
test-manager
test-session
The following changes since commit 90ad663909c0c8a405b22a510c9f957007d02669:
upstream_tracking: update boost (2012-07-09 17:21:38 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib ag/connman1.3
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ag/connman1.3
Andrei Gherzan (3):
connman: Update to version 1.3
connman.inc: Add missing dependencies needed by some tests
connman: Add patches to fix connman on fs with no d_type support
Ross Burton (1):
connman: fix crashes on startup on PPC/MIPS
meta/recipes-connectivity/connman/connman.inc | 4 +-
...ck-that-the-string-isn-t-empty-before-spl.patch | 37 +++++++++++++
...If-there-is-no-d_type-support-use-fstatat.patch | 57 ++++++++++++++++++++
...If-there-is-no-d_type-support-use-fstatat.patch | 45 ++++++++++++++++
.../connman/{connman_1.0.bb => connman_1.3.bb} | 11 ++--
5 files changed, 148 insertions(+), 6 deletions(-)
create mode 100644 meta/recipes-connectivity/connman/connman/0001-storage-check-that-the-string-isn-t-empty-before-spl.patch
create mode 100644 meta/recipes-connectivity/connman/connman/0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch
create mode 100644 meta/recipes-connectivity/connman/connman/0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch
rename meta/recipes-connectivity/connman/{connman_1.0.bb => connman_1.3.bb} (41%)Signature · 1 line
1.7.9.5
PATCH v4 1/4 connman: Update to version 1.3
From: Andrei Gherzan <[email protected]>
---
.../connman/{connman_1.0.bb => connman_1.3.bb} | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
rename meta/recipes-connectivity/connman/{connman_1.0.bb => connman_1.3.bb} (82%)meta/recipes-connectivity/connman/connman_1.3.bb renamed from meta/recipes-connectivity/connman/connman_1.0.bb +2 -2
@@ -1,7 +1,7 @@ require connman.inc -# 1.0 tag -SRCREV = "6d6f312fb2b751b4cf7037f2a526c7785364732f" +# 1.3 tag +SRCREV = "3c0fa84091524c7cd6237744f2088ffee2f1d5ad" SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \ file://add_xuser_dbus_permission.patch \
Signature · 1 line
1.7.9.5
PATCH v4 2/4 connman.inc: Add missing dependencies needed by some tests
From: Andrei Gherzan <[email protected]>
Some tests need:
* gobject and optparse module (ex: test-session)
* subprocess and fnctl module (ex: backtrace)
* urllib module (ex: get-proxy-autoconfig)
--- meta/recipes-connectivity/connman/connman.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
meta/recipes-connectivity/connman/connman.inc +2 -2
@@ -20,7 +20,7 @@ DEPENDS = "dbus glib-2.0 ppp iptables gnutls \ ${@base_contains('DISTRO_FEATURES', '3g','ofono', '', d)} \ " -INC_PR = "r11" +INC_PR = "r12" TIST = "--enable-tist" TIST_powerpc = ""
@@ -113,7 +113,7 @@ PACKAGES =+ "${PN}-tools ${PN}-tests" FILES_${PN}-tools = "${bindir}/wispr" FILES_${PN}-tests = "${bindir}/*-test ${libdir}/${BPN}/test/*" -RDEPENDS_${PN}-tests = "python-dbus" +RDEPENDS_${PN}-tests = "python-dbus python-pygobject python-textutils python-subprocess python-fcntl python-netclient" FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \ ${libdir}/connman/plugins \
Signature · 1 line
1.7.9.5
PATCH v4 3/4 connman: Add patches to fix connman on fs with no d_type support
In reply to Andrei GherzanWhen there is not d_type avalaible on filesystem, fstatat (stat) can be used to check if the path is a directory. storage.c and timezone.c were modified accordingly.
--- ...If-there-is-no-d_type-support-use-fstatat.patch | 57 ++++++++++++++++++++ ...If-there-is-no-d_type-support-use-fstatat.patch | 45 ++++++++++++++++ meta/recipes-connectivity/connman/connman_1.3.bb | 6 ++- 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-connectivity/connman/connman/0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch create mode 100644 meta/recipes-connectivity/connman/connman/0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch
meta/recipes-connectivity/connman/connman/0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch new file +57 -0
@@ -0,0 +1,57 @@ +From f2094e6b2e4542adf458d8fa58d7bccd5edb762e Mon Sep 17 00:00:00 2001 +From: Andrei Gherzan <[email protected]> +Date: Tue, 17 Jul 2012 17:27:39 +0300 +Subject: [PATCH V3 1/2] timezone.c: If there is no d_type support use + fstatat() + +This is useful for filesystems where d_type is always DT_UNKNOWN. +In this case use fstatat() function. +--- + src/timezone.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/src/timezone.c b/src/timezone.c +index 173d658..f951f6b 100644 +--- a/src/timezone.c ++++ b/src/timezone.c +@@ -157,6 +157,8 @@ static char *find_origin(void *src_map, struct stat *src_st, + DIR *dir; + struct dirent *d; + char *str, pathname[PATH_MAX]; ++ struct stat buf; ++ int ret; + + if (subpath == NULL) + strncpy(pathname, basepath, sizeof(pathname)); +@@ -205,6 +207,28 @@ static char *find_origin(void *src_map, struct stat *src_st, + return str; + } + break; ++ case DT_UNKNOWN: ++ /* ++ * If there is no d_type support use stat() ++ * to check if directory ++ */ ++ ret = fstatat(dirfd(dir), d->d_name, &buf, 0); ++ if (ret < 0) ++ continue; ++ if (!(buf.st_mode & S_IFDIR)) ++ continue; ++ if (subpath == NULL) ++ strncpy(pathname, d->d_name, sizeof(pathname)); ++ else ++ snprintf(pathname, sizeof(pathname), ++ "%s/%s", subpath, d->d_name); ++ ++ str = find_origin(src_map, src_st, basepath, pathname); ++ if (str != NULL) { ++ closedir(dir); ++ return str; ++ } ++ break; + } + } + +-- +1.7.9.5 +
meta/recipes-connectivity/connman/connman/0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch new file +45 -0
45 lines not on this page · raw message
meta/recipes-connectivity/connman/connman_1.3.bb +4 -2
@@ -5,6 +5,8 @@ SRCREV = "3c0fa84091524c7cd6237744f2088ffee2f1d5ad" SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \ file://add_xuser_dbus_permission.patch \ - file://connman" + file://connman \ + file://0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch \ + file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch" S = "${WORKDIR}/git" -PR = "${INC_PR}.0" +PR = "${INC_PR}.1"
Signature · 1 line
1.7.9.5
Re: [PATCH V4 3/4] connman: Add patches to fix connman on fs with no d_type support
Quoted 4 lines · Andrei Gherzan
When there is not
d_typeavalaible on filesystem, fstatat (stat) can be used to check if the path is a directory.storage.candtimezone.cwere modified accordingly.
Quoted 9 lines
Signed-off-by Andrei Gherzan <[email protected]>--- ...If-there-is-no-d_type-support-use-fstatat.patch | 57 ++++++++++++++++++++ ...If-there-is-no-d_type-support-use-fstatat.patch | 45 ++++++++++++++++ meta/recipes-connectivity/connman/connman_1.3.bb | 6 ++- 3 files changed, 106 insertions(+), 2 deletions(-)create mode 100644
meta/recipes-connectivity/connman/connman/0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patchcreate mode 100644meta/recipes-connectivity/connman/connman/0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch
These patches are missing Upstream-Status: and SOBs.
Thanks
Sau!
Quoted 130 lines
meta/recipes-connectivity/connman/connman/0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch new file +57
-0@@ -0,0 +1,57 @@ +From f2094e6b2e4542adf458d8fa58d7bccd5edb762e Mon Sep 17 00:00:00 2001 +From: Andrei Gherzan <[email protected]> +Date: Tue, 17 Jul 2012 17:27:39 +0300 +Subject: [PATCH V3 1/2] timezone.c: If there is no d_type support use + fstatat() + +This is useful for filesystems where d_type is always DT_UNKNOWN. +In this case use fstatat() function. +--- + src/timezone.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/src/timezone.c b/src/timezone.c +index 173d658..f951f6b 100644 +--- a/src/timezone.c ++++ b/src/timezone.c +@@ -157,6 +157,8 @@ static char *find_origin(void *src_map, struct stat *src_st, + DIR *dir; + struct dirent *d; + char *str, pathname[PATH_MAX]; ++ struct stat buf; ++ int ret; + + if (subpath == NULL) + strncpy(pathname, basepath, sizeof(pathname)); +@@ -205,6 +207,28 @@ static char *find_origin(void *src_map, struct stat *src_st, + return str; + } + break; ++ case DT_UNKNOWN: ++ /* ++ * If there is no d_type support use stat() ++ * to check if directory ++ */ ++ ret = fstatat(dirfd(dir), d->d_name, &buf, 0); ++ if (ret < 0) ++ continue; ++ if (!(buf.st_mode & S_IFDIR)) ++ continue; ++ if (subpath == NULL) ++ strncpy(pathname, d->d_name, sizeof(pathname)); ++ else ++ snprintf(pathname, sizeof(pathname), ++ "%s/%s", subpath, d->d_name); ++ ++ str = find_origin(src_map, src_st, basepath, pathname); ++ if (str != NULL) { ++ closedir(dir); ++ return str; ++ } ++ break; + } + } + +-- +1.7.9.5 +meta/recipes-connectivity/connman/connman/0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch new file +45
-0@@ -0,0 +1,45 @@ +From 7007ef32a959ac4717c19339a24fd90a68638a19 Mon Sep 17 00:00:00 2001 +From: Andrei Gherzan <[email protected]> +Date: Tue, 17 Jul 2012 16:07:17 +0300 +Subject: [PATCH V3 2/2] storage.c: If there is no d_type support use + fstatat() + +This is useful for filesystems where d_type is always DT_UNKNOWN. +In this case use fstatat() function. +--- + src/storage.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/src/storage.c b/src/storage.c +index 47bd0cb..0491a52 100644 +--- a/src/storage.c ++++ b/src/storage.c +@@ -206,6 +206,25 @@ gchar **connman_storage_get_services() + + g_string_append_printf(result, "%s/", d->d_name); + break; ++ case DT_UNKNOWN: ++ /* ++ * If there is no d_type support use stat() ++ * to check if directory ++ */ ++ ret = fstatat(dirfd(dir), d->d_name, &buf, 0); ++ if (ret < 0) ++ continue; ++ if (!(buf.st_mode & S_IFDIR)) ++ continue; ++ str = g_strdup_printf("%s/%s/settings", STORAGEDIR, ++ d->d_name); ++ ret = stat(str, &buf); ++ g_free(str); ++ if (ret < 0) ++ continue; ++ ++ g_string_append_printf(result, "%s/", d->d_name); ++ break; + } + } + +-- +1.7.9.5 +meta/recipes-connectivity/connman/connman_1.3.bb +4
-2@@ -5,6 +5,8 @@ SRCREV = "3c0fa84091524c7cd6237744f2088ffee2f1d5ad" SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \ file://add_xuser_dbus_permission.patch \ - file://connman" + file://connman \ + file://0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch \ + file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch" S = "${WORKDIR}/git" -PR = "${INC_PR}.0" +PR = "${INC_PR}.1"
PATCH v4 4/4 connman: fix crashes on startup on PPC/MIPS
In reply to Andrei GherzanFrom: Ross Burton <[email protected]>
It appears that when there is no existing connman state there is memory corruption which causes free() on MIPS/PPC to abort.
--- ...ck-that-the-string-isn-t-empty-before-spl.patch | 37 ++++++++++++++++++++ meta/recipes-connectivity/connman/connman_1.3.bb | 5 +-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-connectivity/connman/connman/0001-storage-check-that-the-string-isn-t-empty-before-spl.patch
meta/recipes-connectivity/connman/connman/0001-storage-check-that-the-string-isn-t-empty-before-spl.patch new file +37 -0
@@ -0,0 +1,37 @@ +From ea8c7b3efce4c1762411e073893e948de5d552d6 Mon Sep 17 00:00:00 2001 +From: Ross Burton <[email protected]> +Date: Tue, 17 Jul 2012 16:04:12 +0100 +Subject: [PATCH] storage: check that the string isn't empty before splitting + +If the string was non-NULL but empty (str="\0"), the following \0 assignment +would write to str[-1] and thus cause memory corruption. + +On PPC and MIPS, this was causing crashes in glibc. + +Signed-off-by: Ross Burton <[email protected]> +Upstream-Status: Submitted + +--- + src/storage.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/storage.c b/src/storage.c +index 47bd0cb..20766a3 100644 +--- a/src/storage.c ++++ b/src/storage.c +@@ -212,7 +212,11 @@ gchar **connman_storage_get_services() + closedir(dir); + + str = g_string_free(result, FALSE); +- if (str) { ++ if (str && str[0] != '\0') { ++ /* ++ * Remove the trailing separator so that services doesn't end up ++ * with an empty element. ++ */ + str[strlen(str) - 1] = '\0'; + services = g_strsplit(str, "/", -1); + } +-- +1.7.10.4 +
meta/recipes-connectivity/connman/connman_1.3.bb +3 -2
@@ -7,6 +7,7 @@ SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ file://add_xuser_dbus_permission.patch \ file://connman \ file://0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch \ - file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch" + file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch \ + file://storage-check-that-the-string-isn-t-empty-before-spl.patch" S = "${WORKDIR}/git" -PR = "${INC_PR}.1" +PR = "${INC_PR}.2"
Signature · 1 line
1.7.9.5
Re: [PATCH V4 4/4] connman: fix crashes on startup on PPC/MIPS
Quoted 60 lines · Andrei Gherzan
From: Ross Burton <[email protected]>
It appears that when there is no existing connman state there is memory corruption which causes
free()on MIPS/PPC to abort.Signed-off-by Ross Burton <[email protected]>--- ...ck-that-the-string-isn-t-empty-before-spl.patch | 37 ++++++++++++++++++++ meta/recipes-connectivity/connman/connman_1.3.bb | 5 +-- 2 files changed, 40 insertions(+), 2 deletions(-)create mode 100644
meta/recipes-connectivity/connman/connman/0001-storage-check-that-the-string-isn-t-empty-before-spl.patchmeta/recipes-connectivity/connman/connman/0001-storage-check-that-the-string-isn-t-empty-before-spl.patch new file +37
-0@@ -0,0 +1,37 @@ +From ea8c7b3efce4c1762411e073893e948de5d552d6 Mon Sep 17 00:00:00 2001 +From: Ross Burton <[email protected]> +Date: Tue, 17 Jul 2012 16:04:12 +0100 +Subject: [PATCH] storage: check that the string isn't empty before splitting + +If the string was non-NULL but empty (str="\0"), the following \0 assignment +would write to str[-1] and thus cause memory corruption. + +On PPC and MIPS, this was causing crashes in glibc. + +Signed-off-by: Ross Burton <[email protected]> +Upstream-Status: Submitted + +--- + src/storage.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/storage.c b/src/storage.c +index 47bd0cb..20766a3 100644 +--- a/src/storage.c ++++ b/src/storage.c +@@ -212,7 +212,11 @@ gchar **connman_storage_get_services() + closedir(dir); + + str = g_string_free(result, FALSE); +- if (str) { ++ if (str && str[0] != '\0') { ++ /* ++ * Remove the trailing separator so that services doesn't end up ++ * with an empty element. ++ */ + str[strlen(str) - 1] = '\0'; + services = g_strsplit(str, "/", -1); + } +-- +1.7.10.4 +meta/recipes-connectivity/connman/connman_1.3.bb +0
-0
meta/recipes-connectivity/connman/connman_1.3.bb SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ · line 11
Quoted 6 lines
meta/recipes-connectivity/connman/connman_1.3.bb +2
-1@@ -7,6 +7,7 @@ SRC_URI = "git://git.kernel.org/pub/scm/network/connman/connman.git \ file://add_xuser_dbus_permission.patch \ file://connman \ file://0002-storage.c-If-there-is-no-d_type-support-use-fstatat.patch \ - file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch" + file://0001-timezone.c-If-there-is-no-d_type-support-use-fstatat.patch \ + file://storage-check-that-the-string-isn-t-empty-before-spl.patch"
Patch name here does not match the filename created above!
Sau!
Quoted 4 lines
meta/recipes-connectivity/connman/connman_1.3.bb +1
-1S = "${WORKDIR}/git" -PR = "${INC_PR}.1" +PR = "${INC_PR}.2"