From 1ff99151e058947fe2e531084645e0eef7a1afed Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Tue, 18 Dec 2012 11:20:01 +0200 Subject: [PATCH] neard: Fix agent reference leak --- plugins/neard.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/neard.c b/plugins/neard.c index e1f358308..02c340397 100644 --- a/plugins/neard.c +++ b/plugins/neard.c @@ -599,7 +599,7 @@ static int check_adapter(struct btd_adapter *adapter) if (btd_adapter_check_oob_handler(adapter)) return -EINPROGRESS; - if (!btd_adapter_get_pairable(adapter) || !adapter_get_agent(adapter)) + if (!btd_adapter_get_pairable(adapter)) return -ENONET; if (!btd_adapter_ssp_enabled(adapter)) @@ -614,6 +614,7 @@ static DBusMessage *push_oob(DBusConnection *conn, DBusMessage *msg, void *data) struct agent *agent; struct oob_handler *handler; bdaddr_t remote; + uint8_t io_cap; int err; DBG(""); @@ -633,9 +634,13 @@ static DBusMessage *push_oob(DBusConnection *conn, DBusMessage *msg, void *data) return error_reply(msg, -err); agent = adapter_get_agent(adapter); + if (!agent) + return error_reply(msg, -ENONET); - err = adapter_create_bonding(adapter, &remote, BDADDR_BREDR, - agent_get_io_capability(agent)); + io_cap = agent_get_io_capability(agent); + agent_unref(agent); + + err = adapter_create_bonding(adapter, &remote, BDADDR_BREDR, io_cap); if (err < 0) return error_reply(msg, -err); -- 2.47.3