From: Luiz Augusto von Dentz <[email protected]>
Calling btd_adapter_remove_device from device_remove_connection can
cause a crash, so instead of removing it immediatelly this set a the
temporary timeout to 0.
Fixes: https://github.com/bluez/bluez/issues/290
---
v2: Fix compilation
src/device.c | 46 +++++++++++++++++++++++-----------------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/device.c b/src/device.c
index 6d29eb896..81b8ebd1e 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3200,6 +3200,28 @@ void device_add_connection(struct btd_device *dev, uint8_t bdaddr_type)
"Connected");
}
+static bool device_disappeared(gpointer user_data)
+{
+ struct btd_device *dev = user_data;
+
+ dev->temporary_timer = 0;
+
+ btd_adapter_remove_device(dev->adapter, dev);
+
+ return FALSE;
+}
+
+static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
+{
+ clear_temporary_timer(dev);
+
+ if (!timeout)
+ return;
+
+ dev->temporary_timer = timeout_add_seconds(timeout, device_disappeared,
+ dev, NULL);
+}
+
void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
{
struct bearer_state *state = get_state(device, bdaddr_type);
@@ -3285,7 +3307,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
DEVICE_INTERFACE, "Connected");
if (remove_device)
- btd_adapter_remove_device(device->adapter, device);
+ set_temporary_timer(device, 0);
}
guint device_add_disconnect_watch(struct btd_device *device,
@@ -4590,28 +4612,6 @@ void device_set_le_support(struct btd_device *device, uint8_t bdaddr_type)
store_device_info(device);
}
-static bool device_disappeared(gpointer user_data)
-{
- struct btd_device *dev = user_data;
-
- dev->temporary_timer = 0;
-
- btd_adapter_remove_device(dev->adapter, dev);
-
- return FALSE;
-}
-
-static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
-{
- clear_temporary_timer(dev);
-
- if (!timeout)
- return;
-
- dev->temporary_timer = timeout_add_seconds(timeout, device_disappeared,
- dev, NULL);
-}
-
void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type)
{
if (bdaddr_type == BDADDR_BREDR)
--
2.34.1
On Thu, 2022-02-10 at 14:55 -0800, Luiz Augusto von Dentz wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> Calling btd_adapter_remove_device from device_remove_connection can
> cause a crash, so instead of removing it immediatelly this set a the
> temporary timeout to 0.
>
> Fixes: https://github.com/bluez/bluez/issues/290
Tested-by: Tedd Ho-Jeong AN <[email protected]>
> ---
> v2: Fix compilation
>
> src/device.c | 46 +++++++++++++++++++++++-----------------------
> 1 file changed, 23 insertions(+), 23 deletions(-)
>
> diff --git a/src/device.c b/src/device.c
> index 6d29eb896..81b8ebd1e 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -3200,6 +3200,28 @@ void device_add_connection(struct btd_device *dev, uint8_t bdaddr_type)
> "Connected");
> }
>
> +static bool device_disappeared(gpointer user_data)
> +{
> + struct btd_device *dev = user_data;
> +
> + dev->temporary_timer = 0;
> +
> + btd_adapter_remove_device(dev->adapter, dev);
> +
> + return FALSE;
> +}
> +
> +static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
> +{
> + clear_temporary_timer(dev);
> +
> + if (!timeout)
> + return;
> +
> + dev->temporary_timer = timeout_add_seconds(timeout, device_disappeared,
> + dev, NULL);
> +}
> +
> void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
> {
> struct bearer_state *state = get_state(device, bdaddr_type);
> @@ -3285,7 +3307,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
> DEVICE_INTERFACE, "Connected");
>
> if (remove_device)
> - btd_adapter_remove_device(device->adapter, device);
> + set_temporary_timer(device, 0);
> }
>
> guint device_add_disconnect_watch(struct btd_device *device,
> @@ -4590,28 +4612,6 @@ void device_set_le_support(struct btd_device *device, uint8_t bdaddr_type)
> store_device_info(device);
> }
>
> -static bool device_disappeared(gpointer user_data)
> -{
> - struct btd_device *dev = user_data;
> -
> - dev->temporary_timer = 0;
> -
> - btd_adapter_remove_device(dev->adapter, dev);
> -
> - return FALSE;
> -}
> -
> -static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
> -{
> - clear_temporary_timer(dev);
> -
> - if (!timeout)
> - return;
> -
> - dev->temporary_timer = timeout_add_seconds(timeout, device_disappeared,
> - dev, NULL);
> -}
> -
> void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type)
> {
> if (bdaddr_type == BDADDR_BREDR)
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=613256
---Test result---
Test Summary:
CheckPatch FAIL 1.46 seconds
GitLint PASS 1.00 seconds
Prep - Setup ELL PASS 41.27 seconds
Build - Prep PASS 0.75 seconds
Build - Configure PASS 8.25 seconds
Build - Make PASS 1386.15 seconds
Make Check PASS 11.95 seconds
Make Check w/Valgrind PASS 440.83 seconds
Make Distcheck PASS 230.47 seconds
Build w/ext ELL - Configure PASS 8.17 seconds
Build w/ext ELL - Make PASS 1374.80 seconds
Incremental Build with patchesPASS 0.00 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ,v2] device: Fix crash when removing device
WARNING:TYPO_SPELLING: 'immediatelly' may be misspelled - perhaps 'immediately'?
#81:
cause a crash, so instead of removing it immediatelly this set a the
^^^^^^^^^^^^
/github/workspace/src/12742555.patch total: 0 errors, 1 warnings, 64 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/12742555.patch has style problems, please review.
NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
---
Regards,
Linux Bluetooth
Hi,
On Thu, Feb 10, 2022 at 4:23 PM <[email protected]> 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=613256
>
> ---Test result---
>
> Test Summary:
> CheckPatch FAIL 1.46 seconds
> GitLint PASS 1.00 seconds
> Prep - Setup ELL PASS 41.27 seconds
> Build - Prep PASS 0.75 seconds
> Build - Configure PASS 8.25 seconds
> Build - Make PASS 1386.15 seconds
> Make Check PASS 11.95 seconds
> Make Check w/Valgrind PASS 440.83 seconds
> Make Distcheck PASS 230.47 seconds
> Build w/ext ELL - Configure PASS 8.17 seconds
> Build w/ext ELL - Make PASS 1374.80 seconds
> Incremental Build with patchesPASS 0.00 seconds
>
> Details
> ##############################
> Test: CheckPatch - FAIL
> Desc: Run checkpatch.pl script with rule in .checkpatch.conf
> Output:
> [BlueZ,v2] device: Fix crash when removing device
> WARNING:TYPO_SPELLING: 'immediatelly' may be misspelled - perhaps 'immediately'?
> #81:
> cause a crash, so instead of removing it immediatelly this set a the
> ^^^^^^^^^^^^
>
> /github/workspace/src/12742555.patch total: 0 errors, 1 warnings, 64 lines checked
>
> NOTE: For some of the reported defects, checkpatch may be able to
> mechanically convert to the typical style using --fix or --fix-inplace.
>
> /github/workspace/src/12742555.patch has style problems, please review.
>
> NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
>
> NOTE: If any of the errors are false positives, please report
> them to the maintainer, see CHECKPATCH in MAINTAINERS.
>
>
>
>
> ---
> Regards,
> Linux Bluetooth
Pushed.
--
Luiz Augusto von Dentz