Bluetooth: Store parameter length with pending mgmt commands
authorJohan Hedberg <johan.hedberg@intel.com>
Fri, 5 Dec 2014 11:36:01 +0000 (13:36 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 5 Dec 2014 11:46:09 +0000 (12:46 +0100)
As preparation for making generic cmd_complete responses possible we'll
need to track the parameter length in addition to just a pointer to
them. This patch adds the necessary variable to the pending_cmd struct.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/mgmt.c

index 98537b07b720b6259b8ccfa7cd41825d872eacb4..56c7838c0a41cd87ec87df86d61ed1b98bc29537 100644 (file)
@@ -135,6 +135,7 @@ struct pending_cmd {
        u16 opcode;
        int index;
        void *param;
+       size_t param_len;
        struct sock *sk;
        void *user_data;
        void (*cmd_complete)(struct pending_cmd *cmd, u8 status);
@@ -1205,14 +1206,13 @@ static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
        cmd->opcode = opcode;
        cmd->index = hdev->id;
 
-       cmd->param = kmalloc(len, GFP_KERNEL);
+       cmd->param = kmemdup(data, len, GFP_KERNEL);
        if (!cmd->param) {
                kfree(cmd);
                return NULL;
        }
 
-       if (data)
-               memcpy(cmd->param, data, len);
+       cmd->param_len = len;
 
        cmd->sk = sk;
        sock_hold(sk);