Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type
@ 2015-01-14 23:43 Marcel Holtmann
  2015-01-15 10:25 ` Johan Hedberg
  2015-01-15 11:07 ` Johan Hedberg
  0 siblings, 2 replies; 4+ messages in thread
From: Marcel Holtmann @ 2015-01-14 23:43 UTC (permalink / raw)
  To: linux-bluetooth

The source address and source address type of the LE SMP channel can
either be the public address of the controller or the static random
address configured by the host.

Right now the public address is used for the LE SMP channel and
obviously that is not correct if the controller operates with the
configured static random address.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/smp.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 04e49f8f0982..3e4de935f667 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -2950,11 +2950,30 @@ create_chan:
 
 	l2cap_chan_set_defaults(chan);
 
-	bacpy(&chan->src, &hdev->bdaddr);
-	if (cid == L2CAP_CID_SMP)
-		chan->src_type = BDADDR_LE_PUBLIC;
-	else
+	if (cid == L2CAP_CID_SMP) {
+		/* If usage of static address is forced or if the devices
+		 * does not have a public address, then listen on the static
+		 * address.
+		 *
+		 * In case BR/EDR has been disabled on a dual-mode controller
+		 * and a static address has been configued, then listen on
+		 * the static address instead.
+		 */
+		if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ||
+		    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
+		    (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) &&
+		     bacmp(&hdev->static_addr, BDADDR_ANY))) {
+			bacpy(&chan->src, &hdev->static_addr);
+			chan->src_type = BDADDR_LE_RANDOM;
+		} else {
+			bacpy(&chan->src, &hdev->bdaddr);
+			chan->src_type = BDADDR_LE_PUBLIC;
+		}
+	} else {
+		bacpy(&chan->src, &hdev->bdaddr);
 		chan->src_type = BDADDR_BREDR;
+	}
+
 	chan->state = BT_LISTEN;
 	chan->mode = L2CAP_MODE_BASIC;
 	chan->imtu = L2CAP_DEFAULT_MTU;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type
  2015-01-14 23:43 [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type Marcel Holtmann
@ 2015-01-15 10:25 ` Johan Hedberg
  2015-01-15 10:53   ` Johan Hedberg
  2015-01-15 11:07 ` Johan Hedberg
  1 sibling, 1 reply; 4+ messages in thread
From: Johan Hedberg @ 2015-01-15 10:25 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth

Hi Marcel,

On Wed, Jan 14, 2015, Marcel Holtmann wrote:
> +	if (cid == L2CAP_CID_SMP) {
> +		/* If usage of static address is forced or if the devices
> +		 * does not have a public address, then listen on the static
> +		 * address.
> +		 *
> +		 * In case BR/EDR has been disabled on a dual-mode controller
> +		 * and a static address has been configued, then listen on
> +		 * the static address instead.
> +		 */
> +		if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ||
> +		    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
> +		    (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) &&
> +		     bacmp(&hdev->static_addr, BDADDR_ANY))) {
> +			bacpy(&chan->src, &hdev->static_addr);
> +			chan->src_type = BDADDR_LE_RANDOM;
> +		} else {
> +			bacpy(&chan->src, &hdev->bdaddr);
> +			chan->src_type = BDADDR_LE_PUBLIC;
> +		}

I think this can be simply substituted with:

	hci_copy_identity_address(hdev, &chan->src, &chan->src_type);

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type
  2015-01-15 10:25 ` Johan Hedberg
@ 2015-01-15 10:53   ` Johan Hedberg
  0 siblings, 0 replies; 4+ messages in thread
From: Johan Hedberg @ 2015-01-15 10:53 UTC (permalink / raw)
  To: Marcel Holtmann, linux-bluetooth

Hi,

On Thu, Jan 15, 2015, Johan Hedberg wrote:
> On Wed, Jan 14, 2015, Marcel Holtmann wrote:
> > +	if (cid == L2CAP_CID_SMP) {
> > +		/* If usage of static address is forced or if the devices
> > +		 * does not have a public address, then listen on the static
> > +		 * address.
> > +		 *
> > +		 * In case BR/EDR has been disabled on a dual-mode controller
> > +		 * and a static address has been configued, then listen on
> > +		 * the static address instead.
> > +		 */
> > +		if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ||
> > +		    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
> > +		    (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) &&
> > +		     bacmp(&hdev->static_addr, BDADDR_ANY))) {
> > +			bacpy(&chan->src, &hdev->static_addr);
> > +			chan->src_type = BDADDR_LE_RANDOM;
> > +		} else {
> > +			bacpy(&chan->src, &hdev->bdaddr);
> > +			chan->src_type = BDADDR_LE_PUBLIC;
> > +		}
> 
> I think this can be simply substituted with:
> 
> 	hci_copy_identity_address(hdev, &chan->src, &chan->src_type);

Actually I got this wrong. The l2cap_chan uses a different address types
than the hci_dev uses (e.g. BDADDR_LE_RANDOM vs ADDR_LE_DEV_RANDOM), so
the patch is correct. However, we might still want to later simplify
this using a helper function or macro.

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type
  2015-01-14 23:43 [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type Marcel Holtmann
  2015-01-15 10:25 ` Johan Hedberg
@ 2015-01-15 11:07 ` Johan Hedberg
  1 sibling, 0 replies; 4+ messages in thread
From: Johan Hedberg @ 2015-01-15 11:07 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth

Hi Marcel,

On Wed, Jan 14, 2015, Marcel Holtmann wrote:
> The source address and source address type of the LE SMP channel can
> either be the public address of the controller or the static random
> address configured by the host.
> 
> Right now the public address is used for the LE SMP channel and
> obviously that is not correct if the controller operates with the
> configured static random address.
> 
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  net/bluetooth/smp.c | 27 +++++++++++++++++++++++----
>  1 file changed, 23 insertions(+), 4 deletions(-)

All three patches in this set have been applied to bluetooth-next.
Thanks.

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-01-15 11:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-14 23:43 [PATCH 1/3] Bluetooth: Fix LE SMP channel source address and source address type Marcel Holtmann
2015-01-15 10:25 ` Johan Hedberg
2015-01-15 10:53   ` Johan Hedberg
2015-01-15 11:07 ` Johan Hedberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox