linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Bluez PATCH] device: Check both bearers's paired status upon removal of connection
@ 2021-09-23  8:18 Archie Pusaka
  2021-09-23  8:41 ` [Bluez] " bluez.test.bot
  0 siblings, 1 reply; 3+ messages in thread
From: Archie Pusaka @ 2021-09-23  8:18 UTC (permalink / raw)
  To: linux-bluetooth, Luiz Augusto von Dentz
  Cc: CrosBT Upstreaming, Archie Pusaka, Miao-chen Chou

From: Archie Pusaka <apusaka@chromium.org>

Because Link Key for BREDR can be transformed into LTK for LE (and
vice versa), there is a possibility of getting 'paired' on either of
BREDR/LE without actually connected using the aforementioned bearer.

When removing the connection, we should check both bearers's paired
and bonded status rather than just the one getting disconnected.

Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
---

 src/device.c | 40 ++++++++++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 12 deletions(-)

diff --git a/src/device.c b/src/device.c
index b29aa195d1..6a66fc9a23 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3010,6 +3010,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
 	struct bearer_state *state = get_state(device, bdaddr_type);
 	DBusMessage *reply;
 	bool remove_device = false;
+	bool paired_status_updated = false;
 
 	if (!state->connected)
 		return;
@@ -3048,18 +3049,33 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
 		dbus_message_unref(msg);
 	}
 
-	if (state->paired && !state->bonded) {
-		btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
-								bdaddr_type);
-
-		state->paired = false;
-
-		/* report change only if both bearers are unpaired */
-		if (!device->bredr_state.paired && !device->le_state.paired)
-			g_dbus_emit_property_changed(dbus_conn, device->path,
-							DEVICE_INTERFACE,
-							"Paired");
-	}
+	/* Check paired status of both bearers since it's possible to be
+	 * paired but not connected via link key to LTK conversion.
+	 */
+	if (!device->bredr_state.connected && device->bredr_state.paired &&
+						!device->bredr_state.bonded) {
+		btd_adapter_remove_bonding(device->adapter,
+						&device->bdaddr,
+						BDADDR_BREDR);
+		device->bredr_state.paired = false;
+		paired_status_updated = true;
+	}
+
+	if (!device->le_state.connected && device->le_state.paired &&
+						!device->le_state.bonded) {
+		btd_adapter_remove_bonding(device->adapter,
+						&device->bdaddr,
+						device->bdaddr_type);
+		device->le_state.paired = false;
+		paired_status_updated = true;
+	}
+
+	/* report change only if both bearers are unpaired */
+	if (!device->bredr_state.paired && !device->le_state.paired &&
+							paired_status_updated)
+		g_dbus_emit_property_changed(dbus_conn, device->path,
+						DEVICE_INTERFACE,
+						"Paired");
 
 	if (device->bredr_state.connected || device->le_state.connected)
 		return;
-- 
2.33.0.464.g1972c5931b-goog


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

* RE: [Bluez] device: Check both bearers's paired status upon removal of connection
  2021-09-23  8:18 [Bluez PATCH] device: Check both bearers's paired status upon removal of connection Archie Pusaka
@ 2021-09-23  8:41 ` bluez.test.bot
  2021-09-24  0:16   ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 3+ messages in thread
From: bluez.test.bot @ 2021-09-23  8:41 UTC (permalink / raw)
  To: linux-bluetooth, apusaka

[-- Attachment #1: Type: text/plain, Size: 885 bytes --]

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=551527

---Test result---

Test Summary:
CheckPatch                    PASS      1.54 seconds
GitLint                       PASS      0.95 seconds
Prep - Setup ELL              PASS      52.48 seconds
Build - Prep                  PASS      0.47 seconds
Build - Configure             PASS      9.60 seconds
Build - Make                  PASS      221.38 seconds
Make Check                    PASS      10.32 seconds
Make Distcheck                PASS      263.71 seconds
Build w/ext ELL - Configure   PASS      9.62 seconds
Build w/ext ELL - Make        PASS      208.63 seconds



---
Regards,
Linux Bluetooth


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

* Re: [Bluez] device: Check both bearers's paired status upon removal of connection
  2021-09-23  8:41 ` [Bluez] " bluez.test.bot
@ 2021-09-24  0:16   ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-24  0:16 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Archie Pusaka

Hi Archie,


On Thu, Sep 23, 2021 at 1:43 AM <bluez.test.bot@gmail.com> wrote:
>
> This is automated email and please do not reply to this email!
>
> Dear submitter,
>
> Thank you for submitting the patches to the linux bluetooth mailing list.
> This is a CI test results with your patch series:
> PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=551527
>
> ---Test result---
>
> Test Summary:
> CheckPatch                    PASS      1.54 seconds
> GitLint                       PASS      0.95 seconds
> Prep - Setup ELL              PASS      52.48 seconds
> Build - Prep                  PASS      0.47 seconds
> Build - Configure             PASS      9.60 seconds
> Build - Make                  PASS      221.38 seconds
> Make Check                    PASS      10.32 seconds
> Make Distcheck                PASS      263.71 seconds
> Build w/ext ELL - Configure   PASS      9.62 seconds
> Build w/ext ELL - Make        PASS      208.63 seconds
>
>
>
> ---
> Regards,
> Linux Bluetooth

Applied, thanks.

-- 
Luiz Augusto von Dentz

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

end of thread, other threads:[~2021-09-24  0:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-23  8:18 [Bluez PATCH] device: Check both bearers's paired status upon removal of connection Archie Pusaka
2021-09-23  8:41 ` [Bluez] " bluez.test.bot
2021-09-24  0:16   ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).