bluez: update to 5.59.

Patch came from Arch and can also be found in [1].

[1] https://www.spinics.net/lists/linux-bluetooth/msg91322.html
This commit is contained in:
Érico Nogueira 2021-06-15 15:07:56 -03:00 committed by Érico Nogueira Rolim
parent a351cdf88d
commit 8f00a4e79c
2 changed files with 87 additions and 4 deletions

View File

@ -0,0 +1,83 @@
From 382646b490c1c336dd32f9186293616ceb4d808b Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Mon, 3 May 2021 14:45:00 +0200
Subject: [PATCH 1/2] rfkill: Fix reading from rfkill socket
The kernel will always send exactly one event, but the size of the
passed struct will depend on the length of the submitted read() and the
kernel version. i.e. the interface can be extended and we need to expect
for a read to be longer than expected if we ask for it.
Fix this by only requesting the needed length and explicitly check the
length against the V1 version of the structure to make the code a bit
more future proof in case the internal copy of the struct is updated to
contain new fields.
---
src/rfkill.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/src/rfkill.c b/src/rfkill.c
index ec9fcdfdd..2099c5ac5 100644
--- a/src/rfkill.c
+++ b/src/rfkill.c
@@ -53,12 +53,12 @@ struct rfkill_event {
uint8_t soft;
uint8_t hard;
};
+#define RFKILL_EVENT_SIZE_V1 8
static gboolean rfkill_event(GIOChannel *chan,
GIOCondition cond, gpointer data)
{
- unsigned char buf[32];
- struct rfkill_event *event = (void *) buf;
+ struct rfkill_event event = { 0 };
struct btd_adapter *adapter;
char sysname[PATH_MAX];
ssize_t len;
@@ -69,34 +69,32 @@ static gboolean rfkill_event(GIOChannel *chan,
fd = g_io_channel_unix_get_fd(chan);
- memset(buf, 0, sizeof(buf));
-
- len = read(fd, buf, sizeof(buf));
+ len = read(fd, &event, sizeof(event));
if (len < 0) {
if (errno == EAGAIN)
return TRUE;
return FALSE;
}
- if (len != sizeof(struct rfkill_event))
+ if (len < RFKILL_EVENT_SIZE_V1)
return TRUE;
DBG("RFKILL event idx %u type %u op %u soft %u hard %u",
- event->idx, event->type, event->op,
- event->soft, event->hard);
+ event.idx, event.type, event.op,
+ event.soft, event.hard);
- if (event->soft || event->hard)
+ if (event.soft || event.hard)
return TRUE;
- if (event->op != RFKILL_OP_CHANGE)
+ if (event.op != RFKILL_OP_CHANGE)
return TRUE;
- if (event->type != RFKILL_TYPE_BLUETOOTH &&
- event->type != RFKILL_TYPE_ALL)
+ if (event.type != RFKILL_TYPE_BLUETOOTH &&
+ event.type != RFKILL_TYPE_ALL)
return TRUE;
snprintf(sysname, sizeof(sysname) - 1,
- "/sys/class/rfkill/rfkill%u/name", event->idx);
+ "/sys/class/rfkill/rfkill%u/name", event.idx);
fd = open(sysname, O_RDONLY);
if (fd < 0)
--
2.31.1

View File

@ -1,13 +1,13 @@
# Template file for 'bluez'
pkgname=bluez
version=5.58
revision=2
version=5.59
revision=1
build_style=gnu-configure
configure_args="--with-udevdir=/usr/lib/udev --disable-systemd
--enable-sixaxis --enable-threads --enable-library --enable-deprecated
--enable-external-ell $(vopt_enable mesh) $(vopt_enable nfc)
$(vopt_enable experimental)"
hostmakedepends="automake flex libtool pkg-config"
hostmakedepends="automake flex libtool pkg-config python3-docutils"
makedepends="cups-devel eudev-libudev-devel libglib-devel libical-devel
readline-devel ell-devel $(vopt_if mesh json-c-devel)"
short_desc="Bluetooth tools and daemons"
@ -15,7 +15,7 @@ maintainer="Érico Nogueira <ericonr@disroot.org>"
license="GPL-2.0-or-later, LGPL-2.1-or-later"
homepage="http://www.bluez.org/"
distfiles="${KERNEL_SITE}/bluetooth/$pkgname-$version.tar.xz"
checksum=c8065e75a5eb67236849ef68a354b1700540305a8c88ef0a0fd6288f19daf1f1
checksum=046b95b386d0bfb2a16311fe799d517ee7735045512d89902c4ed701db477316
conf_files="/etc/bluetooth/main.conf"
system_groups="bluetooth"
patch_args="-Np1"