Package: bluez
Version: 5.50-1.1
Severity: normal
Tags: patch  pending

Dear maintainer,

I've prepared an NMU for bluez (versioned as 5.50-1.2). The diff is
attached to this message. I uploaded without delay because it contains
two followup commits which were for the fixes for 5.50-1.1.

I assume you won't do any updates for 5.50 anymore but at some point
move the experimental version to sid. Note that the two commits were
not included in 5.54 (which was released some days ago).

Could you as well make sure that the debian/changelog gets merged to
make as well BTS version tracking for the fixes happy?

Regards,
Salvatore
diff -Nru bluez-5.50/debian/changelog bluez-5.50/debian/changelog
--- bluez-5.50/debian/changelog	2020-03-13 21:31:22.000000000 +0100
+++ bluez-5.50/debian/changelog	2020-03-20 21:19:01.000000000 +0100
@@ -1,3 +1,11 @@
+bluez (5.50-1.2) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * input: hog: Attempt to set security level if not bonded
+  * input: Add LEAutoSecurity setting to input.conf
+
+ -- Salvatore Bonaccorso <car...@debian.org>  Fri, 20 Mar 2020 21:19:01 +0100
+
 bluez (5.50-1.1) unstable; urgency=high
 
   * Non-maintainer upload.
diff -Nru bluez-5.50/debian/patches/input-Add-LEAutoSecurity-setting-to-input.conf.patch bluez-5.50/debian/patches/input-Add-LEAutoSecurity-setting-to-input.conf.patch
--- bluez-5.50/debian/patches/input-Add-LEAutoSecurity-setting-to-input.conf.patch	1970-01-01 01:00:00.000000000 +0100
+++ bluez-5.50/debian/patches/input-Add-LEAutoSecurity-setting-to-input.conf.patch	2020-03-20 21:19:01.000000000 +0100
@@ -0,0 +1,121 @@
+From: Luiz Augusto von Dentz <luiz.von.de...@intel.com>
+Date: Wed, 11 Mar 2020 11:43:21 -0700
+Subject: input: Add LEAutoSecurity setting to input.conf
+Origin: https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit?id=f2778f5877d20696d68a452b26e4accb91bfb19e
+
+LEAutoSecurity can be used to enable/disable automatic upgrades of
+security for LE devices, by default it is enabled so existing devices
+that did not require security and were not bonded will automatically
+upgrade the security.
+
+Note: Platforms disabling this setting would require users to manually
+bond the device which may require changes to the user interface to
+always force bonding for input devices as APIs such as Device.Connect
+will no longer work which maybe perceived as a regression.
+---
+ profiles/input/device.h   |  1 +
+ profiles/input/hog.c      | 13 +++++++++++--
+ profiles/input/input.conf |  5 +++++
+ profiles/input/manager.c  | 11 ++++++++++-
+ 4 files changed, 27 insertions(+), 3 deletions(-)
+
+diff --git a/profiles/input/device.h b/profiles/input/device.h
+index 3044db67332c..5a077f92a82c 100644
+--- a/profiles/input/device.h
++++ b/profiles/input/device.h
+@@ -30,6 +30,7 @@ struct input_conn;
+ void input_set_idle_timeout(int timeout);
+ void input_enable_userspace_hid(bool state);
+ void input_set_classic_bonded_only(bool state);
++void input_set_auto_sec(bool state);
+ 
+ int input_device_register(struct btd_service *service);
+ void input_device_unregister(struct btd_service *service);
+diff --git a/profiles/input/hog.c b/profiles/input/hog.c
+index f0226ebbd1ba..327a1d1c3c2b 100644
+--- a/profiles/input/hog.c
++++ b/profiles/input/hog.c
+@@ -53,6 +53,7 @@
+ #include "src/shared/gatt-client.h"
+ #include "src/plugin.h"
+ 
++#include "device.h"
+ #include "suspend.h"
+ #include "attrib/att.h"
+ #include "attrib/gattrib.h"
+@@ -67,8 +68,14 @@ struct hog_device {
+ };
+ 
+ static gboolean suspend_supported = FALSE;
++static bool auto_sec = true;
+ static struct queue *devices = NULL;
+ 
++void input_set_auto_sec(bool state)
++{
++	auto_sec = state;
++}
++
+ static void hog_device_accept(struct hog_device *dev, struct gatt_db *db)
+ {
+ 	char name[248];
+@@ -192,11 +199,13 @@ static int hog_accept(struct btd_service *service)
+ 	if (!device_is_bonded(device, btd_device_get_bdaddr_type(device))) {
+ 		struct bt_gatt_client *client;
+ 
++		if (!auto_sec)
++			return -ECONNREFUSED;
++
+ 		client = btd_device_get_gatt_client(device);
+ 		if (!bt_gatt_client_set_security(client,
+-						BT_ATT_SECURITY_MEDIUM)) {
++						BT_ATT_SECURITY_MEDIUM))
+ 			return -ECONNREFUSED;
+-		}
+ 	}
+ 
+ 	/* TODO: Replace GAttrib with bt_gatt_client */
+diff --git a/profiles/input/input.conf b/profiles/input/input.conf
+index 166aff4a43b2..4c70bc561f05 100644
+--- a/profiles/input/input.conf
++++ b/profiles/input/input.conf
+@@ -19,3 +19,8 @@
+ # pairing/encryption.
+ # Defaults to false to maximize device compatibility.
+ #ClassicBondedOnly=true
++
++# LE upgrade security
++# Enables upgrades of security automatically if required.
++# Defaults to true to maximize device compatibility.
++#LEAutoSecurity=true
+diff --git a/profiles/input/manager.c b/profiles/input/manager.c
+index 5cd27b8396b8..bf4acb4ed583 100644
+--- a/profiles/input/manager.c
++++ b/profiles/input/manager.c
+@@ -96,7 +96,7 @@ static int input_init(void)
+ 	config = load_config_file(CONFIGDIR "/input.conf");
+ 	if (config) {
+ 		int idle_timeout;
+-		gboolean uhid_enabled, classic_bonded_only;
++		gboolean uhid_enabled, classic_bonded_only, auto_sec;
+ 
+ 		idle_timeout = g_key_file_get_integer(config, "General",
+ 							"IdleTimeout", &err);
+@@ -125,6 +125,15 @@ static int input_init(void)
+ 		} else
+ 			g_clear_error(&err);
+ 
++		auto_sec = g_key_file_get_boolean(config, "General",
++						"LEAutoSecurity", &err);
++		if (!err) {
++			DBG("input.conf: LEAutoSecurity=%s",
++					auto_sec ? "true" : "false");
++			input_set_auto_sec(auto_sec);
++		} else
++			g_clear_error(&err);
++
+ 	}
+ 
+ 	btd_profile_register(&input_profile);
+-- 
+2.20.1
+
diff -Nru bluez-5.50/debian/patches/input-hog-Attempt-to-set-security-level-if-not-bonde.patch bluez-5.50/debian/patches/input-hog-Attempt-to-set-security-level-if-not-bonde.patch
--- bluez-5.50/debian/patches/input-hog-Attempt-to-set-security-level-if-not-bonde.patch	1970-01-01 01:00:00.000000000 +0100
+++ bluez-5.50/debian/patches/input-hog-Attempt-to-set-security-level-if-not-bonde.patch	2020-03-20 21:19:01.000000000 +0100
@@ -0,0 +1,48 @@
+From: Luiz Augusto von Dentz <luiz.von.de...@intel.com>
+Date: Tue, 10 Mar 2020 09:59:07 -0700
+Subject: input: hog: Attempt to set security level if not bonded
+Origin: https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit?id=35d8d895cd0b724e58129374beb0bb4a2edf9519
+
+This attempts to set the security if the device is not bonded, the
+kernel will block any communication on the ATT socket while bumping
+the security and if that fails the device will be disconnected which
+is better than having the device dangling around without being able to
+communicate with it until it is properly bonded.
+---
+ profiles/input/hog.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/profiles/input/hog.c b/profiles/input/hog.c
+index dfac689219a0..f0226ebbd1ba 100644
+--- a/profiles/input/hog.c
++++ b/profiles/input/hog.c
+@@ -49,6 +49,8 @@
+ #include "src/shared/util.h"
+ #include "src/shared/uhid.h"
+ #include "src/shared/queue.h"
++#include "src/shared/att.h"
++#include "src/shared/gatt-client.h"
+ #include "src/plugin.h"
+ 
+ #include "suspend.h"
+@@ -187,8 +189,15 @@ static int hog_accept(struct btd_service *service)
+ 	}
+ 
+ 	/* HOGP 1.0 Section 6.1 requires bonding */
+-	if (!device_is_bonded(device, btd_device_get_bdaddr_type(device)))
+-		return -ECONNREFUSED;
++	if (!device_is_bonded(device, btd_device_get_bdaddr_type(device))) {
++		struct bt_gatt_client *client;
++
++		client = btd_device_get_gatt_client(device);
++		if (!bt_gatt_client_set_security(client,
++						BT_ATT_SECURITY_MEDIUM)) {
++			return -ECONNREFUSED;
++		}
++	}
+ 
+ 	/* TODO: Replace GAttrib with bt_gatt_client */
+ 	bt_hog_attach(dev->hog, attrib);
+-- 
+2.20.1
+
diff -Nru bluez-5.50/debian/patches/series bluez-5.50/debian/patches/series
--- bluez-5.50/debian/patches/series	2020-03-13 21:31:22.000000000 +0100
+++ bluez-5.50/debian/patches/series	2020-03-20 21:19:01.000000000 +0100
@@ -11,3 +11,5 @@
 main.conf-Add-more-details-Closes-904212.patch
 HOGP-must-only-accept-data-from-bonded-devices.patch
 HID-accepts-bonded-device-connections-only.patch
+input-hog-Attempt-to-set-security-level-if-not-bonde.patch
+input-Add-LEAutoSecurity-setting-to-input.conf.patch

Reply via email to