bdaddr_t *dst, u8 dst_type)
{
struct sock *sk = chan->sk;
- bdaddr_t *src = &bt_sk(sk)->src;
struct l2cap_conn *conn;
struct hci_conn *hcon;
struct hci_dev *hdev;
__u8 auth_type;
int err;
- BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", src, dst,
+ BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &bt_sk(sk)->src, dst,
dst_type, __le16_to_cpu(psm));
- hdev = hci_get_route(dst, src);
+ hdev = hci_get_route(dst, &bt_sk(sk)->src);
if (!hdev)
return -EHOSTUNREACH;
}
/* Update source addr of the socket */
- bacpy(src, &hdev->bdaddr);
+ lock_sock(sk);
+ bacpy(&bt_sk(sk)->src, &hcon->src);
+ release_sock(sk);
l2cap_chan_unlock(chan);
l2cap_chan_add(conn, chan);