summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Klug <john.klug@multitech.com>2022-08-03 16:13:30 -0500
committerJohn Klug <john.klug@multitech.com>2022-09-02 15:55:50 -0500
commit87b34f8ffd39031071b5cca2e1f255936dd07f54 (patch)
treeb86b4648070617fd9a567a98ff57cfea9e6744dc
parent43bda1864ad3f4cbc17c9ced5a347a6fb78981b8 (diff)
downloadmeta-mlinux-87b34f8ffd39031071b5cca2e1f255936dd07f54.tar.gz
meta-mlinux-87b34f8ffd39031071b5cca2e1f255936dd07f54.tar.bz2
meta-mlinux-87b34f8ffd39031071b5cca2e1f255936dd07f54.zip
BlueZ 5.64
-rw-r--r--recipes-connectivity/bluez/bluez5/bluez-device-Fix-not-removing-connected-device.patch73
-rw-r--r--recipes-connectivity/bluez/bluez5_%.bbappend12
-rw-r--r--recipes-connectivity/bluez5/bluez5.inc170
-rw-r--r--recipes-connectivity/bluez5/bluez5/0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch56
-rw-r--r--recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch43
-rw-r--r--recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch28
-rw-r--r--recipes-connectivity/bluez5/bluez5/CVE-2021-3588.patch34
-rw-r--r--recipes-connectivity/bluez5/bluez5/init61
-rw-r--r--recipes-connectivity/bluez5/bluez5/run-ptest31
-rw-r--r--recipes-connectivity/bluez5/bluez5_5.64.bb72
10 files changed, 576 insertions, 4 deletions
diff --git a/recipes-connectivity/bluez/bluez5/bluez-device-Fix-not-removing-connected-device.patch b/recipes-connectivity/bluez/bluez5/bluez-device-Fix-not-removing-connected-device.patch
new file mode 100644
index 0000000..9adba41
--- /dev/null
+++ b/recipes-connectivity/bluez/bluez5/bluez-device-Fix-not-removing-connected-device.patch
@@ -0,0 +1,73 @@
+diff --git a/src/adapter.c b/src/adapter.c
+index afefa1d5d..16da20034 100644
+--- a/src/adapter.c
++++ b/src/adapter.c
+@@ -7171,6 +7171,8 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
+ struct btd_device *device,
+ uint8_t bdaddr_type)
+ {
++ bool remove_device = false;
++
+ DBG("");
+
+ if (!g_slist_find(adapter->connections, device)) {
+@@ -7178,7 +7180,7 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
+ return;
+ }
+
+- device_remove_connection(device, bdaddr_type);
++ device_remove_connection(device, bdaddr_type, &remove_device);
+
+ if (device_is_authenticating(device))
+ device_cancel_authentication(device, TRUE);
+@@ -7188,6 +7190,13 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
+ return;
+
+ adapter->connections = g_slist_remove(adapter->connections, device);
++
++ if (remove_device) {
++ const char *path = device_get_path(device);
++
++ DBG("Removing temporary device %s", path);
++ btd_adapter_remove_device(adapter, device);
++ }
+ }
+
+ static void adapter_stop(struct btd_adapter *adapter)
+diff --git a/src/device.c b/src/device.c
+index 7b451e458..c5484ca7b 100644
+--- a/src/device.c
++++ b/src/device.c
+@@ -3073,7 +3073,8 @@ static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
+ dev, NULL);
+ }
+
+-void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
++void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type,
++ bool *remove)
+ {
+ struct bearer_state *state = get_state(device, bdaddr_type);
+ DBusMessage *reply;
+@@ -3159,7 +3160,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
+ DEVICE_INTERFACE, "Connected");
+
+ if (remove_device)
+- set_temporary_timer(device, 0);
++ *remove = remove_device;
+ }
+
+ guint device_add_disconnect_watch(struct btd_device *device,
+diff --git a/src/device.h b/src/device.h
+index 960255d2b..d7f886224 100644
+--- a/src/device.h
++++ b/src/device.h
+@@ -123,7 +123,8 @@ int device_notify_pincode(struct btd_device *device, gboolean secure,
+ void device_cancel_authentication(struct btd_device *device, gboolean aborted);
+ gboolean device_is_authenticating(struct btd_device *device);
+ void device_add_connection(struct btd_device *dev, uint8_t bdaddr_type);
+-void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type);
++void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type,
++ bool *remove);
+ void device_request_disconnect(struct btd_device *device, DBusMessage *msg);
+ bool device_is_disconnecting(struct btd_device *device);
+ void device_set_ltk_enc_size(struct btd_device *device, uint8_t enc_size);
diff --git a/recipes-connectivity/bluez/bluez5_%.bbappend b/recipes-connectivity/bluez/bluez5_%.bbappend
index 191ff00..530bd3e 100644
--- a/recipes-connectivity/bluez/bluez5_%.bbappend
+++ b/recipes-connectivity/bluez/bluez5_%.bbappend
@@ -1,10 +1,10 @@
-# Might want to skip to m6 next time, because pand
-# is now at m5.
-PR = "m1"
+# m3/m4 is at hash 1d6cfb8e625a944010956714c1802bc1e1fc6c4f
+PR = "m4"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-EXTRA_OECONF += "--enable-deprecated --enable-experimental"
+# enable-debug appears to be critical to prevent hangs.
+EXTRA_OECONF += "--enable-deprecated --enable-experimental --enable-debug"
RDEPENDS_${PN}-pand += "bash python3-dbus python3-logging python3-syslog"
RDEPENDS_${PN}-rfcomm += "bash python3-pygobject python3-syslog python3-logging python3-dbus python3-pybluez python3-mmap"
@@ -22,6 +22,10 @@ SRC_URI += "\
file://rfcomm/default \
file://BT-Name \
"
+
+# This patch is found in master. If the source does not have it, we must
+# include it.
+# file://bluez-device-Fix-not-removing-connected-device.patch
PACKAGES =+ "${PN}-mlinit ${PN}-bt-name libasound-module-bluez ${PN}-pand ${PN}-rfcomm"
DBTEXEC = "${D}${libexecdir}/bluetooth/"
diff --git a/recipes-connectivity/bluez5/bluez5.inc b/recipes-connectivity/bluez5/bluez5.inc
new file mode 100644
index 0000000..d178544
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5.inc
@@ -0,0 +1,170 @@
+SUMMARY = "Linux Bluetooth Stack Userland V5"
+DESCRIPTION = "Linux Bluetooth stack V5 userland components. These include a system configurations, daemons, tools and system libraries."
+HOMEPAGE = "http://www.bluez.org"
+SECTION = "libs"
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
+ file://COPYING.LIB;md5=fb504b67c50331fc78734fed90fb0e09 \
+ file://src/main.c;beginline=1;endline=24;md5=0ad83ca0dc37ab08af448777c581e7ac"
+DEPENDS = "dbus glib-2.0 python3-docutils-native"
+PROVIDES += "bluez-hcidump"
+RPROVIDES_${PN} += "bluez-hcidump"
+
+RCONFLICTS_${PN} = "bluez4"
+
+PACKAGECONFIG ??= "obex-profiles \
+ readline \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ a2dp-profiles \
+ avrcp-profiles \
+ network-profiles \
+ hid-profiles \
+ hog-profiles \
+ tools \
+ deprecated \
+ udev \
+"
+PACKAGECONFIG[obex-profiles] = "--enable-obex,--disable-obex,libical"
+PACKAGECONFIG[readline] = "--enable-client,--disable-client,readline,"
+PACKAGECONFIG[testing] = "--enable-testing,--disable-testing"
+PACKAGECONFIG[midi] = "--enable-midi,--disable-midi,alsa-lib"
+PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd"
+PACKAGECONFIG[cups] = "--enable-cups,--disable-cups,,cups"
+PACKAGECONFIG[nfc] = "--enable-nfc,--disable-nfc"
+PACKAGECONFIG[sap-profiles] = "--enable-sap,--disable-sap"
+PACKAGECONFIG[a2dp-profiles] = "--enable-a2dp,--disable-a2dp"
+PACKAGECONFIG[avrcp-profiles] = "--enable-avrcp,--disable-avrcp"
+PACKAGECONFIG[network-profiles] = "--enable-network,--disable-network"
+PACKAGECONFIG[hid-profiles] = "--enable-hid,--disable-hid"
+PACKAGECONFIG[hog-profiles] = "--enable-hog,--disable-hog"
+PACKAGECONFIG[health-profiles] = "--enable-health,--disable-health"
+PACKAGECONFIG[sixaxis] = "--enable-sixaxis,--disable-sixaxis"
+PACKAGECONFIG[tools] = "--enable-tools,--disable-tools"
+PACKAGECONFIG[threads] = "--enable-threads,--disable-threads"
+PACKAGECONFIG[deprecated] = "--enable-deprecated,--disable-deprecated"
+PACKAGECONFIG[mesh] = "--enable-mesh --enable-external-ell,--disable-mesh, json-c ell"
+PACKAGECONFIG[btpclient] = "--enable-btpclient --enable-external-ell,--disable-btpclient, ell"
+PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
+
+# Source tarball method
+OLD_SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
+ file://init \
+ file://run-ptest \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
+ file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
+ file://0001-test-gatt-Fix-hung-issue.patch \
+ file://CVE-2021-3588.patch \
+ "
+
+# Use GIT for blueZ source
+SRC_URI = "git://git@gitlab.multitech.net/mlinux/bluez.git;protocol=ssh \
+ file://init \
+ file://run-ptest \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
+ file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
+ file://0001-test-gatt-Fix-hung-issue.patch \
+ file://CVE-2021-3588.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+# For source tarball.
+# S = "${WORKDIR}/bluez-${PV}"
+
+CVE_PRODUCT = "bluez"
+
+inherit autotools pkgconfig systemd update-rc.d features_check ptest gobject-introspection-data
+
+EXTRA_OECONF = "\
+ --enable-test \
+ --enable-datafiles \
+ --enable-library \
+ --without-zsh-completion-dir \
+"
+
+# bluez5 builds a large number of useful utilities but does not
+# install them. Specify which ones we want put into ${PN}-noinst-tools.
+NOINST_TOOLS_READLINE ??= ""
+NOINST_TOOLS_TESTING ??= ""
+NOINST_TOOLS_BT ??= ""
+NOINST_TOOLS = " \
+ ${@bb.utils.contains('PACKAGECONFIG', 'readline', '${NOINST_TOOLS_READLINE}', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'testing', '${NOINST_TOOLS_TESTING}', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'tools', '${NOINST_TOOLS_BT}', '', d)} \
+"
+
+do_install_append() {
+ install -d ${D}${INIT_D_DIR}
+ install -m 0755 ${WORKDIR}/init ${D}${INIT_D_DIR}/bluetooth
+
+ install -d ${D}${sysconfdir}/bluetooth/
+ if [ -f ${S}/profiles/network/network.conf ]; then
+ install -m 0644 ${S}/profiles/network/network.conf ${D}/${sysconfdir}/bluetooth/
+ fi
+ if [ -f ${S}/profiles/input/input.conf ]; then
+ install -m 0644 ${S}/profiles/input/input.conf ${D}/${sysconfdir}/bluetooth/
+ fi
+
+ if [ -f ${D}/${sysconfdir}/init.d/bluetooth ]; then
+ sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}/${sysconfdir}/init.d/bluetooth
+ fi
+
+ # Install desired tools that upstream leaves in build area
+ for f in ${NOINST_TOOLS} ; do
+ install -m 755 ${B}/$f ${D}/${bindir}
+ done
+
+ # Patch python tools to use Python 3; they should be source compatible, but
+ # still refer to Python 2 in the shebang
+ sed -i -e '1s,#!.*python.*,#!${bindir}/python3,' ${D}${libdir}/bluez/test/*
+}
+
+PACKAGES =+ "${PN}-testtools ${PN}-obex ${PN}-noinst-tools"
+
+FILES_${PN} += " \
+ ${libdir}/bluetooth/plugins/*.so \
+ ${systemd_unitdir}/ ${datadir}/dbus-1 \
+ ${libdir}/cups \
+"
+FILES_${PN}-dev += " \
+ ${libdir}/bluetooth/plugins/*.la \
+"
+
+FILES_${PN}-obex = "${libexecdir}/bluetooth/obexd \
+ ${exec_prefix}/lib/systemd/user/obex.service \
+ ${systemd_system_unitdir}/obex.service \
+ ${sysconfdir}/systemd/system/multi-user.target.wants/obex.service \
+ ${datadir}/dbus-1/services/org.bluez.obex.service \
+ ${sysconfdir}/dbus-1/system.d/obexd.conf \
+ "
+SYSTEMD_SERVICE_${PN}-obex = "obex.service"
+
+FILES_${PN}-testtools = "${libdir}/bluez/test/*"
+
+def get_noinst_tools_paths (d, bb, tools):
+ s = list()
+ bindir = d.getVar("bindir")
+ for bdp in tools.split():
+ f = os.path.basename(bdp)
+ s.append("%s/%s" % (bindir, f))
+ return "\n".join(s)
+
+FILES_${PN}-noinst-tools = "${@get_noinst_tools_paths(d, bb, d.getVar('NOINST_TOOLS'))}"
+
+RDEPENDS_${PN}-testtools += "python3-core python3-dbus"
+RDEPENDS_${PN}-testtools += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-pygobject', '', d)}"
+
+SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'bluetooth.service', '', d)}"
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "bluetooth"
+
+do_compile_ptest() {
+ oe_runmake buildtests
+}
+
+do_install_ptest() {
+ cp -r ${B}/unit/ ${D}${PTEST_PATH}
+ rm -f ${D}${PTEST_PATH}/unit/*.o
+}
+
+RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-gconv-utf-16"
diff --git a/recipes-connectivity/bluez5/bluez5/0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch b/recipes-connectivity/bluez5/bluez5/0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch
new file mode 100644
index 0000000..618ed73
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch
@@ -0,0 +1,56 @@
+From f74eb97c9fb3c0ee2895742e773ac6a3c41c999c Mon Sep 17 00:00:00 2001
+From: Giovanni Campagna <gcampagna-cNUdlRotFMnNLxjTenLetw@public.gmane.org>
+Date: Sat, 12 Oct 2013 17:45:25 +0200
+Subject: [PATCH] Allow using obexd without systemd in the user session
+
+Not all sessions run systemd --user (actually, the majority
+doesn't), so the dbus daemon must be able to spawn obexd
+directly, and to do so it needs the full path of the daemon.
+
+Upstream-Status: Denied
+
+Not accepted by upstream maintainer for being a distro specific
+configuration. See thread:
+
+http://thread.gmane.org/gmane.linux.bluez.kernel/38725/focus=38843
+
+Signed-off-by: Javier Viguera <javier.viguera@digi.com>
+
+---
+ Makefile.obexd | 4 ++--
+ .../src/{org.bluez.obex.service => org.bluez.obex.service.in} | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+ rename obexd/src/{org.bluez.obex.service => org.bluez.obex.service.in} (76%)
+
+diff --git a/Makefile.obexd b/Makefile.obexd
+index de59d29..73004a3 100644
+--- a/Makefile.obexd
++++ b/Makefile.obexd
+@@ -1,12 +1,12 @@
+ if SYSTEMD
+ systemduserunitdir = $(SYSTEMD_USERUNITDIR)
+ systemduserunit_DATA = obexd/src/obex.service
++endif
+
+ dbussessionbusdir = $(DBUS_SESSIONBUSDIR)
+ dbussessionbus_DATA = obexd/src/org.bluez.obex.service
+-endif
+
+-EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service
++EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service.in
+
+ if OBEX
+
+diff --git a/obexd/src/org.bluez.obex.service b/obexd/src/org.bluez.obex.service.in
+similarity index 76%
+rename from obexd/src/org.bluez.obex.service
+rename to obexd/src/org.bluez.obex.service.in
+index a538088..9c815f2 100644
+--- a/obexd/src/org.bluez.obex.service
++++ b/obexd/src/org.bluez.obex.service.in
+@@ -1,4 +1,4 @@
+ [D-BUS Service]
+ Name=org.bluez.obex
+-Exec=/bin/false
++Exec=@libexecdir@/obexd
+ SystemdService=dbus-org.bluez.obex.service
diff --git a/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch b/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch
new file mode 100644
index 0000000..e90b6a5
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch
@@ -0,0 +1,43 @@
+From 61e741654cc2eb167bca212a3bb2ba8f3ba280c1 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <Mingli.Yu@windriver.com>
+Date: Fri, 24 Aug 2018 12:04:03 +0800
+Subject: [PATCH] test-gatt: Fix hung issue
+
+The below test hangs infinitely
+$ unit/test-gatt -p /robustness/unkown-request -d
+/robustness/unkown-request - init
+/robustness/unkown-request - setup
+/robustness/unkown-request - setup complete
+/robustness/unkown-request - run
+ GATT: < 02 17 00 ...
+ bt_gatt_server:MTU exchange complete, with MTU: 23
+ GATT: > 03 00 02 ...
+ PDU: = 03 00 02 ...
+ GATT: < bf 00
+
+Actually, the /robustness/unkown-request test does
+no action.
+
+Upstream-Status: Submitted [https://marc.info/?l=linux-bluetooth&m=153508881804635&w=2]
+
+Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+---
+ unit/test-gatt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/unit/test-gatt.c b/unit/test-gatt.c
+index c7e28f8..b57373b 100644
+--- a/unit/test-gatt.c
++++ b/unit/test-gatt.c
+@@ -4463,7 +4463,7 @@ int main(int argc, char *argv[])
+ test_server, service_db_1, NULL,
+ raw_pdu(0x03, 0x00, 0x02),
+ raw_pdu(0xbf, 0x00),
+- raw_pdu(0x01, 0xbf, 0x00, 0x00, 0x06));
++ raw_pdu());
+
+ define_test_server("/robustness/unkown-command",
+ test_server, service_db_1, NULL,
+--
+2.7.4
+
diff --git a/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch b/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch
new file mode 100644
index 0000000..24ddae6
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0001-tests-add-a-target-for-building-tests-without-runnin.patch
@@ -0,0 +1,28 @@
+From 4bdf0f96dcaa945fd29f26d56e5b36d8c23e4c8b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 1 Apr 2016 17:07:34 +0300
+Subject: [PATCH] tests: add a target for building tests without running them
+
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index 1a48a71..ba3b92f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -425,6 +425,9 @@ endif
+ TESTS = $(unit_tests)
+ AM_TESTS_ENVIRONMENT = MALLOC_CHECK_=3 MALLOC_PERTURB_=69
+
++# This allows building tests without running them
++buildtests: $(TESTS)
++
+ if DBUS_RUN_SESSION
+ AM_TESTS_ENVIRONMENT += dbus-run-session --
+ endif
+--
+2.8.0.rc3
+
diff --git a/recipes-connectivity/bluez5/bluez5/CVE-2021-3588.patch b/recipes-connectivity/bluez5/bluez5/CVE-2021-3588.patch
new file mode 100644
index 0000000..f52ff47
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/CVE-2021-3588.patch
@@ -0,0 +1,34 @@
+From 3a40bef49305f8327635b81ac8be52a3ca063d5a Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Mon, 4 Jan 2021 10:38:31 -0800
+Subject: [PATCH] gatt: Fix potential buffer out-of-bound
+
+When client features is read check if the offset is within the cli_feat
+bounds.
+
+Fixes: https://github.com/bluez/bluez/issues/70
+
++Upstream-Status: Backport [https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=3a40bef49305f8327635b81ac8be52a3ca063d5a]
++Signed-off-by: Steve Sakoman <steve@sakoman.com>
++CVE: CVE-2021-3588
+
+---
+ src/gatt-database.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/gatt-database.c b/src/gatt-database.c
+index 90cc4bade..f2d7b5821 100644
+--- a/src/gatt-database.c
++++ b/src/gatt-database.c
+@@ -1075,6 +1075,11 @@ static void cli_feat_read_cb(struct gatt_db_attribute *attrib,
+ goto done;
+ }
+
++ if (offset >= sizeof(state->cli_feat)) {
++ ecode = BT_ATT_ERROR_INVALID_OFFSET;
++ goto done;
++ }
++
+ len = sizeof(state->cli_feat) - offset;
+ value = len ? &state->cli_feat[offset] : NULL;
+
diff --git a/recipes-connectivity/bluez5/bluez5/init b/recipes-connectivity/bluez5/bluez5/init
new file mode 100644
index 0000000..ca9fa18
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/init
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# Source function library
+. /etc/init.d/functions
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DESC=bluetooth
+
+DAEMON=@LIBEXECDIR@/bluetooth/bluetoothd
+
+# If you want to be ignore error of "org.freedesktop.hostname1",
+# please enable NOPLUGIN_OPTION.
+# NOPLUGIN_OPTION="--noplugin=hostname"
+NOPLUGIN_OPTION=""
+SSD_OPTIONS="--oknodo --quiet --exec $DAEMON -- $NOPLUGIN_OPTION"
+
+test -f $DAEMON || exit 0
+
+# FIXME: any of the sourced files may fail if/with syntax errors
+test -f /etc/default/bluetooth && . /etc/default/bluetooth
+test -f /etc/default/rcS && . /etc/default/rcS
+
+set -e
+
+case $1 in
+ start)
+ echo -n "Starting $DESC: "
+ if test "$BLUETOOTH_ENABLED" = 0; then
+ echo "disabled (see /etc/default/bluetooth)."
+ exit 0
+ fi
+ start-stop-daemon --start --background $SSD_OPTIONS
+ echo "${DAEMON##*/}."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ if test "$BLUETOOTH_ENABLED" = 0; then
+ echo "disabled (see /etc/default/bluetooth)."
+ exit 0
+ fi
+ start-stop-daemon --stop $SSD_OPTIONS
+ echo "${DAEMON##*/}."
+ ;;
+ restart|force-reload)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ status)
+ status ${DAEMON} || exit $?
+ ;;
+ *)
+ N=/etc/init.d/bluetooth
+ echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# vim:noet
diff --git a/recipes-connectivity/bluez5/bluez5/run-ptest b/recipes-connectivity/bluez5/bluez5/run-ptest
new file mode 100644
index 0000000..0335e68
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/run-ptest
@@ -0,0 +1,31 @@
+#! /bin/sh
+
+cd unit
+
+failed=0
+all=0
+
+for f in test-*; do
+ "./$f" -q
+ case "$?" in
+ 0)
+ echo "PASS: $f"
+ all=$((all + 1))
+ ;;
+ 77)
+ echo "SKIP: $f"
+ ;;
+ *)
+ echo "FAIL: $f"
+ failed=$((failed + 1))
+ all=$((all + 1))
+ ;;
+ esac
+done
+
+if [ "$failed" -eq 0 ] ; then
+ echo "All $all tests passed"
+else
+ echo "$failed of $all tests failed"
+fi
+
diff --git a/recipes-connectivity/bluez5/bluez5_5.64.bb b/recipes-connectivity/bluez5/bluez5_5.64.bb
new file mode 100644
index 0000000..ad34f79
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5_5.64.bb
@@ -0,0 +1,72 @@
+require bluez5.inc
+
+SRCREV = "1d6cfb8e625a944010956714c1802bc1e1fc6c4f"
+#SRC_URI[md5sum] = "d89a1c660eaf33ae360af93e3e2951bd"
+#SRC_URI[sha256sum] = "ae437e65b6b3070c198bc5b0109fe9cdeb9eaa387380e2072f9de65fe8a1de34"
+
+# These issues have kernel fixes rather than bluez fixes so exclude here
+CVE_CHECK_WHITELIST += "CVE-2020-12352 CVE-2020-24490"
+
+# noinst programs in Makefile.tools that are conditional on READLINE
+# support
+NOINST_TOOLS_READLINE ?= " \
+ ${@bb.utils.contains('PACKAGECONFIG', 'deprecated', 'attrib/gatttool', '', d)} \
+ tools/obex-client-tool \
+ tools/obex-server-tool \
+ tools/bluetooth-player \
+ tools/obexctl \
+ tools/btmgmt \
+"
+
+# noinst programs in Makefile.tools that are conditional on TESTING
+# support
+NOINST_TOOLS_TESTING ?= " \
+ emulator/btvirt \
+ emulator/b1ee \
+ emulator/hfp \
+ peripheral/btsensor \
+ tools/3dsp \
+ tools/mgmt-tester \
+ tools/gap-tester \
+ tools/l2cap-tester \
+ tools/sco-tester \
+ tools/smp-tester \
+ tools/hci-tester \
+ tools/rfcomm-tester \
+ tools/bnep-tester \
+ tools/userchan-tester \
+"
+
+# noinst programs in Makefile.tools that are conditional on TOOLS
+# support
+NOINST_TOOLS_BT ?= " \
+ tools/bdaddr \
+ tools/avinfo \
+ tools/avtest \
+ tools/scotest \
+ tools/amptest \
+ tools/hwdb \
+ tools/hcieventmask \
+ tools/hcisecfilter \
+ tools/btinfo \
+ tools/btsnoop \
+ tools/btproxy \
+ tools/btiotest \
+ tools/bneptest \
+ tools/mcaptest \
+ tools/cltest \
+ tools/oobtest \
+ tools/advtest \
+ tools/seq2bseq \
+ tools/nokfw \
+ tools/create-image \
+ tools/eddystone \
+ tools/ibeacon \
+ tools/btgatt-client \
+ tools/btgatt-server \
+ tools/test-runner \
+ tools/check-selftest \
+ tools/gatt-service \
+ profiles/iap/iapd \
+ ${@bb.utils.contains('PACKAGECONFIG', 'btpclient', 'tools/btpclient', '', d)} \
+"