Loading net/bluetooth/smp.c +14 −6 Original line number Original line Diff line number Diff line Loading @@ -496,18 +496,23 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level) static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) { { BT_DBG("conn %p", conn); struct smp_cmd_encrypt_info *rp = (void *) skb->data; /* FIXME: store the ltk */ skb_pull(skb, sizeof(*rp)); memcpy(conn->tk, rp->ltk, sizeof(conn->tk)); return 0; return 0; } } static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb) static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb) { { struct smp_cmd_pairing *paircmd = (void *) &conn->prsp[1]; struct smp_cmd_master_ident *rp = (void *) skb->data; u8 keydist = paircmd->init_key_dist; skb_pull(skb, sizeof(*rp)); BT_DBG("keydist 0x%x", keydist); hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv, /* FIXME: store ediv and rand */ rp->rand, conn->tk); smp_distribute_keys(conn, 1); smp_distribute_keys(conn, 1); Loading Loading @@ -632,6 +637,9 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force) smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); hci_add_ltk(conn->hcon->hdev, 1, conn->dst, ediv, ident.rand, enc.ltk); ident.ediv = cpu_to_le16(ediv); ident.ediv = cpu_to_le16(ediv); smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident); smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident); Loading Loading
net/bluetooth/smp.c +14 −6 Original line number Original line Diff line number Diff line Loading @@ -496,18 +496,23 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level) static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) { { BT_DBG("conn %p", conn); struct smp_cmd_encrypt_info *rp = (void *) skb->data; /* FIXME: store the ltk */ skb_pull(skb, sizeof(*rp)); memcpy(conn->tk, rp->ltk, sizeof(conn->tk)); return 0; return 0; } } static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb) static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb) { { struct smp_cmd_pairing *paircmd = (void *) &conn->prsp[1]; struct smp_cmd_master_ident *rp = (void *) skb->data; u8 keydist = paircmd->init_key_dist; skb_pull(skb, sizeof(*rp)); BT_DBG("keydist 0x%x", keydist); hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv, /* FIXME: store ediv and rand */ rp->rand, conn->tk); smp_distribute_keys(conn, 1); smp_distribute_keys(conn, 1); Loading Loading @@ -632,6 +637,9 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force) smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); hci_add_ltk(conn->hcon->hdev, 1, conn->dst, ediv, ident.rand, enc.ltk); ident.ediv = cpu_to_le16(ediv); ident.ediv = cpu_to_le16(ediv); smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident); smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident); Loading