Linux bluetooth development
 help / color / mirror / Atom feed
From: Andre Guedes <andre.guedes@openbossa.org>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH v2 13/17] Bluetooth: Connection parameters and resolvable address
Date: Wed, 26 Feb 2014 20:21:52 -0300	[thread overview]
Message-ID: <1393456916-22701-13-git-send-email-andre.guedes@openbossa.org> (raw)
In-Reply-To: <1393456916-22701-1-git-send-email-andre.guedes@openbossa.org>

We should only accept connection parameters from identity addresses
(public or random static). Thus, we should check the address type
in hci_conn_params_add().

Additionally, since the IRK is removed during unpair, we should also
remove the connection parameters from that device.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
 include/net/bluetooth/hci_core.h |  6 +++---
 net/bluetooth/hci_core.c         | 25 +++++++++++++++++++++----
 net/bluetooth/mgmt.c             |  2 ++
 3 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index b159810..4b192d0 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -801,9 +801,9 @@ int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
 
 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
 					       bdaddr_t *addr, u8 addr_type);
-void hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
-			 u8 auto_connect, u16 conn_min_interval,
-			 u16 conn_max_interval);
+int hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
+			u8 auto_connect, u16 conn_min_interval,
+			u16 conn_max_interval);
 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
 void hci_conn_params_clear(struct hci_dev *hdev);
 
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 9470a9c..6d83ca0 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -3220,13 +3220,28 @@ static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
 	return true;
 }
 
+static bool is_identity_address(bdaddr_t *addr, u8 addr_type)
+{
+	if (addr_type == ADDR_LE_DEV_PUBLIC)
+		return true;
+
+	/* Check for Random Static address type */
+	if ((addr->b[5] & 0xc0) == 0xc0)
+		return true;
+
+	return false;
+}
+
 /* This function requires the caller holds hdev->lock */
-void hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
-			 u8 auto_connect, u16 conn_min_interval,
-			 u16 conn_max_interval)
+int hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
+			u8 auto_connect, u16 conn_min_interval,
+			u16 conn_max_interval)
 {
 	struct hci_conn_params *params;
 
+	if (!is_identity_address(addr, addr_type))
+		return -EINVAL;
+
 	params = hci_conn_params_lookup(hdev, addr, addr_type);
 	if (params)
 		goto update;
@@ -3234,7 +3249,7 @@ void hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
 	params = kzalloc(sizeof(*params), GFP_KERNEL);
 	if (!params) {
 		BT_ERR("Out of memory");
-		return;
+		return -ENOMEM;
 	}
 
 	bacpy(&params->addr, addr);
@@ -3261,6 +3276,8 @@ update:
 	BT_DBG("addr %pMR (type %u) auto_connect %u conn_min_interval 0x%.4x "
 	       "conn_max_interval 0x%.4x", addr, addr_type, auto_connect,
 	       conn_min_interval, conn_max_interval);
+
+	return 0;
 }
 
 /* This function requires the caller holds hdev->lock */
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index f878267..2e6564e 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -2416,6 +2416,8 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
 
 		hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
 
+		hci_conn_params_del(hdev, &cp->addr.bdaddr, addr_type);
+
 		err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
 	}
 
-- 
1.8.5.4


  parent reply	other threads:[~2014-02-26 23:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-26 23:21 [PATCH v2 01/17] Bluetooth: Create hci_req_add_le_scan_disable helper Andre Guedes
2014-02-26 23:21 ` [PATCH v2 02/17] Bluetooth: Declare le_conn_failed in hci_core.h Andre Guedes
2014-02-26 23:21 ` [PATCH v2 03/17] Bluetooth: Stop scanning on LE connection Andre Guedes
2014-02-26 23:21 ` [PATCH v2 04/17] Bluetooth: Remove unused function Andre Guedes
2014-02-26 23:21 ` [PATCH v2 05/17] Bluetooth: Refactor HCI connection code Andre Guedes
2014-02-26 23:21 ` [PATCH v2 06/17] Bluetooth: Move address type conversion to outside hci_connect_le Andre Guedes
2014-02-26 23:21 ` [PATCH v2 07/17] Bluetooth: Introduce hdev->pend_le_conn list Andre Guedes
2014-02-26 23:21 ` [PATCH v2 08/17] Bluetooth: Introduce LE auto connection infrastructure Andre Guedes
2014-02-26 23:21 ` [PATCH v2 09/17] Bluetooth: Introduce LE auto connect options Andre Guedes
2014-02-26 23:21 ` [PATCH v2 10/17] Bluetooth: Connection parameters and auto connection Andre Guedes
2014-02-26 23:21 ` [PATCH v2 11/17] Bluetooth: Temporarily stop background scanning on discovery Andre Guedes
2014-02-26 23:21 ` [PATCH v2 12/17] Bluetooth: Auto connection and power on Andre Guedes
2014-02-26 23:21 ` Andre Guedes [this message]
2014-02-26 23:21 ` [PATCH v2 14/17] Bluetooth: Support resolvable private addresses Andre Guedes
2014-02-26 23:21 ` [PATCH v2 15/17] Bluetooth: Add le_auto_conn file on debugfs Andre Guedes
2014-02-26 23:21 ` [PATCH v2 16/17] Bluetooth: Create hci_req_add_le_passive_scan helper Andre Guedes
2014-02-26 23:21 ` [PATCH v2 17/17] Bluetooth: Update background scan parameters Andre Guedes
2014-02-27  3:44   ` Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1393456916-22701-13-git-send-email-andre.guedes@openbossa.org \
    --to=andre.guedes@openbossa.org \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox