Bluetooth: Fix returning proper cmd_complete for mgmt_block/unblock
authorJohan Hedberg <johan.hedberg@intel.com>
Sun, 20 Jan 2013 12:27:22 +0000 (14:27 +0200)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Wed, 23 Jan 2013 04:03:33 +0000 (02:03 -0200)
The Block/Unblock Device Management commands should return Command
Complete instead of Command Status whenever possible so that user space
can distinguish exactly which command failed in the case of multiple
commands. This patch does the necessary changes in the command handler
to return the right event to user space.

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 7b8bc7c658b2e1e0d997843d41508c350929b139..e7f944f52ff27e0a1a2e069dd8185804f4084ef5 100644 (file)
@@ -2598,8 +2598,9 @@ static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
        BT_DBG("%s", hdev->name);
 
        if (!bdaddr_type_is_valid(cp->addr.type))
-               return cmd_status(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
-                                 MGMT_STATUS_INVALID_PARAMS);
+               return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
+                                   MGMT_STATUS_INVALID_PARAMS,
+                                   &cp->addr, sizeof(cp->addr));
 
        hci_dev_lock(hdev);
 
@@ -2627,8 +2628,9 @@ static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
        BT_DBG("%s", hdev->name);
 
        if (!bdaddr_type_is_valid(cp->addr.type))
-               return cmd_status(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
-                                 MGMT_STATUS_INVALID_PARAMS);
+               return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
+                                   MGMT_STATUS_INVALID_PARAMS,
+                                   &cp->addr, sizeof(cp->addr));
 
        hci_dev_lock(hdev);