diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2012-12-18 11:20:01 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-12-18 11:20:01 +0200 |
commit | 1ff99151e058947fe2e531084645e0eef7a1afed (patch) | |
tree | 755b1e0eacf321edc00a44c5bd21600473d08043 /plugins/neard.c | |
parent | 34f32461e04b53df6523ac5fd15bff3e4cb7b7ab (diff) | |
download | bluez-1ff99151e058947fe2e531084645e0eef7a1afed.tar.gz |
neard: Fix agent reference leak
Diffstat (limited to 'plugins/neard.c')
-rw-r--r-- | plugins/neard.c | 11 |
1 files 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); |