Bluetooth: Fix PIN/Confirm/Passkey response parameters
authorJohan Hedberg <johan.hedberg@intel.com>
Fri, 15 Mar 2013 22:07:16 +0000 (17:07 -0500)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Mon, 18 Mar 2013 18:36:05 +0000 (15:36 -0300)
The only valid mgmt response to these pairing related commands is a
mgmt_cmd_complete and the returned parameters should contain the address
and address type of the remote device.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/mgmt.c

index 8587229ed1d94ebf2ddd49ebe8e8c485fbc27223..03e7e732215f7e11d9cfca1c6b7c93c70dc96090 100644 (file)
@@ -2310,8 +2310,9 @@ static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
        hci_dev_lock(hdev);
 
        if (!hdev_is_powered(hdev)) {
-               err = cmd_status(sk, hdev->id, mgmt_op,
-                                MGMT_STATUS_NOT_POWERED);
+               err = cmd_complete(sk, hdev->id, mgmt_op,
+                                  MGMT_STATUS_NOT_POWERED, addr,
+                                  sizeof(*addr));
                goto done;
        }
 
@@ -2321,8 +2322,9 @@ static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
                conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
 
        if (!conn) {
-               err = cmd_status(sk, hdev->id, mgmt_op,
-                                MGMT_STATUS_NOT_CONNECTED);
+               err = cmd_complete(sk, hdev->id, mgmt_op,
+                                  MGMT_STATUS_NOT_CONNECTED, addr,
+                                  sizeof(*addr));
                goto done;
        }
 
@@ -2331,11 +2333,13 @@ static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
                err = smp_user_confirm_reply(conn, mgmt_op, passkey);
 
                if (!err)
-                       err = cmd_status(sk, hdev->id, mgmt_op,
-                                        MGMT_STATUS_SUCCESS);
+                       err = cmd_complete(sk, hdev->id, mgmt_op,
+                                          MGMT_STATUS_SUCCESS, addr,
+                                          sizeof(*addr));
                else
-                       err = cmd_status(sk, hdev->id, mgmt_op,
-                                        MGMT_STATUS_FAILED);
+                       err = cmd_complete(sk, hdev->id, mgmt_op,
+                                          MGMT_STATUS_FAILED, addr,
+                                          sizeof(*addr));
 
                goto done;
        }