* [PATCH BlueZ 3/4] android: Trivial replacement of tabs where spaces are expected
From: Anderson Lizardo @ 2014-01-26 1:44 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390700642-10482-1-git-send-email-anderson.lizardo@openbossa.org>
---
android/android-tester.c | 2 +-
android/hidhost.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/android/android-tester.c b/android/android-tester.c
index ba9137a..870ad8d 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3459,7 +3459,7 @@ static void setup_hidhost_connect(const void *test_data)
bthost_write_scan_enable(bthost, 0x03);
}
-static void hid_discon_cb(bt_bdaddr_t *bd_addr, bthh_connection_state_t state)
+static void hid_discon_cb(bt_bdaddr_t *bd_addr, bthh_connection_state_t state)
{
if (state == BTHH_CONN_STATE_DISCONNECTED)
tester_test_passed();
diff --git a/android/hidhost.c b/android/hidhost.c
index 37b28a6..6d1088a 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -375,7 +375,7 @@ static void bt_hid_notify_get_report(struct hid_device *dev, uint8_t *buf,
if (!((buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_INPUT)) ||
(buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_OUTPUT)) ||
- (buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_FEATURE)))) {
+ (buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_FEATURE)))) {
ev = g_malloc0(ev_len);
ev->status = buf[0];
bdaddr2android(&dev->dst, ev->bdaddr);
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ 2/4] android: Remove useless extra parenthesis
From: Anderson Lizardo @ 2014-01-26 1:44 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390700642-10482-1-git-send-email-anderson.lizardo@openbossa.org>
---
android/android-tester.c | 4 ++--
android/bluetooth.c | 2 +-
android/ipc-tester.c | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/android/android-tester.c b/android/android-tester.c
index e4f95ce..ba9137a 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -518,7 +518,7 @@ static void emulator(int pipe, int hci_index)
memset(buf, 0, sizeof(buf));
len = read(fd, buf, sizeof(buf));
- if (len <= 0 || (strcmp(buf, "bluetooth.start=daemon")))
+ if (len <= 0 || strcmp(buf, "bluetooth.start=daemon"))
goto failed;
close(pipe);
@@ -1985,7 +1985,7 @@ static bool setup(struct test_data *data)
data->bluetoothd_pid = pid;
len = read(signal_fd[0], buf, sizeof(buf));
- if (len <= 0 || (strcmp(buf, EMULATOR_SIGNAL))) {
+ if (len <= 0 || strcmp(buf, EMULATOR_SIGNAL)) {
close(signal_fd[0]);
return false;
}
diff --git a/android/bluetooth.c b/android/bluetooth.c
index 339fd77..cb1b87a 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -74,7 +74,7 @@
#define DEVICES_CACHE_MAX 300
#define BASELEN_PROP_CHANGED (sizeof(struct hal_ev_adapter_props_changed) \
- + (sizeof(struct hal_property)))
+ + sizeof(struct hal_property))
#define BASELEN_REMOTE_DEV_PROP (sizeof(struct hal_ev_remote_device_props) \
+ sizeof(struct hal_property))
diff --git a/android/ipc-tester.c b/android/ipc-tester.c
index e1aeb2e..ec8d3ff 100644
--- a/android/ipc-tester.c
+++ b/android/ipc-tester.c
@@ -264,7 +264,7 @@ static void emulator(int pipe, int hci_index)
memset(buf, 0, sizeof(buf));
len = read(fd, buf, sizeof(buf));
- if (len <= 0 || (strcmp(buf, "ctl.start=bluetoothd")))
+ if (len <= 0 || strcmp(buf, "ctl.start=bluetoothd"))
goto failed;
close(pipe);
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ 1/4] android/tester: Fix crash on failure inside setup()
From: Anderson Lizardo @ 2014-01-26 1:43 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390700642-10482-1-git-send-email-anderson.lizardo@openbossa.org>
The various setup_* functions were still continuing even though setup()
failed and did not initialize data->if_bluetooth properly.
Also do a little refactoring by moving tester_setup_failed() calls to
the setup() callers, so they stay close to the other failure points and
not hidden deep into a helper function.
Crash detected by Valgrind:
==4959== Invalid read of size 4
==4959== at 0x805967A: setup_base (android-tester.c:2029)
==4959== by 0x8055541: setup_callback (tester.c:373)
==4959== by 0x408348F: g_idle_dispatch (gmain.c:5250)
==4959== by 0x4086A75: g_main_context_dispatch (gmain.c:3065)
==4959== by 0x4086E14: g_main_context_iterate.isra.23 (gmain.c:3712)
==4959== by 0x40872FA: g_main_loop_run (gmain.c:3906)
==4959== by 0x41744D2: (below main) (libc-start.c:226)
==4959== Address 0x4 is not stack'd, malloc'd or (recently) free'd
---
android/android-tester.c | 85 ++++++++++++++++++++++++++----------------------
1 file changed, 46 insertions(+), 39 deletions(-)
diff --git a/android/android-tester.c b/android/android-tester.c
index aa953bf..e4f95ce 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -1951,8 +1951,7 @@ static bt_callbacks_t bt_callbacks = {
.le_test_mode_cb = NULL
};
-
-static void setup(struct test_data *data)
+static bool setup(struct test_data *data)
{
const hw_module_t *module;
hw_device_t *device;
@@ -1962,18 +1961,15 @@ static void setup(struct test_data *data)
int len;
int err;
- if (pipe(signal_fd)) {
- tester_setup_failed();
- return;
- }
+ if (pipe(signal_fd))
+ return false;
pid = fork();
if (pid < 0) {
close(signal_fd[0]);
close(signal_fd[1]);
- tester_setup_failed();
- return;
+ return false;
}
if (pid == 0) {
@@ -1991,32 +1987,27 @@ static void setup(struct test_data *data)
len = read(signal_fd[0], buf, sizeof(buf));
if (len <= 0 || (strcmp(buf, EMULATOR_SIGNAL))) {
close(signal_fd[0]);
- tester_setup_failed();
- return;
+ return false;
}
close(signal_fd[0]);
err = hw_get_module(BT_HARDWARE_MODULE_ID, &module);
- if (err) {
- tester_setup_failed();
- return;
- }
+ if (err)
+ return false;
err = module->methods->open(module, BT_HARDWARE_MODULE_ID, &device);
- if (err) {
- tester_setup_failed();
- return;
- }
+ if (err)
+ return false;
data->device = device;
data->if_bluetooth = ((bluetooth_device_t *)
device)->get_bluetooth_interface();
- if (!data->if_bluetooth) {
- tester_setup_failed();
- return;
- }
+ if (!data->if_bluetooth)
+ return false;
+
+ return true;
}
static void setup_base(const void *test_data)
@@ -2024,7 +2015,10 @@ static void setup_base(const void *test_data)
struct test_data *data = tester_get_data();
bt_status_t status;
- setup(data);
+ if (!setup(data)) {
+ tester_setup_failed();
+ return;
+ }
status = data->if_bluetooth->init(&bt_callbacks);
if (status != BT_STATUS_SUCCESS) {
@@ -2040,7 +2034,10 @@ static void setup_enabled_adapter(const void *test_data)
struct test_data *data = tester_get_data();
bt_status_t status;
- setup(data);
+ if (!setup(data)) {
+ tester_setup_failed();
+ return;
+ }
status = data->if_bluetooth->init(&bt_callbacks);
if (status != BT_STATUS_SUCCESS) {
@@ -2786,7 +2783,10 @@ static void setup_socket_interface(const void *test_data)
bt_status_t status;
const void *sock;
- setup(data);
+ if (!setup(data)) {
+ tester_setup_failed();
+ return;
+ }
status = data->if_bluetooth->init(&bt_socket_callbacks);
if (status != BT_STATUS_SUCCESS) {
@@ -2812,7 +2812,10 @@ static void setup_socket_interface_enabled(const void *test_data)
bt_status_t status;
const void *sock;
- setup(data);
+ if (!setup(data)) {
+ tester_setup_failed();
+ return;
+ }
status = data->if_bluetooth->init(&bt_socket_callbacks);
if (status != BT_STATUS_SUCCESS) {
@@ -3158,41 +3161,42 @@ static bthh_callbacks_t bthh_callbacks = {
.virtual_unplug_cb = hidhost_virual_unplug_cb
};
-static void setup_hidhost(const void *test_data)
+static bool setup_hidhost(const void *test_data)
{
struct test_data *data = tester_get_data();
bt_status_t status;
const void *hid;
- setup(data);
+ if (!setup(data))
+ return false;
status = data->if_bluetooth->init(&bt_callbacks);
if (status != BT_STATUS_SUCCESS) {
data->if_bluetooth = NULL;
- tester_setup_failed();
- return;
+ return false;
}
hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
- if (!hid) {
- tester_setup_failed();
- return;
- }
+ if (!hid)
+ return false;
data->if_hid = hid;
status = data->if_hid->init(&bthh_callbacks);
if (status != BT_STATUS_SUCCESS) {
data->if_hid = NULL;
- tester_setup_failed();
- return;
+ return false;
}
+
+ return true;
}
static void setup_hidhost_interface(const void *test_data)
{
- setup_hidhost(test_data);
- tester_setup_complete();
+ if (setup_hidhost(test_data))
+ tester_setup_complete();
+ else
+ tester_setup_failed();
}
#define HID_GET_REPORT_PROTOCOL 0x60
@@ -3437,7 +3441,10 @@ static void setup_hidhost_connect(const void *test_data)
struct test_data *data = tester_get_data();
struct bthost *bthost;
- setup_hidhost(test_data);
+ if (!setup_hidhost(test_data)) {
+ tester_setup_failed();
+ return;
+ }
bthost = hciemu_client_get_host(data->hciemu);
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ v2 0/4] android: Minor fixes
From: Anderson Lizardo @ 2014-01-26 1:43 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390512281-26541-1-git-send-email-anderson.lizardo@openbossa.org>
Hi,
Changes since v1:
* Rebased against current master
* Fixed typo in commit message
This patch set contains 2 patches fixing problems found while trying to run
android-tester on a system with some features disabled on the kernel. Two other
patches are simple cleanups.
Best Regards
Anderson Lizardo
Anderson Lizardo (4):
android/tester: Fix crash on failure inside setup()
android: Remove useless extra parenthesis
android: Trivial replacement of tabs where spaces are expected
emulator: Fix crash if socket(AF_ALG) is not supported by the kernel
android/android-tester.c | 91 ++++++++++++++++++++++++++----------------------
android/bluetooth.c | 2 +-
android/hidhost.c | 2 +-
android/ipc-tester.c | 2 +-
emulator/bthost.c | 6 ++--
5 files changed, 56 insertions(+), 47 deletions(-)
--
1.8.3.2
^ permalink raw reply
* [PATCH BlueZ 2/2] shared: Fix undefined behavior when calculating next power of two
From: Anderson Lizardo @ 2014-01-26 1:34 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390700061-18666-1-git-send-email-anderson.lizardo@openbossa.org>
According to GCC documentation, __builtin_clz() is undefined if argument
is zero. The following problem was detected when compiling with -O0:
ERROR:unit/test-ringbuf.c:70:test_power2: assertion failed: (size1 ==
size2)
Also refactor align_power2() so the internal "find last set bit"
operation is in its own fls() function (similar to how kernel does).
fls() checks if argument is zero before calling __builtin_clz().
---
src/shared/ringbuf.c | 9 ++++++++-
unit/test-ringbuf.c | 7 ++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/shared/ringbuf.c b/src/shared/ringbuf.c
index 3e5c7d3..f9c4376 100644
--- a/src/shared/ringbuf.c
+++ b/src/shared/ringbuf.c
@@ -48,9 +48,16 @@ struct ringbuf {
#define RINGBUF_RESET 0
+/* Find last (most siginificant) set bit */
+static inline unsigned int fls(unsigned int x)
+{
+ return x ? sizeof(x) * 8 - __builtin_clz(x) : 0;
+}
+
+/* Round up to nearest power of two */
static inline unsigned int align_power2(unsigned int u)
{
- return 1 << ((sizeof(u) * 8) - __builtin_clz(u - 1));
+ return 1 << fls(u - 1);
}
struct ringbuf *ringbuf_new(size_t size)
diff --git a/unit/test-ringbuf.c b/unit/test-ringbuf.c
index e63321c..75be3a3 100644
--- a/unit/test-ringbuf.c
+++ b/unit/test-ringbuf.c
@@ -45,9 +45,14 @@ static unsigned int nlpo2(unsigned int x)
return x + 1;
}
+static unsigned int fls(unsigned int x)
+{
+ return x ? sizeof(x) * 8 - __builtin_clz(x) : 0;
+}
+
static unsigned int align_power2(unsigned int u)
{
- return 1 << ((sizeof(u) * 8) - __builtin_clz(u - 1));
+ return 1 << fls(u - 1);
}
static void test_power2(void)
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ 1/2] unit/test-ringbuf: Fix indentation
From: Anderson Lizardo @ 2014-01-26 1:34 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
---
unit/test-ringbuf.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/unit/test-ringbuf.c b/unit/test-ringbuf.c
index a19216f..e63321c 100644
--- a/unit/test-ringbuf.c
+++ b/unit/test-ringbuf.c
@@ -41,7 +41,8 @@ static unsigned int nlpo2(unsigned int x)
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
- return x + 1;
+
+ return x + 1;
}
static unsigned int align_power2(unsigned int u)
--
1.8.3.2
^ permalink raw reply related
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Anderson Lizardo @ 2014-01-25 23:16 UTC (permalink / raw)
To: Anderson Lizardo, BlueZ development
In-Reply-To: <20140125231309.GB16167@x220.p-661hnu-f1>
Hi Johan,
On Sat, Jan 25, 2014 at 7:13 PM, Johan Hedberg <johan.hedberg@gmail.com> wrote:
>> What about the suggestion to make l2cap-tester check if LE CoC is
>> enabled on the kernel and skip the the tests that depend on it? Right
>> now, the tests simply fail which is misleading (at first I thought it
>> was a regression).
>>
>> Another option is to change the test name to mention that they require
>> enabling LE CoC.
>
> This has never bothered me much since the assumption is that mainly
> developers would be running these tools and therefore know the
> implications and requirements. I have a feeling that adding this kind of
> checks might be a bit overkill, especially since this debugfs entry will
> disappear as soon as we do one more test run at the UPF next week. After
> that LE CoC support will always be there if you've got a new enough
> kernel.
If the are plans to have this option removed real soon, no problem for me then.
Best Regards,
--
Anderson Lizardo
INdT - Manaus - Brazil
^ permalink raw reply
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Johan Hedberg @ 2014-01-25 23:13 UTC (permalink / raw)
To: Anderson Lizardo; +Cc: BlueZ development
In-Reply-To: <CAJdJm_PPeA-DHfFPKi=iwjb_Kc4rrU8zY6SgX-G_O9ts3wCaZw@mail.gmail.com>
Hi Lizardo,
On Sat, Jan 25, 2014, Anderson Lizardo wrote:
> On Sat, Jan 25, 2014 at 6:12 PM, Johan Hedberg <johan.hedberg@gmail.com> wrote:
> > I pushed your first patch and a slightly different version of the
> > second one which is more thorough in its checks. I also sent fixes for
> > the kernel side so you don't need to spend more time on that (unless you
> > disagree with the fixes I sent).
>
> Thanks! I looked at the patches and I have no comments. Will do tests
> and report problems (if any).
>
> What about the suggestion to make l2cap-tester check if LE CoC is
> enabled on the kernel and skip the the tests that depend on it? Right
> now, the tests simply fail which is misleading (at first I thought it
> was a regression).
>
> Another option is to change the test name to mention that they require
> enabling LE CoC.
This has never bothered me much since the assumption is that mainly
developers would be running these tools and therefore know the
implications and requirements. I have a feeling that adding this kind of
checks might be a bit overkill, especially since this debugfs entry will
disappear as soon as we do one more test run at the UPF next week. After
that LE CoC support will always be there if you've got a new enough
kernel.
Johan
^ permalink raw reply
* Re: [PATCH 2/3] Bluetooth: Fix freeing l2cap_chan while it's locked
From: Johan Hedberg @ 2014-01-25 23:08 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1390687809-14408-2-git-send-email-johan.hedberg@gmail.com>
Hi,
On Sat, Jan 25, 2014, johan.hedberg@gmail.com wrote:
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -442,10 +442,14 @@ static void l2cap_chan_destroy(struct kref *kref)
>
> BT_DBG("chan %p", chan);
>
> + l2cap_chan_lock(chan);
> +
> write_lock(&chan_list_lock);
> list_del(&chan->global_l);
> write_unlock(&chan_list_lock);
>
> + l2cap_chan_unlock(chan);
> +
> kfree(chan);
> }
Please hold on a bit with this patch. The other two in the set should be
good to go though.
Since the race is hard to reproduce I'm not 100% sure this actually
fixes it. Looking at l2cap_get_chan_by_scid holding the lock should not
prevent it from returning the channel.
Johan
^ permalink raw reply
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Anderson Lizardo @ 2014-01-25 22:48 UTC (permalink / raw)
To: Anderson Lizardo, BlueZ development
In-Reply-To: <20140125221203.GA14531@x220.p-661hnu-f1>
Hi Johan,
On Sat, Jan 25, 2014 at 6:12 PM, Johan Hedberg <johan.hedberg@gmail.com> wrote:
> I pushed your first patch and a slightly different version of the
> second one which is more thorough in its checks. I also sent fixes for
> the kernel side so you don't need to spend more time on that (unless you
> disagree with the fixes I sent).
Thanks! I looked at the patches and I have no comments. Will do tests
and report problems (if any).
What about the suggestion to make l2cap-tester check if LE CoC is
enabled on the kernel and skip the the tests that depend on it? Right
now, the tests simply fail which is misleading (at first I thought it
was a regression).
Another option is to change the test name to mention that they require
enabling LE CoC.
Best Regards,
--
Anderson Lizardo
INdT - Manaus - Brazil
^ permalink raw reply
* Re: [PATCH] Rename adapter_remove_device to btd_adapter_remove_device
From: Johan Hedberg @ 2014-01-25 22:13 UTC (permalink / raw)
To: Petri Gynther; +Cc: linux-bluetooth
In-Reply-To: <20140125005506.7AD85100900@puck.mtv.corp.google.com>
Hi Petri,
On Fri, Jan 24, 2014, Petri Gynther wrote:
> Allow this symbol to be exported and usable from external plugins.
> ---
> src/adapter.c | 14 +++++++-------
> src/adapter.h | 3 +++
> 2 files changed, 10 insertions(+), 7 deletions(-)
The patch looks fine, but we usually don't export symbols without
knowing that there exists a valid use case for it. So could you perhaps
give some background (or even a follow-up patch) to explain what you
need this for?
Johan
^ permalink raw reply
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Johan Hedberg @ 2014-01-25 22:12 UTC (permalink / raw)
To: Anderson Lizardo; +Cc: linux-bluetooth
In-Reply-To: <1390614842-28379-1-git-send-email-anderson.lizardo@openbossa.org>
Hi Lizardo,
On Fri, Jan 24, 2014, Anderson Lizardo wrote:
> These patches extend existing tests in l2cap-tester to exercise two common
> operations on LE sockets:
>
> * getsockopt(BT_SECURITY) on client side (to set security level)
> * setsockopt(L2CAP_OPTIONS) on server side (called by bt_io_get())
>
> At the moment, there is a regression on kernel introduced by commit
> a5a1e0e6b9c1dea3696192b5ec153d03917eb7b8 ("Bluetooth: Switch ATT channels to
> use L2CAP_CHAN_FIXED") which is affecting these two operations. I'm currently
> implementing and testing fixes for this regression.
I pushed your first patch and a slightly different version of the
second one which is more thorough in its checks. I also sent fixes for
the kernel side so you don't need to spend more time on that (unless you
disagree with the fixes I sent).
Johan
^ permalink raw reply
* [PATCH 3/3] Bluetooth: Fix CID initialization for fixed channels
From: johan.hedberg @ 2014-01-25 22:10 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1390687809-14408-1-git-send-email-johan.hedberg@gmail.com>
From: Johan Hedberg <johan.hedberg@intel.com>
Fixed channels have the same source and destination CID. Ensure that the
values get properly initialized when receiving incoming connections and
deriving values from the parent socket.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_core.c | 2 --
net/bluetooth/l2cap_sock.c | 5 +++++
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 3a9917be6c6e..f86e98c47094 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1466,8 +1466,6 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
if (!chan)
goto clean;
- chan->dcid = L2CAP_CID_ATT;
-
bacpy(&chan->src, &hcon->src);
bacpy(&chan->dst, &hcon->dst);
chan->src_type = bdaddr_type(hcon, hcon->src_type);
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 588d43b1c18e..304fc8589af4 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1470,6 +1470,11 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent)
chan->tx_credits = pchan->tx_credits;
chan->rx_credits = pchan->rx_credits;
+ if (chan->chan_type == L2CAP_CHAN_FIXED) {
+ chan->scid = pchan->scid;
+ chan->dcid = pchan->scid;
+ }
+
security_sk_clone(parent, sk);
} else {
switch (sk->sk_type) {
--
1.8.5.3
^ permalink raw reply related
* [PATCH 2/3] Bluetooth: Fix freeing l2cap_chan while it's locked
From: johan.hedberg @ 2014-01-25 22:10 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1390687809-14408-1-git-send-email-johan.hedberg@gmail.com>
From: Johan Hedberg <johan.hedberg@intel.com>
There's a race condition where it's possible that user space closes the
socket right at the moment that the kernel is inside some L2CAP
signaling channel handler with the lock held for the l2cap_chan tied to
the socket. When the race occurs it can look as follows:
WARNING: CPU: 1 PID: 2395 at kernel/locking/mutex.c:565 __mutex_lock_slowpath+0x1ff/0x26a()
DEBUG_LOCKS_WARN_ON(l->magic != l)
CPU: 1 PID: 2395 Comm: kworker/u5:1 Not tainted 3.12.0+ #224
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
Workqueue: hci0 hci_rx_work
00000007 00000000 ed74dcd0 c1344099 ed74dcf8 ed74dce8 c1028b29 c1346891
ed5e0b80 00000246 f61d7600 ed74dd00 c1028b88 00000009 ed74dcf8 c13fd4cc
ed74dd14 ed74dd50 c1346891 c13fd4e4 00000235 c13fd4cc c13fd50a 5a5a5a5a
Call Trace:
[<c1344099>] dump_stack+0x48/0x60
[<c1028b29>] warn_slowpath_common+0x57/0x6e
[<c1346891>] ? __mutex_lock_slowpath+0x1ff/0x26a
[<c1028b88>] warn_slowpath_fmt+0x26/0x2a
[<c1346891>] __mutex_lock_slowpath+0x1ff/0x26a
[<c134691f>] mutex_lock+0x23/0x2f
[<c130e79a>] l2cap_get_chan_by_scid+0x32/0x40
[<c13143cb>] l2cap_config_req+0x6d/0x78f
[<c1009486>] ? save_stack_trace+0x1d/0x3b
[<c10915c2>] ? set_track+0x48/0xa7
[<c134312b>] ? free_debug_processing+0x134/0x16b
[<c1006019>] ? native_sched_clock+0x37/0x3a
[<c1315107>] l2cap_recv_frame+0x2f2/0x1a85
[<c1315107>] ? l2cap_recv_frame+0x2f2/0x1a85
[<c1317913>] l2cap_recv_acldata+0xe8/0x239
[<c1317913>] ? l2cap_recv_acldata+0xe8/0x239
[<c12fa470>] hci_rx_work+0x1b0/0x295
[<c13465d9>] ? mutex_unlock+0x8/0xa
[<c12fa470>] ? hci_rx_work+0x1b0/0x295
[<c103592c>] ? pwq_activate_delayed_work+0x1c/0x27
[<c1036d25>] process_one_work+0x128/0x1df
[<c1347401>] ? _raw_spin_unlock_irq+0x8/0x12
[<c1036d25>] ? process_one_work+0x128/0x1df
[<c103713a>] worker_thread+0x127/0x1c4
[<c1037013>] ? rescuer_thread+0x216/0x216
[<c103aec6>] kthread+0x88/0x8d
[<c1040000>] ? task_rq_lock+0x37/0x6e
[<c1347e77>] ret_from_kernel_thread+0x1b/0x28
[<c103ae3e>] ? __kthread_parkme+0x50/0x50
---[ end trace 81d41a8e15d9559e ]---
=============================================================================
BUG kmalloc-1024 (Tainted: G W ): Poison overwritten
-----------------------------------------------------------------------------
INFO: 0xed5e0b80-0xed5e0b85. First byte 0xff instead of 0x6b
INFO: Allocated in l2cap_chan_create+0x1f/0xf9 age=9986 cpu=1 pid=2395
__slab_alloc.constprop.66+0x1c5/0x36e
kmem_cache_alloc+0x54/0xb4
l2cap_chan_create+0x1f/0xf9
l2cap_sock_alloc.constprop.5+0x73/0x9b
l2cap_sock_new_connection_cb+0x5d/0x95
l2cap_connect+0x112/0x3a0
l2cap_recv_frame+0x534/0x1a85
process_pending_rx+0x48/0x56
process_one_work+0x128/0x1df
worker_thread+0x127/0x1c4
kthread+0x88/0x8d
ret_from_kernel_thread+0x1b/0x28
INFO: Freed in l2cap_chan_destroy+0x59/0x65 age=9986 cpu=0 pid=2363
__slab_free+0x3c/0x260
kfree+0xb3/0xbc
l2cap_chan_destroy+0x59/0x65
kref_put+0x2a/0x33
l2cap_chan_put+0x3f/0x4a
l2cap_sock_destruct+0x3d/0x77
__sk_free+0x20/0x116
sk_free+0x1c/0x1f
l2cap_sock_kill+0x6f/0x74
l2cap_sock_teardown_cb+0xc1/0x119
l2cap_chan_close+0x186/0x192
l2cap_sock_shutdown+0x1af/0x214
l2cap_sock_release+0x56/0xa2
sock_release+0x10/0x55
sock_close+0xb/0xf
__fput+0xd3/0x175
This patch fixes the race by acquiring the l2cap_chan lock in
l2cap_chan_destroy before removing the channel from the global list.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_core.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index e5c5c7427c41..3a9917be6c6e 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -442,10 +442,14 @@ static void l2cap_chan_destroy(struct kref *kref)
BT_DBG("chan %p", chan);
+ l2cap_chan_lock(chan);
+
write_lock(&chan_list_lock);
list_del(&chan->global_l);
write_unlock(&chan_list_lock);
+ l2cap_chan_unlock(chan);
+
kfree(chan);
}
--
1.8.5.3
^ permalink raw reply related
* [PATCH 1/3] Bluetooth: Fix BT_SECURITY socket option for fixed channels (ATT)
From: johan.hedberg @ 2014-01-25 22:10 UTC (permalink / raw)
To: linux-bluetooth
From: Johan Hedberg <johan.hedberg@intel.com>
The BT_SECURITY option should also be allowed for fixed channels, so
punch the appropriate hole for it when checking for the channel type.
The main user of fixed CID user space sockets is right now ATT (which is
broken without this patch).
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
net/bluetooth/l2cap_sock.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 3f8e2a223474..588d43b1c18e 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -513,6 +513,7 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
switch (optname) {
case BT_SECURITY:
if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
+ chan->chan_type != L2CAP_CHAN_FIXED &&
chan->chan_type != L2CAP_CHAN_RAW) {
err = -EINVAL;
break;
@@ -769,6 +770,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
switch (optname) {
case BT_SECURITY:
if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
+ chan->chan_type != L2CAP_CHAN_FIXED &&
chan->chan_type != L2CAP_CHAN_RAW) {
err = -EINVAL;
break;
--
1.8.5.3
^ permalink raw reply related
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Anderson Lizardo @ 2014-01-25 2:50 UTC (permalink / raw)
To: BlueZ development; +Cc: Anderson Lizardo
In-Reply-To: <CAJdJm_NYECBW1hH+PmYtQqoBL-_279_hjfgqWD8i85bi9nHJiw@mail.gmail.com>
Hi again,
On Fri, Jan 24, 2014 at 10:00 PM, Anderson Lizardo
<anderson.lizardo@openbossa.org> wrote:
> Actually I know why they fail: the tests try to use a PSM (and not
> CID) on a single mode LE adapter. I just don't understand why this is
> expected to work.
I now realise that this has to do with LE CoC. Would it be okay to
make l2cap-tester check for
/sys/module/bluetooth/parameters/enable_lecoc at test setup and if it
contains "N", skip the test?
Best Regards,
--
Anderson Lizardo
INdT - Manaus - Brazil
^ permalink raw reply
* Re: [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Anderson Lizardo @ 2014-01-25 2:00 UTC (permalink / raw)
To: BlueZ development; +Cc: Anderson Lizardo
In-Reply-To: <1390614842-28379-1-git-send-email-anderson.lizardo@openbossa.org>
Hi,
On Fri, Jan 24, 2014 at 9:54 PM, Anderson Lizardo
<anderson.lizardo@openbossa.org> wrote:
> PS: For some reason, the following tests are failing on my system, even using
> an older kernel:
>
> L2CAP LE Client - Success
> L2CAP LE Client SMP - Success
> L2CAP LE Client - Command Reject
> L2CAP LE Client - Invalid PSM
> L2CAP LE Server - Success
>
> connect() is returning EINVAL. Any ideas for why this may be happening?
Actually I know why they fail: the tests try to use a PSM (and not
CID) on a single mode LE adapter. I just don't understand why this is
expected to work.
Best Regards,
--
Anderson Lizardo
INdT - Manaus - Brazil
^ permalink raw reply
* [PATCH BlueZ 2/2] tools/l2cap-tester: Test getsockopt(L2CAP_OPTIONS) on LE server
From: Anderson Lizardo @ 2014-01-25 1:54 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390614842-28379-1-git-send-email-anderson.lizardo@openbossa.org>
The btio layer always performs this operation when bt_io_get() is
called. Also check for getsockopt(BT_RCVMTU), which is supported on
kernels with CoC enabled.
---
tools/l2cap-tester.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c
index d541f1b..78e7ce6 100644
--- a/tools/l2cap-tester.c
+++ b/tools/l2cap-tester.c
@@ -1034,7 +1034,9 @@ static gboolean l2cap_listen_cb(GIOChannel *io, GIOCondition cond,
{
struct test_data *data = tester_get_data();
const struct l2cap_data *l2data = data->test_data;
- int sk, new_sk;
+ struct l2cap_options l2o;
+ int sk, new_sk, err;
+ socklen_t len;
data->io_id = 0;
@@ -1047,6 +1049,28 @@ static gboolean l2cap_listen_cb(GIOChannel *io, GIOCondition cond,
return FALSE;
}
+ len = sizeof(l2o);
+ memset(&l2o, 0, len);
+
+ /* LE CoC enabled kernels should support BT_RCVMTU */
+ err = getsockopt(new_sk, SOL_BLUETOOTH, BT_RCVMTU, &l2o.imtu, &len);
+ if (err < 0 && errno != EPROTONOSUPPORT && errno != ENOPROTOOPT) {
+ tester_warn("getsockopt(BT_RCVMTU) failed: %s (%d)",
+ strerror(errno), errno);
+ tester_test_failed();
+ return FALSE;
+ }
+
+ /* For non-LE CoC enabled kernels we need to fall back to L2CAP_OPTIONS,
+ * so test support for it as well */
+ err = getsockopt(new_sk, SOL_L2CAP, L2CAP_OPTIONS, &l2o, &len);
+ if (err < 0) {
+ tester_warn("getsockopt(L2CAP_OPTIONS) failed: %s (%d)",
+ strerror(errno), errno);
+ tester_test_failed();
+ return FALSE;
+ }
+
if (l2data->read_data) {
struct bthost *bthost;
GIOChannel *new_io;
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ 1/2] tools/l2cap-tester: Test setsockopt(BT_SECURITY) on LE client
From: Anderson Lizardo @ 2014-01-25 1:54 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
In-Reply-To: <1390614842-28379-1-git-send-email-anderson.lizardo@openbossa.org>
Although setting a security level using setsockopt(BT_SECURITY) is
optional for LE sockets (it will default to doing
unencrypted/unauthenticated connection), it is a common operation and it
is done by BlueZ daemon and some tools.
---
tools/l2cap-tester.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c
index 05202bd..d541f1b 100644
--- a/tools/l2cap-tester.c
+++ b/tools/l2cap-tester.c
@@ -461,6 +461,7 @@ static const struct l2cap_data le_server_success_test = {
static const struct l2cap_data le_att_client_connect_success_test_1 = {
.cid = 0x0004,
+ .sec_level = BT_SECURITY_LOW,
};
static const struct l2cap_data le_att_server_success_test_1 = {
--
1.8.3.2
^ permalink raw reply related
* [PATCH BlueZ 0/2] Basic [sg]etsockopt() testing in l2cap-tester
From: Anderson Lizardo @ 2014-01-25 1:54 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Anderson Lizardo
Hi,
These patches extend existing tests in l2cap-tester to exercise two common
operations on LE sockets:
* getsockopt(BT_SECURITY) on client side (to set security level)
* setsockopt(L2CAP_OPTIONS) on server side (called by bt_io_get())
At the moment, there is a regression on kernel introduced by commit
a5a1e0e6b9c1dea3696192b5ec153d03917eb7b8 ("Bluetooth: Switch ATT channels to
use L2CAP_CHAN_FIXED") which is affecting these two operations. I'm currently
implementing and testing fixes for this regression.
PS: For some reason, the following tests are failing on my system, even using
an older kernel:
L2CAP LE Client - Success
L2CAP LE Client SMP - Success
L2CAP LE Client - Command Reject
L2CAP LE Client - Invalid PSM
L2CAP LE Server - Success
connect() is returning EINVAL. Any ideas for why this may be happening?
Best Regards,
Anderson Lizardo
Anderson Lizardo (2):
tools/l2cap-tester: Test setsockopt(BT_SECURITY) on LE client
tools/l2cap-tester: Test getsockopt(L2CAP_OPTIONS) on LE server
tools/l2cap-tester.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
--
1.8.3.2
^ permalink raw reply
* [PATCH] Rename adapter_remove_device to btd_adapter_remove_device
From: Petri Gynther @ 2014-01-25 0:55 UTC (permalink / raw)
To: linux-bluetooth
Allow this symbol to be exported and usable from external plugins.
---
src/adapter.c | 14 +++++++-------
src/adapter.h | 3 +++
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 570a5bf..649fc7a 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1036,8 +1036,8 @@ static void service_auth_cancel(struct service_auth *auth)
g_free(auth);
}
-static void adapter_remove_device(struct btd_adapter *adapter,
- struct btd_device *dev)
+void btd_adapter_remove_device(struct btd_adapter *adapter,
+ struct btd_device *dev)
{
GList *l;
@@ -1531,7 +1531,7 @@ static gboolean remove_temp_devices(gpointer user_data)
next = g_slist_next(l);
if (device_is_temporary(dev))
- adapter_remove_device(adapter, dev);
+ btd_adapter_remove_device(adapter, dev);
}
return FALSE;
@@ -2159,7 +2159,7 @@ static DBusMessage *remove_device(DBusConnection *conn,
btd_device_set_temporary(device, TRUE);
if (!btd_device_is_connected(device)) {
- adapter_remove_device(adapter, device);
+ btd_adapter_remove_device(adapter, device);
return dbus_message_new_method_return(msg);
}
@@ -4268,7 +4268,7 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
const char *path = device_get_path(device);
DBG("Removing temporary device %s", path);
- adapter_remove_device(adapter, device);
+ btd_adapter_remove_device(adapter, device);
}
}
@@ -5834,7 +5834,7 @@ static void connect_failed_callback(uint16_t index, uint16_t length,
* when it is temporary. */
if (device && !device_is_bonding(device, NULL)
&& device_is_temporary(device))
- adapter_remove_device(adapter, device);
+ btd_adapter_remove_device(adapter, device);
}
static void unpaired_callback(uint16_t index, uint16_t length,
@@ -5865,7 +5865,7 @@ static void unpaired_callback(uint16_t index, uint16_t length,
if (btd_device_is_connected(device))
device_request_disconnect(device, NULL);
else
- adapter_remove_device(adapter, device);
+ btd_adapter_remove_device(adapter, device);
}
static void read_info_complete(uint8_t status, uint16_t length,
diff --git a/src/adapter.h b/src/adapter.h
index de5b07d..e2e73dc 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -36,6 +36,7 @@
#define INVALID_PASSKEY 0xffffffff
struct btd_adapter;
+struct btd_device;
struct btd_adapter *btd_adapter_get_default(void);
bool btd_adapter_is_default(struct btd_adapter *adapter);
@@ -90,6 +91,8 @@ bool btd_adapter_get_connectable(struct btd_adapter *adapter);
uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
const char *btd_adapter_get_name(struct btd_adapter *adapter);
+void btd_adapter_remove_device(struct btd_adapter *adapter,
+ struct btd_device *dev);
struct btd_device *btd_adapter_get_device(struct btd_adapter *adapter,
const bdaddr_t *addr,
uint8_t addr_type);
--
1.8.5.3
^ permalink raw reply related
* Re: [PATCH] android/pts: Add PTS test results for A2DP
From: Sebastian Chlad @ 2014-01-25 0:03 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: BlueZ development
In-Reply-To: <347F2184-6CA1-4BCF-AC42-0A9E1FB9F9C9@holtmann.org>
[-- Attachment #1: Type: text/plain, Size: 1748 bytes --]
On Saturday, January 25, 2014, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Sebastian,
>
> > ---
> > android/pts-a2dp.txt | 14 +++++++-------
> > 1 file changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/android/pts-a2dp.txt b/android/pts-a2dp.txt
> > index a269ec1..c6eee62 100644
> > --- a/android/pts-a2dp.txt
> > +++ b/android/pts-a2dp.txt
> > @@ -1,7 +1,7 @@
> > PTS test results for A2DP
> >
> > PTS version: 5.0
> > -Tested: --not yet tested--
> > +Tested: 24.01.2014
> >
> > Results:
> > PASS test passed
> > @@ -15,17 +15,17 @@ Test Name Result Notes
> >
> -------------------------------------------------------------------------------
> > TC_SRC_CC_BV_09_I INC
> > TC_SRC_CC_BV_10_I N/A
> > -TC_SRC_REL_BV_01_I INC
> > -TC_SRC_REL_BV_02_I INC
> > -TC_SRC_SET_BV_01_I INC
> > -TC_SRC_SET_BV_02_I INC
> > -TC_SRC_SET_BV_03_I INC
> > +TC_SRC_REL_BV_01_I PASS
> > +TC_SRC_REL_BV_02_I PASS
> > +TC_SRC_SET_BV_01_I PASS
> > +TC_SRC_SET_BV_02_I PASS
> > +TC_SRC_SET_BV_03_I PASS
> > TC_SRC_SET_BV_04_I INC
> > TC_SRC_SET_BV_05_I INC
> > TC_SRC_SET_BV_06_I INC
> > TC_SRC_SUS_BV_01_I INC
> > TC_SRC_SUS_BV_02_I INC
> > -TC_SRC_SDP_BV_01_I INC
> > +TC_SRC_SDP_BV_01_I PASS
> > TC_SRC_AS_BV_01_I INC
> > ———————————————————————————————————————
>
> can we extend the notes section with some sort of instructions that we
> have to do on the IUT side. Even it is something simple like Play music or
> just wait for incoming connections. This applies to all of out PTS
> documentation of course.
>
> Regards
>
> Marcel
Sure. I'll keep adding such notes over next couple of weeks.
Br,
Sebastian
--
Seb/
[-- Attachment #2: Type: text/html, Size: 2213 bytes --]
^ permalink raw reply
* Re: [PATCH 2/3] android/avdtp: Retry send on EAGAIN as well
From: Szymon Janc @ 2014-01-24 22:16 UTC (permalink / raw)
To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <1390575403-30860-2-git-send-email-Andrei.Emeltchenko.news@gmail.com>
Hi Andrei,
On Friday 24 January 2014 16:56:42 Andrei Emeltchenko wrote:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> ---
> android/avdtp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/android/avdtp.c b/android/avdtp.c
> index 5da1206..1055bc1 100644
> --- a/android/avdtp.c
> +++ b/android/avdtp.c
> @@ -444,7 +444,7 @@ static gboolean try_send(int sk, void *data, size_t len)
>
> do {
> err = send(sk, data, len, 0);
> - } while (err < 0 && errno == EINTR);
> + } while (err < 0 && (errno == EINTR || errno == EAGAIN));
>
This makes try_send() blocking, if this is ok then at least some explanation
in commit message would be welcome.
> if (err < 0) {
> error("send: %s (%d)", strerror(errno), errno);
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply
* Re: [PATCH] android/pts: Add PTS test results for A2DP
From: Marcel Holtmann @ 2014-01-24 22:16 UTC (permalink / raw)
To: Sebastian Chlad; +Cc: BlueZ development
In-Reply-To: <1390595089-5314-1-git-send-email-sebastianchlad@gmail.com>
Hi Sebastian,
> ---
> android/pts-a2dp.txt | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/android/pts-a2dp.txt b/android/pts-a2dp.txt
> index a269ec1..c6eee62 100644
> --- a/android/pts-a2dp.txt
> +++ b/android/pts-a2dp.txt
> @@ -1,7 +1,7 @@
> PTS test results for A2DP
>
> PTS version: 5.0
> -Tested: --not yet tested--
> +Tested: 24.01.2014
>
> Results:
> PASS test passed
> @@ -15,17 +15,17 @@ Test Name Result Notes
> -------------------------------------------------------------------------------
> TC_SRC_CC_BV_09_I INC
> TC_SRC_CC_BV_10_I N/A
> -TC_SRC_REL_BV_01_I INC
> -TC_SRC_REL_BV_02_I INC
> -TC_SRC_SET_BV_01_I INC
> -TC_SRC_SET_BV_02_I INC
> -TC_SRC_SET_BV_03_I INC
> +TC_SRC_REL_BV_01_I PASS
> +TC_SRC_REL_BV_02_I PASS
> +TC_SRC_SET_BV_01_I PASS
> +TC_SRC_SET_BV_02_I PASS
> +TC_SRC_SET_BV_03_I PASS
> TC_SRC_SET_BV_04_I INC
> TC_SRC_SET_BV_05_I INC
> TC_SRC_SET_BV_06_I INC
> TC_SRC_SUS_BV_01_I INC
> TC_SRC_SUS_BV_02_I INC
> -TC_SRC_SDP_BV_01_I INC
> +TC_SRC_SDP_BV_01_I PASS
> TC_SRC_AS_BV_01_I INC
> ———————————————————————————————————————
can we extend the notes section with some sort of instructions that we have to do on the IUT side. Even it is something simple like Play music or just wait for incoming connections. This applies to all of out PTS documentation of course.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH] android/pts: Add PTS test results for A2DP
From: Szymon Janc @ 2014-01-24 22:04 UTC (permalink / raw)
To: Sebastian Chlad; +Cc: linux-bluetooth
In-Reply-To: <1390595089-5314-1-git-send-email-sebastianchlad@gmail.com>
Hi Sebastian,
On Friday 24 January 2014 15:24:49 Sebastian Chlad wrote:
> ---
> android/pts-a2dp.txt | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/android/pts-a2dp.txt b/android/pts-a2dp.txt
> index a269ec1..c6eee62 100644
> --- a/android/pts-a2dp.txt
> +++ b/android/pts-a2dp.txt
> @@ -1,7 +1,7 @@
> PTS test results for A2DP
>
> PTS version: 5.0
> -Tested: --not yet tested--
> +Tested: 24.01.2014
>
> Results:
> PASS test passed
> @@ -15,17 +15,17 @@ Test Name Result Notes
> ---------------------------------------------------------------------------
> ---- TC_SRC_CC_BV_09_I INC
> TC_SRC_CC_BV_10_I N/A
> -TC_SRC_REL_BV_01_I INC
> -TC_SRC_REL_BV_02_I INC
> -TC_SRC_SET_BV_01_I INC
> -TC_SRC_SET_BV_02_I INC
> -TC_SRC_SET_BV_03_I INC
> +TC_SRC_REL_BV_01_I PASS
> +TC_SRC_REL_BV_02_I PASS
> +TC_SRC_SET_BV_01_I PASS
> +TC_SRC_SET_BV_02_I PASS
> +TC_SRC_SET_BV_03_I PASS
> TC_SRC_SET_BV_04_I INC
> TC_SRC_SET_BV_05_I INC
> TC_SRC_SET_BV_06_I INC
> TC_SRC_SUS_BV_01_I INC
> TC_SRC_SUS_BV_02_I INC
> -TC_SRC_SDP_BV_01_I INC
> +TC_SRC_SDP_BV_01_I PASS
> TC_SRC_AS_BV_01_I INC
> ---------------------------------------------------------------------------
> ----
Applied, thanks.
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox