From patchwork Wed Jul 26 21:25:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 13328571 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0391DC001E0 for ; Wed, 26 Jul 2023 21:25:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230159AbjGZVZe (ORCPT ); Wed, 26 Jul 2023 17:25:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44894 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229984AbjGZVZd (ORCPT ); Wed, 26 Jul 2023 17:25:33 -0400 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E19726A0 for ; Wed, 26 Jul 2023 14:25:27 -0700 (PDT) Received: from monolith.lan (91-152-120-101.elisa-laajakaista.fi [91.152.120.101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RB6Pc5PK3z49Q7N; Thu, 27 Jul 2023 00:25:24 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pLqDflWldlHDXGuQ8EEhZR+uAy7JmyAHwbaz3veUYPM=; b=oiKgLD0Zyqo2/mn6YQcpZ1wI9yJ9L0Sv+J/sL53KuyGUZ91fEHecP3ymP2pboM+TGdfUgE 0p1nVW61G0uZK6El+YYWpJdC65zLc1zVSD3kcyvzWFx/eWBSy17L/JbK8xh0kH+hHnLo1Y HWQN+X8fTjA3PLEj9IPrzqoobxGt15cGqnhc5nv//hefTEXyMd3vuLGLmaeujJNueeHUcu Wv4CkPKCvi0UrOOG7ehQBW3FOkGio8SfqvPK6Xb5NGnzkXr5EbnI3Ww1Gnt9yWPVm/C9Gk Ntj4JuPECtSeMUpuZMmdleNXBLQGNQ5y+As3rI2+/tLK0pTSlyqFxm0MXnwP5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pLqDflWldlHDXGuQ8EEhZR+uAy7JmyAHwbaz3veUYPM=; b=AR9zbw/Wac12jFaZFKck7Kct75IoY0PCkdYrXXjQJ6lBbk8gLUAQolC+NcmLFx8+MFk/e4 i68aCoouv//GZgUjBT5KRyZBx7+yAyJclOvzztbqweU6CU675Ju20kG80LYdC30Rdb3oz8 VfZRO9KH8OOAuGjUYQTHzWuVCatS7Zwrcub+4+3IESRUMP1kL50Mwr3/NoISpMcTc2kKDq JGVpSOOumVIAFWMR7ZiR3YBw95cS+5Eh3QajTPyKEISYDW4/gI02DE8jF/wIHJeKkX34wI 6yGc7y9Vr1vu6OhO/N46Uu0eEpR7J+/nyDfXTAHdN+OvQO8/3BGiP24hLJPA8g== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1690406724; a=rsa-sha256; cv=none; b=PB3bz7Pz8O3OXDnGe/zenAheZejNJQeA21LK4KPB6oX/XnfZxjhMCO0rlAR5pKNZBlERK6 j1UPKa3V8ph8E68gaQXLuFvGtctTM0JdIy6FJ32I0nbCnnJpHAss3QQJQhufRH3sJLjfps xSPlBcBFlD5nGxuo8lnSOTecofobN6czBu3axeGlX2eXf9iMrzsqs/8bTiwXzzFp601hqe /TWNWYHYK2+6Gl1frXc9R97jB6Wwo6295su+hKAuTgY7NJQiV7ZXklwZm1Q6N8W4vu3ZuW 5+mFizv9xRj/1S5SbY8BFf+UsVKFFb2vjWq86T/OGWkugN5toRJ2LIGHYDoPrA== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 1/5] btdev: check error conditions for HCI_Create_Connection_Cancel Date: Thu, 27 Jul 2023 00:25:15 +0300 Message-ID: <15f85f2e419757a2c689e8572ccf7793a931f555.1690405564.git.pav@iki.fi> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Create Connection Cancel shall return Command Complete with error status when there is no Create Connection that can be canceled. In these cases, we should not send a (spurious) Connection Complete event. Fix by keeping a list of pending Create Connection commands, and returning command errors if there is none pending at the moment. --- emulator/btdev.c | 76 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/emulator/btdev.c b/emulator/btdev.c index 637f0bb98..0c75e71c0 100644 --- a/emulator/btdev.c +++ b/emulator/btdev.c @@ -62,6 +62,7 @@ struct hook { #define MAX_HOOK_ENTRIES 16 #define MAX_EXT_ADV_SETS 3 +#define MAX_PENDING_CONN 16 struct btdev_conn { uint16_t handle; @@ -223,6 +224,8 @@ struct btdev { uint8_t le_rl_enable; uint16_t le_rl_timeout; + struct btdev *pending_conn[MAX_PENDING_CONN]; + uint8_t le_local_sk256[32]; uint16_t sync_train_interval; @@ -1211,10 +1214,36 @@ static struct btdev_conn *conn_link_bis(struct btdev *dev, struct btdev *remote, return conn; } +static void pending_conn_add(struct btdev *btdev, struct btdev *remote) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(btdev->pending_conn); ++i) { + if (!btdev->pending_conn[i]) { + btdev->pending_conn[i] = remote; + return; + } + } +} + +static bool pending_conn_del(struct btdev *btdev, struct btdev *remote) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(btdev->pending_conn); ++i) { + if (btdev->pending_conn[i] == remote) { + btdev->pending_conn[i] = NULL; + return true; + } + } + return false; +} + static void conn_complete(struct btdev *btdev, const uint8_t *bdaddr, uint8_t status) { struct bt_hci_evt_conn_complete cc; + struct btdev *remote = find_btdev_by_bdaddr(bdaddr); if (!status) { struct btdev_conn *conn; @@ -1223,6 +1252,8 @@ static void conn_complete(struct btdev *btdev, if (!conn) return; + pending_conn_del(conn->link->dev, btdev); + cc.status = status; memcpy(cc.bdaddr, btdev->bdaddr, 6); cc.encr_mode = 0x00; @@ -1240,6 +1271,8 @@ static void conn_complete(struct btdev *btdev, cc.link_type = 0x01; } + pending_conn_del(btdev, remote); + cc.status = status; memcpy(cc.bdaddr, bdaddr, 6); cc.encr_mode = 0x00; @@ -1260,6 +1293,8 @@ static int cmd_create_conn_complete(struct btdev *dev, const void *data, memcpy(cr.dev_class, dev->dev_class, 3); cr.link_type = 0x01; + pending_conn_add(dev, remote); + send_event(remote, BT_HCI_EVT_CONN_REQUEST, &cr, sizeof(cr)); } else { conn_complete(dev, cmd->bdaddr, BT_HCI_ERR_PAGE_TIMEOUT); @@ -1296,14 +1331,47 @@ static int cmd_add_sco_conn(struct btdev *dev, const void *data, uint8_t len) cc.encr_mode = 0x00; done: + pending_conn_del(dev, conn->link->dev); + send_event(dev, BT_HCI_EVT_CONN_COMPLETE, &cc, sizeof(cc)); return 0; } +static bool match_bdaddr(const void *data, const void *match_data) +{ + const struct btdev_conn *conn = data; + const uint8_t *bdaddr = match_data; + + return !memcmp(conn->link->dev->bdaddr, bdaddr, 6); +} + static int cmd_create_conn_cancel(struct btdev *dev, const void *data, uint8_t len) { + const struct bt_hci_cmd_create_conn_cancel *cmd = data; + struct btdev *remote = find_btdev_by_bdaddr(cmd->bdaddr); + struct btdev_conn *conn; + + /* BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 1848 + * + * If the connection is already established, and the + * HCI_Connection_Complete event has been sent, then the Controller + * shall return an HCI_Command_Complete event with the error code + * Connection Already Exists (0x0B). If the HCI_Create_Connection_Cancel + * command is sent to the Controller without a preceding + * HCI_Create_Connection command to the same device, the BR/EDR + * Controller shall return an HCI_Command_Complete event with the error + * code Unknown Connection Identifier (0x02). + */ + if (!pending_conn_del(dev, remote)) { + conn = queue_find(dev->conns, match_bdaddr, cmd->bdaddr); + if (conn) + return -EEXIST; + + return -ENOENT; + } + cmd_status(dev, BT_HCI_ERR_SUCCESS, BT_HCI_CMD_CREATE_CONN_CANCEL); return 0; @@ -1372,14 +1440,6 @@ static int cmd_link_key_reply(struct btdev *dev, const void *data, uint8_t len) return 0; } -static bool match_bdaddr(const void *data, const void *match_data) -{ - const struct btdev_conn *conn = data; - const uint8_t *bdaddr = match_data; - - return !memcmp(conn->link->dev->bdaddr, bdaddr, 6); -} - static void auth_complete(struct btdev_conn *conn, uint8_t status) { struct bt_hci_evt_auth_complete ev; From patchwork Wed Jul 26 21:25:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 13328573 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB7F8C41513 for ; Wed, 26 Jul 2023 21:25:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231335AbjGZVZg (ORCPT ); Wed, 26 Jul 2023 17:25:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbjGZVZe (ORCPT ); Wed, 26 Jul 2023 17:25:34 -0400 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DEF22696 for ; Wed, 26 Jul 2023 14:25:27 -0700 (PDT) Received: from monolith.lan (91-152-120-101.elisa-laajakaista.fi [91.152.120.101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RB6Pc5v2Pz49Q8v; Thu, 27 Jul 2023 00:25:24 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IMgCNiowYcVwTJgtBDh2A83DyXYyukMEAHg7jcthnoU=; b=qzxtCh0D4+ZFSRUzhS0PIHiOTuk0mvkA03JSPFnxIz7f1n54g5sOrmLCrh7mEmEcFSXdoj u7kX2BEgQQq4AXzaiwdk6XOq0tWcoanctHydNsR8Bky2NVWPqFeQ3Fsmx37bzjbR9kUciV 8TElYVJr289GGFgHduV7azqO0wAGsRCLhzcxRs8LqdwMNZCp6ttLCh+eXAXBfsXLMXuQpm y3wesvKgY0U9zi69W+v+EWUCkdfVhIaMOWI32DHRTuYF+f0OV9YZadJXa1uLprpUOChcvI xlXN8OOeF2XOFqlH91feFr7QBpiSc27tSdHTr3JCUKTB18BOGaagBKQZqVm5mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IMgCNiowYcVwTJgtBDh2A83DyXYyukMEAHg7jcthnoU=; b=iX5EHdPt8iwj4+G0nhEDcoQwju1w24BY8hbbBL8e3fMHHjCi7pXfNlMxkRxkZJF+NmueFu i/ErLQYKhKZkzm/aoFNh0X8UKvnB7UEyN+sVZqQMNZLSk8T24Sz14qfjtXePjnh+whRaC+ 0XCK0IYeSagIasAXYWFsZDlbpUM5QPVSu/XwYsUhXPh1LLeQb2ikBD7evzbQjNWyaodGFB ZFNe2g8Ej7TrG7qnOOPOaR3LH8yS5mwj3WVzVsB3Rc2vnsdOHs8/7cksMuri321FX6CJpC ur2G+3rgMKdwCnyuz+6ecGefgM+zgz59M9hye/Sjgq/qb8VHDN3aElGP8WnRZQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1690406724; a=rsa-sha256; cv=none; b=dJ0uRat+vU2kVTR1DZPYyCL5bUXhgTp+uWB3OOY//i83NN5xvN4nEDUDZ9i3l/eYfprULz KivjmIltIUNbF0EiM/SsEWzZyiAODF+8CWbCImL3ZsnziKDBYVN31RJEFbPBKh4VxZHXsw 0MLhK3s7AE8i6uYYMcISS6fKUQgLpg4CUuXyWY4uogRypq+RUFZHiL3LthbCNhRbpf9ux4 0V8xJsfclBCofQI73/SiKRmr36z2Ebr5OKT++SMTFUMxf5BtArT90Ku9++1gX8iJ8u1sqB HGk3cTt6Y3p75kv2S7kEaGqqc9pxhKVx+G8XNCtRx4mtkBQ8m24zAly0d+MXyQ== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 2/5] sco-tester: test local and remote disconnecting simultaneously Date: Thu, 27 Jul 2023 00:25:16 +0300 Message-ID: <42624101a0b94ad773f4f58f94910f3e8ab8beaa.1690405564.git.pav@iki.fi> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Demonstrate a kernel race condition when remote side disconnects at the same time as local side tries to cancel the connection. I.e. [controller] > HCI Synchronous Connect Complete [controller] > HCI Disconnection Complete (from remote) [user] shutdown(sco_socket) [kernel] hci_conn_abort(SCO handle) [kernel] > HCI Create Connection Cancel [kernel] < HCI Synchronous Connect Complete [kernel] < HCI Disconnect Complete [controller] < HCI Create Connection Cancel [controller] > HCI Command Status (Create Connection Cancel) [kernel] < HCI Command Status (Create Connection Cancel) and then we get BUG: KASAN: slab-use-after-free in hci_conn_failed when hci_conn_abort tries to delete the same connection a second time. This type of crash is probably not limited to the sequence here, but for this one it was possible to get the timing right in the emulator. Add a test that hits this in the emulator environment (pretty narrow window to hit on real hardware): eSCO Simultaneous Disconnect - Failure --- Notes: ================================================================== BUG: KASAN: slab-use-after-free in hci_conn_failed+0x25/0x190 Read of size 8 at addr ffff8880029e1958 by task kworker/u3:2/35 CPU: 0 PID: 35 Comm: kworker/u3:2 Not tainted 6.5.0-rc1-00520-gf57f797eebfe #152 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-1.fc38 04/01/2014 Workqueue: hci0 hci_cmd_sync_work Call Trace: print_report+0xce/0x620 ? __virt_addr_valid+0xd8/0x160 ? hci_conn_failed+0x25/0x190 kasan_report+0xd5/0x110 ? hci_conn_failed+0x25/0x190 hci_conn_failed+0x25/0x190 hci_abort_conn_sync+0x23b/0x370 ? __pfx_hci_abort_conn_sync+0x10/0x10 ? __pfx_lock_acquire+0x10/0x10 ? __pfx_abort_conn_sync+0x10/0x10 ? __pfx_abort_conn_sync+0x10/0x10 hci_cmd_sync_work+0x125/0x200 process_one_work+0x4ee/0x8f0 ? __pfx_process_one_work+0x10/0x10 ? __kthread_parkme+0x5f/0xe0 ? mark_held_locks+0x1a/0x90 worker_thread+0x8c/0x630 ? __kthread_parkme+0xc5/0xe0 ? __pfx_worker_thread+0x10/0x10 kthread+0x17c/0x1c0 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x2b/0x50 Allocated by task 31: kasan_save_stack+0x33/0x60 kasan_set_track+0x24/0x30 __kasan_kmalloc+0x8f/0xa0 hci_conn_add+0xa8/0xad0 hci_connect_sco+0x1cf/0x6e0 sco_sock_connect+0x1a2/0x600 __sys_connect+0x1a2/0x1d0 __x64_sys_connect+0x3b/0x50 do_syscall_64+0x47/0x90 entry_SYSCALL_64_after_hwframe+0x6c/0xd6 Freed by task 32: kasan_save_stack+0x33/0x60 kasan_set_track+0x24/0x30 kasan_save_free_info+0x2b/0x50 __kasan_slab_free+0xfa/0x150 __kmem_cache_free+0xab/0x200 device_release+0x58/0xf0 kobject_put+0xee/0x310 hci_disconn_complete_evt+0x276/0x3a0 hci_event_packet+0x54b/0x800 hci_rx_work+0x2a4/0xae0 process_one_work+0x4ee/0x8f0 worker_thread+0x8c/0x630 kthread+0x17c/0x1c0 ret_from_fork+0x2b/0x50 Last potentially related work creation: kasan_save_stack+0x33/0x60 __kasan_record_aux_stack+0x94/0xa0 insert_work+0x2d/0x150 __queue_work+0x2f1/0x610 queue_delayed_work_on+0x88/0x90 sco_chan_del+0x117/0x230 sco_sock_shutdown+0x109/0x230 __sys_shutdown+0xb4/0x130 __x64_sys_shutdown+0x29/0x40 do_syscall_64+0x47/0x90 entry_SYSCALL_64_after_hwframe+0x6c/0xd6 The buggy address belongs to the object at ffff8880029e1000 which belongs to the cache kmalloc-4k of size 4096 The buggy address is located 2392 bytes inside of freed 4096-byte region [ffff8880029e1000, ffff8880029e2000) The buggy address belongs to the physical page: page:ffffea00000a7800 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x29e0 head:ffffea00000a7800 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0 flags: 0x4000000000010200(slab|head|zone=1) page_type: 0xffffffff() raw: 4000000000010200 ffff8880010424c0 ffffea0000063010 ffffea00000a8610 raw: 0000000000000000 0000000000020002 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected Memory state around the buggy address: ffff8880029e1800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8880029e1880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb >ffff8880029e1900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff8880029e1980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8880029e1a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ================================================================== tools/sco-tester.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tools/sco-tester.c b/tools/sco-tester.c index 44606328a..f3de42c7b 100644 --- a/tools/sco-tester.c +++ b/tools/sco-tester.c @@ -29,6 +29,7 @@ #include "src/shared/tester.h" #include "src/shared/mgmt.h" +#include "src/shared/util.h" struct test_data { const void *test_data; @@ -37,6 +38,7 @@ struct test_data { struct hciemu *hciemu; enum hciemu_type hciemu_type; unsigned int io_id; + int sk; bool disable_esco; bool enable_codecs; }; @@ -225,6 +227,7 @@ static void test_data_free(void *test_data) break; \ user->hciemu_type = HCIEMU_TYPE_BREDRLE; \ user->io_id = 0; \ + user->sk = -1; \ user->test_data = data; \ user->disable_esco = _disable_esco; \ user->enable_codecs = _enable_codecs; \ @@ -250,6 +253,10 @@ static const struct sco_client_data connect_failure = { .expect_err = EOPNOTSUPP }; +static const struct sco_client_data connect_failure_reset = { + .expect_err = ECONNRESET +}; + const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; static const struct sco_client_data connect_send_success = { @@ -650,6 +657,8 @@ static void test_connect(const void *test_data) return; } + data->sk = sk; + io = g_io_channel_unix_new(sk); g_io_channel_set_close_on_unref(io, TRUE); @@ -745,6 +754,52 @@ static void test_connect_offload_msbc(const void *test_data) end: close(sk); } + +static bool hook_simult_disc(const void *msg, uint16_t len, void *user_data) +{ + const struct bt_hci_evt_sync_conn_complete *ev = msg; + struct test_data *data = tester_get_data(); + struct bthost *bthost; + + tester_print("Simultaneous disconnect"); + + if (len != sizeof(struct bt_hci_evt_sync_conn_complete)) { + tester_test_failed(); + return true; + } + + /* Disconnect from local and remote sides at the same time */ + bthost = hciemu_client_get_host(data->hciemu); + bthost_hci_disconnect(bthost, le16_to_cpu(ev->handle), 0x13); + + shutdown(data->sk, SHUT_RDWR); + + return true; +} + +static bool hook_delay_cmd(const void *data, uint16_t len, void *user_data) +{ + tester_print("Delaying emulator response..."); + g_usleep(250000); + tester_print("Delaying emulator response... Done."); + return true; +} + +static void test_connect_simult_disc(const void *test_data) +{ + struct test_data *data = tester_get_data(); + + /* Kernel shall not crash, but <= 6.5-rc1 crash */ + hciemu_add_hook(data->hciemu, HCIEMU_HOOK_POST_EVT, + BT_HCI_EVT_SYNC_CONN_COMPLETE, + hook_simult_disc, NULL); + hciemu_add_hook(data->hciemu, HCIEMU_HOOK_PRE_CMD, + BT_HCI_CMD_CREATE_CONN_CANCEL, + hook_delay_cmd, NULL); + + test_connect(test_data); +} + int main(int argc, char *argv[]) { tester_init(&argc, &argv); @@ -767,6 +822,10 @@ int main(int argc, char *argv[]) test_sco("eSCO mSBC - Success", &connect_success, setup_powered, test_connect_transp); + test_sco("eSCO Simultaneous Disconnect - Failure", + &connect_failure_reset, setup_powered, + test_connect_simult_disc); + test_sco_11("SCO CVSD 1.1 - Success", &connect_success, setup_powered, test_connect); From patchwork Wed Jul 26 21:25:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 13328574 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A9E7EC001DC for ; Wed, 26 Jul 2023 21:25:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231362AbjGZVZh (ORCPT ); Wed, 26 Jul 2023 17:25:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230194AbjGZVZe (ORCPT ); Wed, 26 Jul 2023 17:25:34 -0400 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [IPv6:2a0b:5c81:1c1::37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DDEC2691 for ; Wed, 26 Jul 2023 14:25:27 -0700 (PDT) Received: from monolith.lan (91-152-120-101.elisa-laajakaista.fi [91.152.120.101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RB6Pc6ZBTz49QB3; Thu, 27 Jul 2023 00:25:24 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7DNUUcIqQRI29RfL+gzzuUWprMVU8P/baS0HhcuDiT4=; b=p73JBeAE2lbmwSFvCkJSmd7EukEMr1bADTGU4QCxQaI6ljZUcfYXT5ZeD58ujc3qZiSwgE coFZFap2b8HmkkKtbwImjq72Ekp/912BODdc3kAIr6V/QeslgcQT+cw2hClY1cv4R+4kNv HpC27/kSx6eK9P76W9/Q0XvabjXVKa24sEwjDvL7Do1S7f0RD+HyZFY6TKdYIkyBsAFGv0 xjtlGIP9Ypc4G00UlzBedq4IhHT8ybrGSjzYCbxf7QVNvR1wrlEkVMvFkDdYzbs9pLgSsL lom55gWV3IFzCKEY/qbae4eW5qxIJk1dSEPvTMNJ2FixLmuiOb+8U21Qk/HoPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406724; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7DNUUcIqQRI29RfL+gzzuUWprMVU8P/baS0HhcuDiT4=; b=ibMBBYN1QKFSUlbBGFTn499IfS7Z97Yb9INsvATQ9Osgqr+iv8eY6BsRmmJf6nmSYUCDDH cSwtwp6cE3jEaP9Hlc0CKMAnk9BeyKnXdiBNT302+xZZ2aD5+BfoL7nu36NHQE/0jgdvGB nnQn0q/m+h/m71jsB8Rie3gf5G9Meer1T75NEha7Ani5z9fukj5AnGcnKns1rmfBnjICWo tZdFEfj0ETTE87WF6OqeucmETsV3xzjUeK9i73qa2L/iEg3m8gkgaJOeY37W9Ow6pWkkQI dfLabeQoTF8CHYtg3XU05YwNOyDugm3XuMHdxN3cM2URL33sJmFDEpPgbkTypw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1690406724; a=rsa-sha256; cv=none; b=cIgTC2qsU7jjhDQma3YRsVUDDjMHbNC1UMGsJ317ok4FRAy0s6oP0jaA17IoIQqaTT83ym ZOThRYYG/TJQidr3xr1UB135e0KcuL2GnQlvGtv9Y424H7yFs5LkOoda1LP05I8uGCd3F+ sPTLvX3aNUGVtaQTlk2ilngA5AWv9CjUyI8VscPTjCH/kZBZ+EJZsCNltukAP6dstCkxbp HyDLIYJIml7+R6g4a4LB3S5Prt80bN6LPgxn5m0uIZkSrMG4AVRJx/V4A5y2r5v5hvtMRl q/xYOMBFh9mB4Fx6YoWDO5lxWowsnbYf4EadDlzuhMIvs6tqMuGJq2MWBvElUQ== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 3/5] iso-tester: test with large CIS_ID and invalid CIG_ID/CIS_ID Date: Thu, 27 Jul 2023 00:25:17 +0300 Message-ID: X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Add test with a large CIS_ID and multiple CIS so it hits an error condition in current kernels (which is why the AC configuration is used). Add tests for invalid configurations with bad or duplicate IDs, and for trying to connect two CIS in same CIG without BT_DEFER_SETUP. ISO QoS CIG 0xF0 - Invalid ISO QoS CIS 0xF0 - Invalid ISO Connect2 CIG 0x01 - Success/Invalid ISO AC 6(ii) CIS 0xEF/auto - Success ISO AC 6(ii) CIS 0xEF/0xEF - Invalid --- Notes: Current bluetooth-next/master fails these tests with ISO QoS CIG 0xF0 - Invalid Timed out 2.301 seconds ISO QoS CIS 0xF0 - Invalid Failed 0.117 seconds ISO Connect2 CIG 0x01 - Success/Invalid Failed 0.189 seconds ISO AC 6(ii) CIS 0xEF/auto - Success Failed 0.196 seconds tools/iso-tester.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/tools/iso-tester.c b/tools/iso-tester.c index 8f43d7bec..9f853a0f9 100644 --- a/tools/iso-tester.c +++ b/tools/iso-tester.c @@ -95,6 +95,10 @@ QOS_FULL(0x01, 0x02, \ {}, QOS_IO(_interval, _latency, _sdu, _phy, _rtn)) +#define QOS_OUT_1_EF(_interval, _latency, _sdu, _phy, _rtn) \ + QOS_FULL(0x01, 0xEF, \ + {}, QOS_IO(_interval, _latency, _sdu, _phy, _rtn)) + #define QOS_IN(_interval, _latency, _sdu, _phy, _rtn) \ QOS_FULL(BT_ISO_QOS_CIG_UNSET, BT_ISO_QOS_CIS_UNSET, \ QOS_IO(_interval, _latency, _sdu, _phy, _rtn), {}) @@ -172,6 +176,7 @@ */ #define AC_6ii_1 QOS_OUT_1(10000, 10, 40, 0x02, 2) #define AC_6ii_2 QOS_OUT_1(10000, 10, 40, 0x02, 2) +#define AC_6ii_1_EF QOS_OUT_1_EF(10000, 10, 40, 0x02, 2) /* different CIS ID */ /* Two unidirectional CISes. Unicast Server is Audio Sink and Audio Source. * #1 - CIG 1 CIS 1 (input) * #2 - CIG 1 CIS 2 (output) @@ -801,6 +806,16 @@ static const struct iso_client_data connect_reject = { .expect_err = -ENOSYS }; +static const struct iso_client_data connect_cig_f0_invalid = { + .qos = QOS_FULL(0xF0, 0x00, {}, QOS_IO(10000, 10, 40, 0x02, 2)), + .expect_err = -EINVAL +}; + +static const struct iso_client_data connect_cis_f0_invalid = { + .qos = QOS_FULL(0x00, 0xF0, {}, QOS_IO(10000, 10, 40, 0x02, 2)), + .expect_err = -EINVAL +}; + static const uint8_t data_16_2_1[40] = { [0 ... 39] = 0xff }; static const struct iovec send_16_2_1 = { .iov_base = (void *)data_16_2_1, @@ -960,6 +975,22 @@ static const struct iso_client_data reconnect_ac_6ii = { .disconnect = true, }; +static const struct iso_client_data connect_ac_6ii_cis_ef_auto = { + .qos = AC_6ii_1_EF, + .qos_2 = AC_6ii_2, + .expect_err = 0, + .mconn = true, + .defer = true, +}; + +static const struct iso_client_data connect_ac_6ii_cis_ef_ef = { + .qos = AC_6ii_1_EF, + .qos_2 = AC_6ii_1_EF, + .expect_err = -EINVAL, + .mconn = true, + .defer = true, +}; + static const struct iso_client_data connect_ac_7i = { .qos = AC_7i_1, .qos_2 = AC_7i_2, @@ -2371,6 +2402,29 @@ static void test_connect2_seq(const void *test_data) setup_connect(data, 0, iso_connect2_seq_cb); } +static void test_connect2_nodefer(const void *test_data) +{ + struct test_data *data = tester_get_data(); + int sk, err; + + /* Second connect() shall fail, because CIG is then busy, + * but the first connect() shall succeed. + */ + setup_connect(data, 0, iso_connect_cb); + + sk = create_iso_sock(data); + if (sk < 0) { + tester_test_failed(); + return; + } + + err = connect_iso_sock(data, 1, sk); + if (err != -EINVAL) + tester_test_failed(); + + close(sk); +} + static void test_bcast(const void *test_data) { struct test_data *data = tester_get_data(); @@ -2518,6 +2572,12 @@ int main(int argc, char *argv[]) test_iso("ISO QoS - Invalid", &connect_invalid, setup_powered, test_connect); + test_iso("ISO QoS CIG 0xF0 - Invalid", &connect_cig_f0_invalid, + setup_powered, test_connect); + + test_iso("ISO QoS CIS 0xF0 - Invalid", &connect_cis_f0_invalid, + setup_powered, test_connect); + test_iso_rej("ISO Connect - Reject", &connect_reject, setup_powered, test_connect, BT_HCI_ERR_CONN_FAILED_TO_ESTABLISH); @@ -2545,6 +2605,10 @@ int main(int argc, char *argv[]) setup_powered, test_connect2); + test_iso2("ISO Connect2 CIG 0x01 - Success/Invalid", &connect_1_16_2_1, + setup_powered, + test_connect2_nodefer); + test_iso("ISO Defer Send - Success", &connect_16_2_1_defer_send, setup_powered, test_connect); @@ -2630,6 +2694,14 @@ int main(int argc, char *argv[]) setup_powered, test_reconnect); + test_iso2("ISO AC 6(ii) CIS 0xEF/auto - Success", + &connect_ac_6ii_cis_ef_auto, + setup_powered, test_connect); + + test_iso2("ISO AC 6(ii) CIS 0xEF/0xEF - Invalid", + &connect_ac_6ii_cis_ef_ef, + setup_powered, test_connect); + test_iso("ISO Broadcaster - Success", &bcast_16_2_1_send, setup_powered, test_bcast); test_iso("ISO Broadcaster Encrypted - Success", &bcast_enc_16_2_1_send, From patchwork Wed Jul 26 21:25:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 13328576 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B608C04A6A for ; Wed, 26 Jul 2023 21:25:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231434AbjGZVZj (ORCPT ); Wed, 26 Jul 2023 17:25:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231288AbjGZVZe (ORCPT ); Wed, 26 Jul 2023 17:25:34 -0400 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E0E3269E for ; Wed, 26 Jul 2023 14:25:27 -0700 (PDT) Received: from monolith.lan (91-152-120-101.elisa-laajakaista.fi [91.152.120.101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RB6Pd06gsz49QBX; Thu, 27 Jul 2023 00:25:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406725; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tW2+2BLo8vtYy6DNWxtLOfiMpuLTNkMKEjYi/wSjFvI=; b=mO4cVkwMkGVTjXqtYw1FibEUH8kQfBT1UNJ6oY0EbnfEVA/pUXG/LV9Wq/aHaVLYnmHwB6 U6wwaveaQVhLaxT5FBh7hNhfN+xRCio0r17Tu/7t7xfmU4Xif+K9czUXIBN27hHJ2XDfTQ fMTXkHxo13V2MJ68Jlseiid12+HTbKu1HpTe3f2n8DmA1VbcIc0y2Ey8+IPVq+OS2ETER4 JhvujoEXEXOgTUO13uhyiri/IomJAOZHygi+ypKfDyFLVKJsDe/zxlAUxNuA9H7C4SDY1e Ta7E2McH8omwMcPPd723wQ2X59IHjCBfY4WywR26wjl01YdTanAPU3hhmvUUQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406725; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tW2+2BLo8vtYy6DNWxtLOfiMpuLTNkMKEjYi/wSjFvI=; b=UvJKrou4fweS5uLOuUAQAjRSoTe0kcT0ZfoozffHvUUqBSUJrMuaF/Mso5pAwt9QH9TtPf nvd/mK7tLh4k9Owg4iDME0upCYVViYWTyHtWLAjv1aLVVojaMdSQbAsZK6zarEPQENcqZx rqCHEIw0Ad0SQ0J0bpsWBfaodZjnlJBMeNRnL68b2YInIKMl0mll7kQmVclw4jD6RzXdX+ 9pMiSN51m7nxRBgcmfThu2BeOYoZZka3ixxI9guPARe2kIwV4rT2J1YWzjPWEayGdSt1YT bl7D5+zQHv/e6ZPBwPB0A8xhuuE2ZSKyV08hHcbizOtiTs1FWtiosIx+Va73gg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1690406725; a=rsa-sha256; cv=none; b=d/XQX4Ij2GCTD1hr1588vXpq1uL85700ILEDanMDUjjacKbJEx3ohD0rEGsK9CmzjkAJqY Zme53wPORXLxeO89YE9iv1TBFaflJuQ53pEN08XxuCJyMekEZ/SYx9k4BPa0GOTXY4VTds p8pGCtK5BUWi5r/10/Yg26EJh2jiiwj5sv0YmwwcfVpG1ClynnXH05+GXeWNU1+6FItOPV v6n5+QcEmqmY4GRSkDAJinoK/ksKs+z8Ru6LfGC1Zw0rFtRsXheQgSmp0tNPhBtr/MeooE b6vGzYinVXqMMLthDdL5E32ofEz/8IDHsO3z2/SUrORJx4XaW9vr2tDPPOpe2w== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 4/5] iso-tester: add tests checking Remove CIG is emitted Date: Thu, 27 Jul 2023 00:25:18 +0300 Message-ID: <357f1735cf611bc23d422a8b3cdd777dabababc9.1690405564.git.pav@iki.fi> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Kernel should send LE Remove CIG after all CIS are shut down. Add tests checking this, closing either immediately or after waiting connection to complete. ISO Defer Close - Success ISO Connect Close - Success ISO Defer Wait Close - Success ISO Connect Wait Close - Success --- tools/iso-tester.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/tools/iso-tester.c b/tools/iso-tester.c index 9f853a0f9..bbf959420 100644 --- a/tools/iso-tester.c +++ b/tools/iso-tester.c @@ -2425,6 +2425,90 @@ static void test_connect2_nodefer(const void *test_data) close(sk); } +static gboolean iso_connect_close_cb(GIOChannel *io, GIOCondition cond, + gpointer user_data) +{ + struct test_data *data = user_data; + + data->io_id[0] = 0; + + tester_print("Disconnected"); + + --data->step; + if (!data->step) + tester_test_passed(); + + return FALSE; +} + +static bool hook_remove_cig(const void *msg, uint16_t len, void *user_data) +{ + struct test_data *data = user_data; + + tester_print("Remove CIG"); + + --data->step; + if (!data->step) + tester_test_passed(); + + return true; +} + +static void test_connect_close(const void *test_data) +{ + struct test_data *data = tester_get_data(); + int sk; + GIOChannel *io; + + data->step = 2; + + hciemu_add_hook(data->hciemu, HCIEMU_HOOK_PRE_CMD, + BT_HCI_CMD_LE_REMOVE_CIG, + hook_remove_cig, data); + + sk = setup_sock(data, 0); + if (sk < 0) + return; + + io = g_io_channel_unix_new(sk); + g_io_channel_set_close_on_unref(io, TRUE); + data->io_id[0] = g_io_add_watch(io, G_IO_HUP, iso_connect_close_cb, + data); + + shutdown(sk, SHUT_RDWR); +} + +static gboolean iso_connect_wait_close_cb(GIOChannel *io, GIOCondition cond, + gpointer user_data) +{ + struct test_data *data = tester_get_data(); + int sk; + + tester_print("Connected"); + + sk = g_io_channel_unix_get_fd(io); + + data->io_id[0] = g_io_add_watch(io, G_IO_HUP, iso_connect_close_cb, + data); + + shutdown(sk, SHUT_RDWR); + + return FALSE; +} + +static void test_connect_wait_close(const void *test_data) +{ + struct test_data *data = tester_get_data(); + + data->step = 1; + + hciemu_add_hook(data->hciemu, HCIEMU_HOOK_PRE_CMD, + BT_HCI_CMD_LE_REMOVE_CIG, + hook_remove_cig, data); + + setup_connect(data, 0, iso_connect_wait_close_cb); +} + static void test_bcast(const void *test_data) { struct test_data *data = tester_get_data(); @@ -2601,6 +2685,18 @@ int main(int argc, char *argv[]) test_iso("ISO Defer Connect - Success", &defer_16_2_1, setup_powered, test_connect); + test_iso("ISO Defer Close - Success", &defer_16_2_1, setup_powered, + test_connect_close); + + test_iso("ISO Connect Close - Success", &connect_16_2_1, setup_powered, + test_connect_close); + + test_iso("ISO Defer Wait Close - Success", &defer_16_2_1, + setup_powered, test_connect_wait_close); + + test_iso("ISO Connect Wait Close - Success", &connect_16_2_1, + setup_powered, test_connect_wait_close); + test_iso2("ISO Defer Connect2 CIG 0x01 - Success", &defer_1_16_2_1, setup_powered, test_connect2); From patchwork Wed Jul 26 21:25:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 13328575 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EB11C001E0 for ; Wed, 26 Jul 2023 21:25:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231423AbjGZVZi (ORCPT ); Wed, 26 Jul 2023 17:25:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231345AbjGZVZf (ORCPT ); Wed, 26 Jul 2023 17:25:35 -0400 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AABCE2685 for ; Wed, 26 Jul 2023 14:25:34 -0700 (PDT) Received: from monolith.lan (91-152-120-101.elisa-laajakaista.fi [91.152.120.101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RB6Pd0n89z49QC8; Thu, 27 Jul 2023 00:25:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406725; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LDRbDxhcmxM6TQltf1ltJPpCenY7pRNdxtB1Zgs1JwE=; b=jWM72t0vUKmsvJxbHzklGFVXRhVIzlnUf868If+/G4NNaHWgFynNtjdFnA0s4vaSbuqNiI GZZ2YCcZsggM4Xp406Qm+0da1FWaTvbR3NaEqdyOvo9Vn4iedec9VtDMLL4kFIwQtnI1ug e8yU9ej5Xwyj2g2G3ugIOrLMlErOhwXNU62+xaSwMCO+4X4PcgZ3If0AuJgoqRTIgF2U89 rKKWz+KwcJ4/qJsxEQtkcLi94MrYuOX5XRv/2QasXIfJrOo/52lyBsTTpZjMZjh3Kdf+WS 5hyDI5Q+/U/d7M/ARi8SBW6vxOCuwaE0KCZMnGBneUR8p4Es6IFXHGIaKTCaEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1690406725; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LDRbDxhcmxM6TQltf1ltJPpCenY7pRNdxtB1Zgs1JwE=; b=GzTJPQmHFph8hElQpaocHBgbGYjJ7FfImNA7GLMPCZxs9wDCdI/anQDBS1FZFsmCaxlgR9 k4Ywd7Vp3MI0LvSPyLQiR2XnqUyvQQ5Zpcm+I2LhIsHAADxWIN24oKxWKTQSdBM7neInQ9 pvtvQ+I7EaQfUY6p8Tu8NL0uYGq8rtdpVCjQi5SAh/n3ONERlTGn8qh8G/yENOBC/mlz4a RbAeSFZux9ZDYSYAvEHvWSUDUI9Dv6YhK2YGk5uOIQQb9lH4Oxa+M86HxNS/N6Ol4HKe8B 8j+P1faHmsUex4HdclR0fUepyPAWbAWWCtXNhFx1ny/KnumUF+x0x6Ph33TbvA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1690406725; a=rsa-sha256; cv=none; b=a6jYeC0LLhfx8xTmBXEfCUF77C8mviuKriP5b9kvYSqzr4QJRrrR0zWNiDpWXFVkpwsqzj RWUWpF5OBTgJupDxP411q3uSa35/PegbbZ8ukDadQ/BpzmeOAo1UJPqbitL8ls9/e7jK91 7oM5tZx3wqldH2JTk1d0aF2BfatQTg2OBvyZCWRV+4LZ57WlCLIVMRyT/Yt2NChPGTsAOp 6zV5NW0gRarImpaWAv52D06ge35a9qwDsH6X7TO9mj+ngcfByNPbTmFoBKOxwpZD/RNr/t JqMV3voRJexX345L1nxLJFoQcKwSzV/uLK9PXchZTl8bFiYYHpbxKv5X8/kocA== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 5/5] btdev: fix Command Status command opcodes for Setup Sync Conn Date: Thu, 27 Jul 2023 00:25:19 +0300 Message-ID: <0cba38cb79fc6d940af00d599be6d9d72ef86020.1690405564.git.pav@iki.fi> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org The command opcode should be the CMD, not EVT. --- emulator/btdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emulator/btdev.c b/emulator/btdev.c index 0c75e71c0..2483a35c5 100644 --- a/emulator/btdev.c +++ b/emulator/btdev.c @@ -2681,7 +2681,7 @@ static int cmd_enhanced_setup_sync_conn(struct btdev *dev, const void *data, if (cmd->tx_coding_format[0] > 5) status = BT_HCI_ERR_INVALID_PARAMETERS; - cmd_status(dev, status, BT_HCI_EVT_SYNC_CONN_COMPLETE); + cmd_status(dev, status, BT_HCI_CMD_ENHANCED_SETUP_SYNC_CONN); return 0; } @@ -2727,7 +2727,7 @@ done: static int cmd_setup_sync_conn(struct btdev *dev, const void *data, uint8_t len) { - cmd_status(dev, BT_HCI_ERR_SUCCESS, BT_HCI_EVT_SYNC_CONN_COMPLETE); + cmd_status(dev, BT_HCI_ERR_SUCCESS, BT_HCI_CMD_SETUP_SYNC_CONN); return 0; }