* [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection
@ 2014-01-28 23:16 johan.hedberg
2014-01-28 23:16 ` [PATCH 2/4] Bluetooth: Refuse peer L2CAP address reading when not connected johan.hedberg
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: johan.hedberg @ 2014-01-28 23:16 UTC (permalink / raw)
To: linux-bluetooth
From: Johan Hedberg <johan.hedberg@intel.com>
The sport variable is used to track the allocation of the local PSM
database to ensure no two sockets take the same local PSM. It is
acquired upon bind() but needs to be freed up if the socket ends up
becoming a client one. This patch adds the clearing of the value when
l2cap_chan_connect is called.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_core.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index d2ef49b54aa2..f583988a4653 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -7126,6 +7126,13 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
l2cap_state_change(chan, BT_CONNECT);
__set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
+ /* Release chan->sport so that it can be reused by other
+ * sockets (as it's only used for listening sockets).
+ */
+ write_lock(&chan_list_lock);
+ chan->sport = 0;
+ write_unlock(&chan_list_lock);
+
if (hcon->state == BT_CONNECTED) {
if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
__clear_chan_timer(chan);
--
1.8.5.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/4] Bluetooth: Refuse peer L2CAP address reading when not connected
2014-01-28 23:16 [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection johan.hedberg
@ 2014-01-28 23:16 ` johan.hedberg
2014-01-28 23:29 ` Marcel Holtmann
2014-01-28 23:16 ` [PATCH 3/4] Bluetooth: Refuse peer RFCOMM " johan.hedberg
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: johan.hedberg @ 2014-01-28 23:16 UTC (permalink / raw)
To: linux-bluetooth
From: Johan Hedberg <johan.hedberg@intel.com>
When we're not connected the peer address information is undefined. This
patch fixes the remote address getting to return a proper error in case
the state is anything else than BT_CONNECTED.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_sock.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 304fc8589af4..a0b8c7aa448e 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -366,6 +366,9 @@ static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
BT_DBG("sock %p, sk %p", sock, sk);
+ if (peer && sk->sk_state != BT_CONNECTED)
+ return -ENOTCONN;
+
memset(la, 0, sizeof(struct sockaddr_l2));
addr->sa_family = AF_BLUETOOTH;
*len = sizeof(struct sockaddr_l2);
--
1.8.5.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 3/4] Bluetooth: Refuse peer RFCOMM address reading when not connected
2014-01-28 23:16 [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection johan.hedberg
2014-01-28 23:16 ` [PATCH 2/4] Bluetooth: Refuse peer L2CAP address reading when not connected johan.hedberg
@ 2014-01-28 23:16 ` johan.hedberg
2014-01-28 23:31 ` Marcel Holtmann
2014-01-28 23:16 ` [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space johan.hedberg
2014-01-28 23:28 ` [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection Marcel Holtmann
3 siblings, 1 reply; 8+ messages in thread
From: johan.hedberg @ 2014-01-28 23:16 UTC (permalink / raw)
To: linux-bluetooth
From: Johan Hedberg <johan.hedberg@intel.com>
When we're not connected the peer address information is undefined. This
patch fixes the remote address getting to return a proper error in case
the sate is anything else than BT_CONNECTED.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/rfcomm/sock.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
index fb8158af1f39..00573fb79030 100644
--- a/net/bluetooth/rfcomm/sock.c
+++ b/net/bluetooth/rfcomm/sock.c
@@ -528,6 +528,9 @@ static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *
BT_DBG("sock %p, sk %p", sock, sk);
+ if (peer && sk->sk_state != BT_CONNECTED)
+ return -ENOTCONN;
+
memset(sa, 0, sizeof(*sa));
sa->rc_family = AF_BLUETOOTH;
sa->rc_channel = rfcomm_pi(sk)->channel;
--
1.8.5.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space
2014-01-28 23:16 [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection johan.hedberg
2014-01-28 23:16 ` [PATCH 2/4] Bluetooth: Refuse peer L2CAP address reading when not connected johan.hedberg
2014-01-28 23:16 ` [PATCH 3/4] Bluetooth: Refuse peer RFCOMM " johan.hedberg
@ 2014-01-28 23:16 ` johan.hedberg
2014-01-28 23:33 ` Marcel Holtmann
2014-01-28 23:28 ` [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection Marcel Holtmann
3 siblings, 1 reply; 8+ messages in thread
From: johan.hedberg @ 2014-01-28 23:16 UTC (permalink / raw)
To: linux-bluetooth
From: Johan Hedberg <johan.hedberg@intel.com>
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: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_sock.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index a0b8c7aa448e..6ca14c411b89 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -373,13 +373,13 @@ static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
addr->sa_family = AF_BLUETOOTH;
*len = sizeof(struct sockaddr_l2);
+ la->l2_psm = chan->psm;
+
if (peer) {
- la->l2_psm = chan->psm;
bacpy(&la->l2_bdaddr, &chan->dst);
la->l2_cid = cpu_to_le16(chan->dcid);
la->l2_bdaddr_type = chan->dst_type;
} else {
- la->l2_psm = chan->sport;
bacpy(&la->l2_bdaddr, &chan->src);
la->l2_cid = cpu_to_le16(chan->scid);
la->l2_bdaddr_type = chan->src_type;
--
1.8.5.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space
2014-01-28 23:16 ` [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space johan.hedberg
@ 2014-01-28 23:33 ` Marcel Holtmann
0 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2014-01-28 23:33 UTC (permalink / raw)
To: Johan Hedberg; +Cc: BlueZ development
Hi Johan,
> 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: Johan Hedberg <johan.hedberg@intel.com>
> ---
> net/bluetooth/l2cap_sock.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
patch has been applied to bluetooth-next tree.
Regards
Marcel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection
2014-01-28 23:16 [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection johan.hedberg
` (2 preceding siblings ...)
2014-01-28 23:16 ` [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space johan.hedberg
@ 2014-01-28 23:28 ` Marcel Holtmann
3 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2014-01-28 23:28 UTC (permalink / raw)
To: Johan Hedberg; +Cc: BlueZ development
Hi Johan,
> The sport variable is used to track the allocation of the local PSM
> database to ensure no two sockets take the same local PSM. It is
> acquired upon bind() but needs to be freed up if the socket ends up
> becoming a client one. This patch adds the clearing of the value when
> l2cap_chan_connect is called.
>
> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
> ---
> net/bluetooth/l2cap_core.c | 7 +++++++
> 1 file changed, 7 insertions(+)
patch has been applied to bluetooth-next tree.
Regards
Marcel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-01-28 23:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-28 23:16 [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection johan.hedberg
2014-01-28 23:16 ` [PATCH 2/4] Bluetooth: Refuse peer L2CAP address reading when not connected johan.hedberg
2014-01-28 23:29 ` Marcel Holtmann
2014-01-28 23:16 ` [PATCH 3/4] Bluetooth: Refuse peer RFCOMM " johan.hedberg
2014-01-28 23:31 ` Marcel Holtmann
2014-01-28 23:16 ` [PATCH 4/4] Bluetooth: Always use l2cap_chan->psm for returning PSM to user space johan.hedberg
2014-01-28 23:33 ` Marcel Holtmann
2014-01-28 23:28 ` [PATCH 1/4] Bluetooth: Free up l2cap_chan->sport when initiating a connection Marcel Holtmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox