diff options
Diffstat (limited to 'meta/recipes-connectivity/bluez5/bluez5/core-profile-Fix-possible-crash-when-registering-pro.patch')
-rw-r--r-- | meta/recipes-connectivity/bluez5/bluez5/core-profile-Fix-possible-crash-when-registering-pro.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/meta/recipes-connectivity/bluez5/bluez5/core-profile-Fix-possible-crash-when-registering-pro.patch b/meta/recipes-connectivity/bluez5/bluez5/core-profile-Fix-possible-crash-when-registering-pro.patch new file mode 100644 index 0000000000..5c6cee1cff --- /dev/null +++ b/meta/recipes-connectivity/bluez5/bluez5/core-profile-Fix-possible-crash-when-registering-pro.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From bc4dbda3362d3654447d8ae6525cac1540b7d705 Mon Sep 17 00:00:00 2001 | ||
2 | From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | ||
3 | Date: Thu, 5 Nov 2015 15:14:50 +0200 | ||
4 | Subject: [PATCH] core/profile: Fix possible crash when registering profiles | ||
5 | |||
6 | Upstream-Status: Backport | ||
7 | |||
8 | Profiles under ext_profiles are local and should no be mixed with other | ||
9 | external profiles since its type is different which can may cause invalid | ||
10 | memory when accessing member of ext_profile struct. | ||
11 | --- | ||
12 | src/profile.c | 14 ++------------ | ||
13 | 1 file changed, 2 insertions(+), 12 deletions(-) | ||
14 | |||
15 | diff --git a/src/profile.c b/src/profile.c | ||
16 | index 49445d7..5a4f09c 100644 | ||
17 | --- a/src/profile.c | ||
18 | +++ b/src/profile.c | ||
19 | @@ -719,19 +719,13 @@ void btd_profile_foreach(void (*func)(struct btd_profile *p, void *data), | ||
20 | |||
21 | int btd_profile_register(struct btd_profile *profile) | ||
22 | { | ||
23 | - if (profile->external) | ||
24 | - ext_profiles = g_slist_append(ext_profiles, profile); | ||
25 | - else | ||
26 | - profiles = g_slist_append(profiles, profile); | ||
27 | + profiles = g_slist_append(profiles, profile); | ||
28 | return 0; | ||
29 | } | ||
30 | |||
31 | void btd_profile_unregister(struct btd_profile *profile) | ||
32 | { | ||
33 | - if (profile->external) | ||
34 | - ext_profiles = g_slist_remove(ext_profiles, profile); | ||
35 | - else | ||
36 | - profiles = g_slist_remove(profiles, profile); | ||
37 | + profiles = g_slist_remove(profiles, profile); | ||
38 | } | ||
39 | |||
40 | static struct ext_profile *find_ext_profile(const char *owner, | ||
41 | @@ -742,10 +736,6 @@ static struct ext_profile *find_ext_profile(const char *owner, | ||
42 | for (l = ext_profiles; l != NULL; l = g_slist_next(l)) { | ||
43 | struct ext_profile *ext = l->data; | ||
44 | |||
45 | - /* | ||
46 | - * Owner and path can be NULL if profile was registered by a | ||
47 | - * plugin using external flag. | ||
48 | - */ | ||
49 | if (g_strcmp0(ext->owner, owner)) | ||
50 | continue; | ||
51 | |||
52 | -- | ||
53 | 2.5.0 | ||
54 | |||