From eb98a28499f82be4fc147eecffe9175bc9f7f631 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Apr 28 2020 09:33:27 +0000 Subject: import bluez-5.50-3.el8 --- diff --git a/SOURCES/0001-core-Add-AlwaysPairable-to-main.conf.patch b/SOURCES/0001-core-Add-AlwaysPairable-to-main.conf.patch new file mode 100644 index 0000000..1242069 --- /dev/null +++ b/SOURCES/0001-core-Add-AlwaysPairable-to-main.conf.patch @@ -0,0 +1,151 @@ +From 4aa826664dd5d6e784162c2393149ecb01550fb1 Mon Sep 17 00:00:00 2001 +From: Gopal Tiwari +Date: Wed, 18 Dec 2019 19:31:49 +0530 +Subject: [PATCH BlueZ 1/2] core: Add AlwaysPairable to main.conf + +commit 1880b299086659844889cdaf687133aca5eaf102 +Author: Luiz Augusto von Dentz +Date: Fri Jul 27 11:14:04 2018 +0300 + + core: Add AlwaysPairable to main.conf + + This adds a new option called AlwaysPairable to main.conf, it can be + used to enable Adapter.Pairable even in case there is no Agent + available. + + Since that could be consider a security problem to allow pairing + without user's consent the option defaults to false. +--- + src/adapter.c | 16 +++++++++++++++- + src/agent.h | 7 +++++++ + src/device.c | 2 -- + src/hcid.h | 1 + + src/main.c | 11 +++++++++++ + src/main.conf | 5 +++++ + 6 files changed, 39 insertions(+), 3 deletions(-) + +diff --git a/src/adapter.c b/src/adapter.c +index af340fd6e..720621f47 100644 +--- a/src/adapter.c ++++ b/src/adapter.c +@@ -7754,6 +7754,19 @@ int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap) + { + struct mgmt_cp_set_io_capability cp; + ++ if (!main_opts.pairable) { ++ if (io_cap == IO_CAPABILITY_INVALID) { ++ if (adapter->current_settings & MGMT_SETTING_BONDABLE) ++ set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x00); ++ ++ return 0; ++ } ++ ++ if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) ++ set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); ++ } else if (io_cap == IO_CAPABILITY_INVALID) ++ io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; ++ + memset(&cp, 0, sizeof(cp)); + cp.io_capability = io_cap; + +@@ -8682,7 +8695,8 @@ static void read_info_complete(uint8_t status, uint16_t length, + + set_name(adapter, btd_adapter_get_name(adapter)); + +- if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) ++ if (main_opts.pairable && ++ !(adapter->current_settings & MGMT_SETTING_BONDABLE)) + set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); + + if (!kernel_conn_control) +diff --git a/src/agent.h b/src/agent.h +index 1e4692036..f14d14325 100644 +--- a/src/agent.h ++++ b/src/agent.h +@@ -22,6 +22,13 @@ + * + */ + ++#define IO_CAPABILITY_DISPLAYONLY 0x00 ++#define IO_CAPABILITY_DISPLAYYESNO 0x01 ++#define IO_CAPABILITY_KEYBOARDONLY 0x02 ++#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 ++#define IO_CAPABILITY_KEYBOARDDISPLAY 0x04 ++#define IO_CAPABILITY_INVALID 0xFF ++ + struct agent; + + typedef void (*agent_cb) (struct agent *agent, DBusError *err, +diff --git a/src/device.c b/src/device.c +index 4f1af7012..0d7907a69 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -75,8 +75,6 @@ + #include "attrib-server.h" + #include "eir.h" + +-#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 +- + #define DISCONNECT_TIMER 2 + #define DISCOVERY_TIMER 1 + #define INVALID_FLAGS 0xff +diff --git a/src/hcid.h b/src/hcid.h +index 2c2b89d9c..ba250578a 100644 +--- a/src/hcid.h ++++ b/src/hcid.h +@@ -38,6 +38,7 @@ typedef enum { + struct main_opts { + char *name; + uint32_t class; ++ gboolean pairable; + uint32_t pairto; + uint32_t discovto; + uint8_t privacy; +diff --git a/src/main.c b/src/main.c +index 7e6af42cd..156406343 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -81,6 +81,7 @@ static const char *supported_options[] = { + "Name", + "Class", + "DiscoverableTimeout", ++ "AlwaysPairable" + "PairableTimeout", + "DeviceID", + "ReverseServiceDiscovery", +@@ -287,6 +288,16 @@ static void parse_config(GKeyFile *config) + main_opts.discovto = val; + } + ++ boolean = g_key_file_get_boolean(config, "General", ++ "AlwaysPairable", &err); ++ if (err) { ++ DBG("%s", err->message); ++ g_clear_error(&err); ++ } else { ++ DBG("pairable=%s", boolean ? "true" : "false"); ++ main_opts.pairable = boolean; ++ } ++ + val = g_key_file_get_integer(config, "General", + "PairableTimeout", &err); + if (err) { +diff --git a/src/main.conf b/src/main.conf +index cbae32ec5..0d480d183 100644 +--- a/src/main.conf ++++ b/src/main.conf +@@ -13,6 +13,11 @@ + # 0 = disable timer, i.e. stay discoverable forever + #DiscoverableTimeout = 0 + ++# Always allow pairing even if there are no agent registered ++# Possible values: true, false ++# Default: false ++#AlwaysPairable = false ++ + # How long to stay in pairable mode before going back to non-discoverable + # The value is in seconds. Default is 0. + # 0 = disable timer, i.e. stay pairable forever +-- +2.17.2 + diff --git a/SOURCES/0002-agent-Make-the-first-agent-to-register-the-default.patch b/SOURCES/0002-agent-Make-the-first-agent-to-register-the-default.patch new file mode 100644 index 0000000..abe2dc0 --- /dev/null +++ b/SOURCES/0002-agent-Make-the-first-agent-to-register-the-default.patch @@ -0,0 +1,61 @@ +From 997fd427eab3770d11f3d0c9f04629a6cefc22b4 Mon Sep 17 00:00:00 2001 +From: Gopal Tiwari +Date: Wed, 18 Dec 2019 19:33:33 +0530 +Subject: [PATCH BlueZ 2/2] agent: Make the first agent to register the + default + +commit 9213ff7642a33aa481e3c61989ad60f7985b9984 +Author: Luiz Augusto von Dentz +Date: Fri Jul 27 11:01:04 2018 +0300 + + agent: Make the first agent to register the default + + This simplifies the handling of default agent and enforce the IO + capabilities to be set whenever there is an agent available in the + system. +--- + src/agent.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +diff --git a/src/agent.c b/src/agent.c +index ff44d5755..183e2f190 100644 +--- a/src/agent.c ++++ b/src/agent.c +@@ -50,13 +50,6 @@ + #include "agent.h" + #include "shared/queue.h" + +-#define IO_CAPABILITY_DISPLAYONLY 0x00 +-#define IO_CAPABILITY_DISPLAYYESNO 0x01 +-#define IO_CAPABILITY_KEYBOARDONLY 0x02 +-#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 +-#define IO_CAPABILITY_KEYBOARDDISPLAY 0x04 +-#define IO_CAPABILITY_INVALID 0xFF +- + #define REQUEST_TIMEOUT (60 * 1000) /* 60 seconds */ + #define AGENT_INTERFACE "org.bluez.Agent1" + +@@ -150,7 +143,7 @@ static void set_io_cap(struct btd_adapter *adapter, gpointer user_data) + if (agent) + io_cap = agent->capability; + else +- io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; ++ io_cap = IO_CAPABILITY_INVALID; + + adapter_set_io_capability(adapter, io_cap); + } +@@ -294,6 +287,11 @@ static struct agent *agent_create( const char *name, const char *path, + name, agent_disconnect, + agent, NULL); + ++ if (queue_isempty(default_agents)) ++ add_default_agent(agent); ++ else ++ queue_push_tail(default_agents, agent); ++ + return agent_ref(agent); + } + +-- +2.17.2 + diff --git a/SPECS/bluez.spec b/SPECS/bluez.spec index f39ccc2..f13c731 100644 --- a/SPECS/bluez.spec +++ b/SPECS/bluez.spec @@ -1,7 +1,7 @@ Name: bluez Summary: Bluetooth utilities Version: 5.50 -Release: 1%{?dist} +Release: 3%{?dist} License: GPLv2+ URL: http://www.bluez.org/ @@ -33,6 +33,9 @@ Patch23: 0004-systemd-More-lockdown.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1567622 Patch24: 0001-adapter-Don-t-refresh-adv_manager-for-non-LE-devices.patch +Patch25: 0001-core-Add-AlwaysPairable-to-main.conf.patch +Patch26: 0002-agent-Make-the-first-agent-to-register-the-default.patch + BuildRequires: git-core BuildRequires: dbus-devel >= 1.6 BuildRequires: glib2-devel @@ -267,6 +270,14 @@ make check %changelog +* Mon Jan 13 2020 Gopal Tiwari - 5.50-3 ++ bluez-5.50-3 +- Bump the version + +* Mon Jan 13 2020 Gopal Tiwari - 5.50-2 ++ bluez-5.50-2 +- Fixing CVE-2018-10910 (#1606373) + * Fri Sep 7 2018 Gopal Tiwari - 5.50-1 + bluez-5.50-1 - Update to 5.50 (#1504689)