From f4374b0790e4dd8a549c95ee8fbc12ba2d6a6248 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 25 Sep 2013 11:32:19 +0300 Subject: [PATCH] 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. --- obexd/src/service.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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; -- 2.11.0