From: Luiz Augusto von Dentz Date: Wed, 25 Sep 2013 08:32:19 +0000 (+0300) Subject: obexd/service: Fix possible leaking drivers list X-Git-Tag: android-x86-4.4-r3~7586 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f4374b0790e4dd8a549c95ee8fbc12ba2d6a6248;p=android-x86%2Fexternal-bluetooth-bluez.git obexd/service: Fix possible leaking drivers list When registering a new driver with obex_service_driver_register there could exist another driver for the service which will cause the drivers list to leak. --- diff --git a/obexd/src/service.c b/obexd/src/service.c index 4d9ebfde8..6b8533b55 100644 --- a/obexd/src/service.c +++ b/obexd/src/service.c @@ -81,14 +81,30 @@ GSList *obex_service_driver_list(uint16_t services) return list; } +static struct obex_service_driver *find_driver(uint16_t service) +{ + GSList *l; + + for (l = drivers; l; l = l->next) { + struct obex_service_driver *driver = l->data; + + if (driver->service == service) + return driver; + } + + return NULL; +} + int obex_service_driver_register(struct obex_service_driver *driver) { + GSList *l; + if (!driver) { error("Invalid driver"); return -EINVAL; } - if (obex_service_driver_list(driver->service)) { + if (find_driver(driver->service)) { error("Permission denied: service %s already registered", driver->name); return -EPERM;