2012-06-13 00:02:43

by Vishal Agarwal

[permalink] [raw]
Subject: [PATCH v1] Bluetooth: Fix sending HCI_Disconnect only after connection

HCI_Disconnect should only be sent after connection is established.
If connection is not yet established and HCI_Disconnect is called
then disconnection complete will be received with a handle which
does not exist and hence this event will be ignored.
But as mgmt.c will not receive this event, its variable for pending
command is not cleared.This will result in future Disconnect commands
for that BD Address to be blocked with error busy.

Signed-off-by: Vishal Agarwal <[email protected]>
---
net/bluetooth/mgmt.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 958f764..3a857bf 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -1598,7 +1598,7 @@ static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
else
conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);

- if (!conn) {
+ if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
err = cmd_status(sk, hdev->id, MGMT_OP_DISCONNECT,
MGMT_STATUS_NOT_CONNECTED);
goto failed;
--
1.7.0.4



2012-06-14 15:27:48

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [PATCH v1] Bluetooth: Fix sending HCI_Disconnect only after connection

Hi Vishal,

* Vishal Agarwal <[email protected]> [2012-06-13 05:32:43 +0530]:

> HCI_Disconnect should only be sent after connection is established.
> If connection is not yet established and HCI_Disconnect is called
> then disconnection complete will be received with a handle which
> does not exist and hence this event will be ignored.
> But as mgmt.c will not receive this event, its variable for pending
> command is not cleared.This will result in future Disconnect commands
> for that BD Address to be blocked with error busy.
>
> Signed-off-by: Vishal Agarwal <[email protected]>
> ---
> net/bluetooth/mgmt.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)

Patch has been applied to the bluetooth.git tree (with the fix proposed by
Johan), thanks.

Gustavo

2012-06-13 05:19:41

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH v1] Bluetooth: Fix sending HCI_Disconnect only after connection

On Wed, Jun 13, 2012, Vishal Agarwal wrote:
> HCI_Disconnect should only be sent after connection is established.
> If connection is not yet established and HCI_Disconnect is called
> then disconnection complete will be received with a handle which
> does not exist and hence this event will be ignored.
> But as mgmt.c will not receive this event, its variable for pending
> command is not cleared.This will result in future Disconnect commands
> for that BD Address to be blocked with error busy.
>
> Signed-off-by: Vishal Agarwal <[email protected]>
> ---
> net/bluetooth/mgmt.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)

Acked-by: Johan Hedberg <[email protected]>

Btw, the summary line might be a bit more understandable if you change
"only after connection" to "only when connected".

Johan