Commit 4637f7c0 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg

Bluetooth: Update L2CAP socket source address from HCI connection

When having LE connections, the source address is not always the
public address of the controller. So update the socket address
based on the actual used source address of the HCI connection.

This also remove the pointless source address pointer and adds
a proper lock around the socket structure.
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent f1560463
...@@ -1756,17 +1756,16 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, ...@@ -1756,17 +1756,16 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
bdaddr_t *dst, u8 dst_type) bdaddr_t *dst, u8 dst_type)
{ {
struct sock *sk = chan->sk; struct sock *sk = chan->sk;
bdaddr_t *src = &bt_sk(sk)->src;
struct l2cap_conn *conn; struct l2cap_conn *conn;
struct hci_conn *hcon; struct hci_conn *hcon;
struct hci_dev *hdev; struct hci_dev *hdev;
__u8 auth_type; __u8 auth_type;
int err; 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)); dst_type, __le16_to_cpu(psm));
hdev = hci_get_route(dst, src); hdev = hci_get_route(dst, &bt_sk(sk)->src);
if (!hdev) if (!hdev)
return -EHOSTUNREACH; return -EHOSTUNREACH;
...@@ -1858,7 +1857,9 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, ...@@ -1858,7 +1857,9 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
} }
/* Update source addr of the socket */ /* 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_unlock(chan);
l2cap_chan_add(conn, chan); l2cap_chan_add(conn, chan);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment