Commit d7e5e76b authored by Johan Hedberg's avatar Johan Hedberg

Bluetooth: Always use l2cap_chan->psm for returning PSM to user space

The l2cap_chan->psm value is always set to a valid value for a
connection oriented channel. The l2cap_chan->sport is used for tracking
local PSM allocations but will not always have a proper value, such as
with connected sockets derived from a listening socket. This patch fixes
the sock_getname callback to always use chan->psm when returning address
information.
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 35364c99
...@@ -373,13 +373,13 @@ static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, ...@@ -373,13 +373,13 @@ static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
addr->sa_family = AF_BLUETOOTH; addr->sa_family = AF_BLUETOOTH;
*len = sizeof(struct sockaddr_l2); *len = sizeof(struct sockaddr_l2);
if (peer) {
la->l2_psm = chan->psm; la->l2_psm = chan->psm;
if (peer) {
bacpy(&la->l2_bdaddr, &chan->dst); bacpy(&la->l2_bdaddr, &chan->dst);
la->l2_cid = cpu_to_le16(chan->dcid); la->l2_cid = cpu_to_le16(chan->dcid);
la->l2_bdaddr_type = chan->dst_type; la->l2_bdaddr_type = chan->dst_type;
} else { } else {
la->l2_psm = chan->sport;
bacpy(&la->l2_bdaddr, &chan->src); bacpy(&la->l2_bdaddr, &chan->src);
la->l2_cid = cpu_to_le16(chan->scid); la->l2_cid = cpu_to_le16(chan->scid);
la->l2_bdaddr_type = chan->src_type; la->l2_bdaddr_type = chan->src_type;
......
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