diff options
| -rw-r--r-- | include/net/bluetooth/mgmt.h | 8 | ||||
| -rw-r--r-- | net/bluetooth/mgmt.c | 107 |
2 files changed, 56 insertions, 59 deletions
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 36e68b4551af..7e3d38bfaec3 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
| @@ -184,7 +184,6 @@ struct mgmt_cp_disconnect { | |||
| 184 | } __packed; | 184 | } __packed; |
| 185 | struct mgmt_rp_disconnect { | 185 | struct mgmt_rp_disconnect { |
| 186 | struct mgmt_addr_info addr; | 186 | struct mgmt_addr_info addr; |
| 187 | __u8 status; | ||
| 188 | } __packed; | 187 | } __packed; |
| 189 | 188 | ||
| 190 | #define MGMT_OP_GET_CONNECTIONS 0x0015 | 189 | #define MGMT_OP_GET_CONNECTIONS 0x0015 |
| @@ -201,7 +200,6 @@ struct mgmt_cp_pin_code_reply { | |||
| 201 | } __packed; | 200 | } __packed; |
| 202 | struct mgmt_rp_pin_code_reply { | 201 | struct mgmt_rp_pin_code_reply { |
| 203 | struct mgmt_addr_info addr; | 202 | struct mgmt_addr_info addr; |
| 204 | uint8_t status; | ||
| 205 | } __packed; | 203 | } __packed; |
| 206 | 204 | ||
| 207 | #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017 | 205 | #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017 |
| @@ -221,7 +219,6 @@ struct mgmt_cp_pair_device { | |||
| 221 | } __packed; | 219 | } __packed; |
| 222 | struct mgmt_rp_pair_device { | 220 | struct mgmt_rp_pair_device { |
| 223 | struct mgmt_addr_info addr; | 221 | struct mgmt_addr_info addr; |
| 224 | __u8 status; | ||
| 225 | } __packed; | 222 | } __packed; |
| 226 | 223 | ||
| 227 | #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A | 224 | #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A |
| @@ -233,7 +230,6 @@ struct mgmt_cp_unpair_device { | |||
| 233 | } __packed; | 230 | } __packed; |
| 234 | struct mgmt_rp_unpair_device { | 231 | struct mgmt_rp_unpair_device { |
| 235 | struct mgmt_addr_info addr; | 232 | struct mgmt_addr_info addr; |
| 236 | __u8 status; | ||
| 237 | }; | 233 | }; |
| 238 | 234 | ||
| 239 | #define MGMT_OP_USER_CONFIRM_REPLY 0x001C | 235 | #define MGMT_OP_USER_CONFIRM_REPLY 0x001C |
| @@ -242,7 +238,6 @@ struct mgmt_cp_user_confirm_reply { | |||
| 242 | } __packed; | 238 | } __packed; |
| 243 | struct mgmt_rp_user_confirm_reply { | 239 | struct mgmt_rp_user_confirm_reply { |
| 244 | struct mgmt_addr_info addr; | 240 | struct mgmt_addr_info addr; |
| 245 | __u8 status; | ||
| 246 | } __packed; | 241 | } __packed; |
| 247 | 242 | ||
| 248 | #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D | 243 | #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D |
| @@ -257,7 +252,6 @@ struct mgmt_cp_user_passkey_reply { | |||
| 257 | } __packed; | 252 | } __packed; |
| 258 | struct mgmt_rp_user_passkey_reply { | 253 | struct mgmt_rp_user_passkey_reply { |
| 259 | struct mgmt_addr_info addr; | 254 | struct mgmt_addr_info addr; |
| 260 | __u8 status; | ||
| 261 | } __packed; | 255 | } __packed; |
| 262 | 256 | ||
| 263 | #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F | 257 | #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F |
| @@ -297,7 +291,6 @@ struct mgmt_cp_confirm_name { | |||
| 297 | } __packed; | 291 | } __packed; |
| 298 | struct mgmt_rp_confirm_name { | 292 | struct mgmt_rp_confirm_name { |
| 299 | struct mgmt_addr_info addr; | 293 | struct mgmt_addr_info addr; |
| 300 | __u8 status; | ||
| 301 | } __packed; | 294 | } __packed; |
| 302 | 295 | ||
| 303 | #define MGMT_OP_BLOCK_DEVICE 0x0026 | 296 | #define MGMT_OP_BLOCK_DEVICE 0x0026 |
| @@ -313,6 +306,7 @@ struct mgmt_cp_unblock_device { | |||
| 313 | #define MGMT_EV_CMD_COMPLETE 0x0001 | 306 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
| 314 | struct mgmt_ev_cmd_complete { | 307 | struct mgmt_ev_cmd_complete { |
| 315 | __le16 opcode; | 308 | __le16 opcode; |
| 309 | __u8 status; | ||
| 316 | __u8 data[0]; | 310 | __u8 data[0]; |
| 317 | } __packed; | 311 | } __packed; |
| 318 | 312 | ||
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 89754bbcd02b..61d0250bd77e 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
| @@ -227,8 +227,8 @@ static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status) | |||
| 227 | return err; | 227 | return err; |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | static int cmd_complete(struct sock *sk, u16 index, u16 cmd, void *rp, | 230 | static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status, |
| 231 | size_t rp_len) | 231 | void *rp, size_t rp_len) |
| 232 | { | 232 | { |
| 233 | struct sk_buff *skb; | 233 | struct sk_buff *skb; |
| 234 | struct mgmt_hdr *hdr; | 234 | struct mgmt_hdr *hdr; |
| @@ -249,6 +249,7 @@ static int cmd_complete(struct sock *sk, u16 index, u16 cmd, void *rp, | |||
| 249 | 249 | ||
| 250 | ev = (void *) skb_put(skb, sizeof(*ev) + rp_len); | 250 | ev = (void *) skb_put(skb, sizeof(*ev) + rp_len); |
| 251 | put_unaligned_le16(cmd, &ev->opcode); | 251 | put_unaligned_le16(cmd, &ev->opcode); |
| 252 | ev->status = status; | ||
| 252 | 253 | ||
| 253 | if (rp) | 254 | if (rp) |
| 254 | memcpy(ev->data, rp, rp_len); | 255 | memcpy(ev->data, rp, rp_len); |
| @@ -269,7 +270,7 @@ static int read_version(struct sock *sk) | |||
| 269 | rp.version = MGMT_VERSION; | 270 | rp.version = MGMT_VERSION; |
| 270 | put_unaligned_le16(MGMT_REVISION, &rp.revision); | 271 | put_unaligned_le16(MGMT_REVISION, &rp.revision); |
| 271 | 272 | ||
| 272 | return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, &rp, | 273 | return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp, |
| 273 | sizeof(rp)); | 274 | sizeof(rp)); |
| 274 | } | 275 | } |
| 275 | 276 | ||
| @@ -299,7 +300,7 @@ static int read_commands(struct sock *sk) | |||
| 299 | for (i = 0; i < num_events; i++, opcode++) | 300 | for (i = 0; i < num_events; i++, opcode++) |
| 300 | put_unaligned_le16(mgmt_events[i], opcode); | 301 | put_unaligned_le16(mgmt_events[i], opcode); |
| 301 | 302 | ||
| 302 | err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, rp, | 303 | err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp, |
| 303 | rp_size); | 304 | rp_size); |
| 304 | kfree(rp); | 305 | kfree(rp); |
| 305 | 306 | ||
| @@ -347,7 +348,7 @@ static int read_index_list(struct sock *sk) | |||
| 347 | 348 | ||
| 348 | read_unlock(&hci_dev_list_lock); | 349 | read_unlock(&hci_dev_list_lock); |
| 349 | 350 | ||
| 350 | err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, rp, | 351 | err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp, |
| 351 | rp_len); | 352 | rp_len); |
| 352 | 353 | ||
| 353 | kfree(rp); | 354 | kfree(rp); |
| @@ -637,7 +638,7 @@ static int read_controller_info(struct sock *sk, u16 index) | |||
| 637 | hci_dev_unlock(hdev); | 638 | hci_dev_unlock(hdev); |
| 638 | hci_dev_put(hdev); | 639 | hci_dev_put(hdev); |
| 639 | 640 | ||
| 640 | return cmd_complete(sk, index, MGMT_OP_READ_INFO, &rp, sizeof(rp)); | 641 | return cmd_complete(sk, index, MGMT_OP_READ_INFO, 0, &rp, sizeof(rp)); |
| 641 | } | 642 | } |
| 642 | 643 | ||
| 643 | static void mgmt_pending_free(struct pending_cmd *cmd) | 644 | static void mgmt_pending_free(struct pending_cmd *cmd) |
| @@ -717,7 +718,8 @@ static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev) | |||
| 717 | { | 718 | { |
| 718 | __le32 settings = cpu_to_le32(get_current_settings(hdev)); | 719 | __le32 settings = cpu_to_le32(get_current_settings(hdev)); |
| 719 | 720 | ||
| 720 | return cmd_complete(sk, hdev->id, opcode, &settings, sizeof(settings)); | 721 | return cmd_complete(sk, hdev->id, opcode, 0, &settings, |
| 722 | sizeof(settings)); | ||
| 721 | } | 723 | } |
| 722 | 724 | ||
| 723 | static int set_powered(struct sock *sk, u16 index, void *data, u16 len) | 725 | static int set_powered(struct sock *sk, u16 index, void *data, u16 len) |
| @@ -1124,7 +1126,7 @@ static int add_uuid(struct sock *sk, u16 index, void *data, u16 len) | |||
| 1124 | if (err < 0) | 1126 | if (err < 0) |
| 1125 | goto failed; | 1127 | goto failed; |
| 1126 | 1128 | ||
| 1127 | err = cmd_complete(sk, index, MGMT_OP_ADD_UUID, NULL, 0); | 1129 | err = cmd_complete(sk, index, MGMT_OP_ADD_UUID, 0, NULL, 0); |
| 1128 | 1130 | ||
| 1129 | failed: | 1131 | failed: |
| 1130 | hci_dev_unlock(hdev); | 1132 | hci_dev_unlock(hdev); |
| @@ -1185,7 +1187,7 @@ static int remove_uuid(struct sock *sk, u16 index, void *data, u16 len) | |||
| 1185 | if (err < 0) | 1187 | if (err < 0) |
| 1186 | goto unlock; | 1188 | goto unlock; |
| 1187 | 1189 | ||
| 1188 | err = cmd_complete(sk, index, MGMT_OP_REMOVE_UUID, NULL, 0); | 1190 | err = cmd_complete(sk, index, MGMT_OP_REMOVE_UUID, 0, NULL, 0); |
| 1189 | 1191 | ||
| 1190 | unlock: | 1192 | unlock: |
| 1191 | hci_dev_unlock(hdev); | 1193 | hci_dev_unlock(hdev); |
| @@ -1226,7 +1228,8 @@ static int set_dev_class(struct sock *sk, u16 index, void *data, u16 len) | |||
| 1226 | err = update_class(hdev); | 1228 | err = update_class(hdev); |
| 1227 | 1229 | ||
| 1228 | if (err == 0) | 1230 | if (err == 0) |
| 1229 | err = cmd_complete(sk, index, MGMT_OP_SET_DEV_CLASS, NULL, 0); | 1231 | err = cmd_complete(sk, index, MGMT_OP_SET_DEV_CLASS, 0, |
| 1232 | NULL, 0); | ||
| 1230 | 1233 | ||
| 1231 | hci_dev_unlock(hdev); | 1234 | hci_dev_unlock(hdev); |
| 1232 | hci_dev_put(hdev); | 1235 | hci_dev_put(hdev); |
| @@ -1282,7 +1285,7 @@ static int load_link_keys(struct sock *sk, u16 index, void *data, u16 len) | |||
