Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp3450907rwb; Mon, 19 Sep 2022 22:54:48 -0700 (PDT) X-Google-Smtp-Source: AMsMyM65+JVyI+XliqYuMCXGpZNig8Hfsuv8KpOWIeomdhnzigAdY6eV8uqHyBGsjenbuVugkAqv X-Received: by 2002:aa7:c990:0:b0:453:fad5:2a30 with SMTP id c16-20020aa7c990000000b00453fad52a30mr8427443edt.309.1663653288468; Mon, 19 Sep 2022 22:54:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663653288; cv=none; d=google.com; s=arc-20160816; b=os3aNilrPf4O4+DYqtf9vzWNkK71ipiVTH3zVEcHscveukFFa9cFZ6NoQ66NWJqR+J Oj9BN95TdktVN4Jp7Zk5a0vDXSdT1xpL91TYgB4z/Qee7HN5gTimfuIoRmnfydHN2lYn IjqIXYFxBIvBGLUPmPC/6xxfiif/i27OupTzRQrPp0dOfMeBfGeUQ3D+NQzBsV7G/XmP FvmIv5UXw/TAATY2Yg3WmgLKFbLd7gRmVWmVAGjhcr6Q3K0DaeZrv5X4VzEveiWgsvcS OwNKvCaPlZsLYwfUgQ0v0jO4TbSXOTWW2+RPOA0HuEsNc6y4KcytmMU0bQOBWWHg898H TIQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=L9UcYZ8ZHMuof7HS2ENh0lx7rjVyWG5q5xjN6rCvzP8=; b=N7WbcXpMprXMcMcjVxtm13c/0+t4Nt+JwmSEJhWYSrHWUQCxukDbQHRV4qn3AySGEy pDseGY8qXryqowKgyGYfCPlSGXkOt+C7kq51SySEMDW0x87tlPeUkYEEnbp8wRfzpy4w DfuqMRizAIiojveYijAY6fnnplvmAwE0qyoAVoq9TUUZRfX5YtG7opi82A17qDj8L8tc FeUyBcOwXzrOqrhhBCudNpSSnETa5w+54wZBtP+V6lOvDlrdeTcVzKq90vAc8T6zjy9m GMONajAguNE9nMW4xYuXYpsjaLZjU9cW5JKJL+ZFHXQqOFIAWP5cy0bUBkXVSPZRxUt7 m9Dw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=IpMmkDfv; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dz17-20020a0564021d5100b0044eb8a65cd0si835054edb.398.2022.09.19.22.54.10; Mon, 19 Sep 2022 22:54:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=IpMmkDfv; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230021AbiITFtM (ORCPT + 99 others); Tue, 20 Sep 2022 01:49:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229903AbiITFtL (ORCPT ); Tue, 20 Sep 2022 01:49:11 -0400 Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1658030F64; Mon, 19 Sep 2022 22:49:10 -0700 (PDT) Received: by mail-pg1-x52c.google.com with SMTP id h188so1469744pgc.12; Mon, 19 Sep 2022 22:49:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=L9UcYZ8ZHMuof7HS2ENh0lx7rjVyWG5q5xjN6rCvzP8=; b=IpMmkDfvw0JiwlAZBzWe1AMmNb8qX4OSHTT0WUQLvu2KrRlc8r1n4jKkfAWuz4p4IP Z5G0gREdWSRYMhV9/aWjoEJNXYrCibHSWWVdq3/Gn+3LgjsX9rmFD996LeFnDET3Mj/m VI5nnKHhJ+9+PrvsA12ClTehqhQiYXQpV957nG2z/aB72FQFtw1sW0pQQUzXbNhi1JHP 7Rfqn+PHQnaGSkjFOYIQYnpuRzsCJw7jvWiB0vMeFkqU48qs5eDtq+6Y4SOXYqgmj6c2 xPkWZ9bMRTXyJe0qi5A6IeH0TJlKua/KuhCCqjc+kJMbrd0D9c70eThlwFjRm3d45J/C FHMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=L9UcYZ8ZHMuof7HS2ENh0lx7rjVyWG5q5xjN6rCvzP8=; b=u2Gmg4yWSFrmGs4M0Oc5L93kQQM3sxD8mYePjVKoRmkaX+5lO/HGM04UZI9gNR7KZO 98D+MKSBC/LApwOGcJOGrEW1jP5y5LVS5Gu46BFCGaQaVqLwqndDxh38HLtIHKnw0Aff hzyGZGjk+i/uxxejX2E4W76wLI19w4xSLDhf32zPxz2sFmhohoAABBo/MXmUZs+wpdaZ rjWfYqPN+biwloz6zYIlThOCruRfvqkKMioGDmdTGWAri12MPBXXNEINL5OcALtOJWZR UpnN6OTv1s21Cg+52VkaqFnS97FS9V4P0C4Pt0Pub987lOBrgiM6z8lTbH8W7Ro61NoG RAFg== X-Gm-Message-State: ACrzQf3kEAvtjjgqFWImIfRV9+IMI58f+WU8M7q/uev6uRSkygwUTKH9 5djw4B/mZ2ufW/D7bPbjmBvbASmzWcNhatsi X-Received: by 2002:a62:1e83:0:b0:545:6896:188 with SMTP id e125-20020a621e83000000b0054568960188mr22348826pfe.51.1663652949452; Mon, 19 Sep 2022 22:49:09 -0700 (PDT) Received: from localhost ([36.112.86.8]) by smtp.gmail.com with ESMTPSA id e7-20020aa798c7000000b005383a0d9699sm515699pfm.144.2022.09.19.22.49.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Sep 2022 22:49:09 -0700 (PDT) From: Hawkins Jiawei To: yin31149@gmail.com Cc: 18801353760@163.com, gregkh@linuxfoundation.org, linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, luiz.dentz@gmail.com, marcel@holtmann.org, rafael@kernel.org, soenke.huster@eknoes.de, syzbot+5a2d2b4a8ca80ad216a9@syzkaller.appspotmail.com, syzbot+e653e3f67251b6139aaa@syzkaller.appspotmail.com, syzkaller-bugs@googlegroups.com Subject: Re: [syzbot] BUG: corrupted list in kobject_add_internal (4) Date: Tue, 20 Sep 2022 13:49:04 +0800 Message-Id: <20220920054904.26134-1-yin31149@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920051024.4991-1-yin31149@gmail.com> References: <20220920051024.4991-1-yin31149@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Luiz, On Tue, 20 Sept 2022 at 13:23, Luiz Augusto von Dentz wrote: > > Hi Hawkins, > > On Mon, Sep 19, 2022 at 10:12 PM Hawkins Jiawei wrote: > > > > Hi Luiz, > > > > On Tue, 20 Sept 2022 at 00:55, Luiz Augusto von Dentz wrote: > > > > > > Hi Hawkins, > > > > > > On Mon, Sep 19, 2022 at 1:42 AM Hawkins Jiawei wrote: > > > > > > > > On Sat, 17 Sept 2022 at 09:47, Hawkins Jiawei wrote: > > > > > > > > > >Hi, > > > > > > > > > >On Fri, 26 Aug 2022 08:27:06, AM Sönke Huster wrote: > > > > >>Hi Luiz, > > > > >> > > > > >>On 25.08.22 20:58, Luiz Augusto von Dentz wrote: > > > > >>> Hi Sönke, > > > > >>> > > > > >>> On Thu, Aug 25, 2022 at 8:08 AM Sönke Huster wrote: > > > > >>>> > > > > >>>> Hi, > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> While fuzzing I found several crashes similar to the following: > > > > >>>> > > > > >>>> > > > > >>>> [ 5.345731] sysfs: cannot create duplicate filename '/devices/virtual/bluetooth/hci0/hci0:0' > > > > >>>> > > > > >>>> [...] > > > > >>>> > > > > >>>> [ 5.430464] BUG: KASAN: use-after-free in klist_add_tail+0x1bd/0x200 > > > > >>>> > > > > >>>> [ 5.430464] Write of size 8 at addr ffff88800bfcc468 by task kworker/u3:1/43 > > > > >>>> > > > > >>>> [ 5.430464] > > > > >>>> > > > > >>>> [ 5.430464] CPU: 0 PID: 43 Comm: kworker/u3:1 Not tainted 5.19.0-12855-g13f222680b8f #2 > > > > >>>> > > > > >>>> [ 5.430464] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 > > > > >>>> > > > > >>>> [ 5.430464] Workqueue: hci0 hci_rx_work > > > > >>>> > > > > >>>> [ 5.430464] Call Trace: > > > > >>>> > > > > >>>> [ 5.430464] > > > > >>>> > > > > >>>> [ 5.430464] dump_stack_lvl+0x45/0x5d > > > > >>>> > > > > >>>> [ 5.430464] print_report.cold+0x5e/0x5e5 > > > > >>>> > > > > >>>> [ 5.430464] kasan_report+0xb1/0x1c0 > > > > >>>> > > > > >>>> [ 5.430464] klist_add_tail+0x1bd/0x200 > > > > >>>> > > > > >>>> [ 5.430464] device_add+0xa6b/0x1b80 > > > > >>>> > > > > >>>> [ 5.430464] hci_conn_add_sysfs+0x91/0x110 > > > > >>>> > > > > >>>> [ 5.430464] le_conn_complete_evt+0x117f/0x17d0 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_conn_complete_evt+0x226/0x2c0 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_meta_evt+0x2c0/0x4a0 > > > > >>>> > > > > >>>> [ 5.430464] hci_event_packet+0x636/0xf60 > > > > >>>> > > > > >>>> [ 5.430464] hci_rx_work+0xa8c/0x1000 > > > > >>>> > > > > >>>> [ 5.430464] process_one_work+0x8df/0x1530 > > > > >>>> > > > > >>>> [ 5.430464] worker_thread+0x575/0x11a0 > > > > >>>> > > > > >>>> [ 5.430464] kthread+0x29d/0x340 > > > > >>>> > > > > >>>> [ 5.430464] ret_from_fork+0x22/0x30 > > > > >>>> > > > > >>>> [ 5.430464] > > > > >>>> > > > > >>>> [ 5.430464] > > > > >>>> > > > > >>>> [ 5.430464] Allocated by task 44: > > > > >>>> > > > > >>>> [ 5.430464] kasan_save_stack+0x1e/0x40 > > > > >>>> > > > > >>>> [ 5.430464] __kasan_kmalloc+0x81/0xa0 > > > > >>>> > > > > >>>> [ 5.430464] device_add+0xcae/0x1b80 > > > > >>>> > > > > >>>> [ 5.430464] hci_conn_add_sysfs+0x91/0x110 > > > > >>>> > > > > >>>> [ 5.430464] le_conn_complete_evt+0x117f/0x17d0 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_conn_complete_evt+0x226/0x2c0 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_meta_evt+0x2c0/0x4a0 > > > > >>>> > > > > >>>> [ 5.430464] hci_event_packet+0x636/0xf60 > > > > >>>> > > > > >>>> [ 5.430464] hci_rx_work+0xa8c/0x1000 > > > > >>>> > > > > >>>> [ 5.430464] process_one_work+0x8df/0x1530 > > > > >>>> > > > > >>>> [ 5.430464] worker_thread+0x575/0x11a0 > > > > >>>> > > > > >>>> [ 5.430464] kthread+0x29d/0x340 > > > > >>>> > > > > >>>> [ 5.430464] ret_from_fork+0x22/0x30 > > > > >>>> > > > > >>>> [ 5.430464] > > > > >>>> > > > > >>>> [ 5.430464] Freed by task 43: > > > > >>>> > > > > >>>> [ 5.430464] kasan_save_stack+0x1e/0x40 > > > > >>>> > > > > >>>> [ 5.430464] kasan_set_track+0x21/0x30 > > > > >>>> > > > > >>>> [ 5.430464] kasan_set_free_info+0x20/0x40 > > > > >>>> > > > > >>>> [ 5.430464] __kasan_slab_free+0x108/0x190 > > > > >>>> > > > > >>>> [ 5.430464] kfree+0xa9/0x360 > > > > >>>> > > > > >>>> [ 5.430464] device_add+0x33a/0x1b80 > > > > >>>> > > > > >>>> [ 5.430464] hci_conn_add_sysfs+0x91/0x110 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_cis_estabilished_evt+0x517/0xa70 > > > > >>>> > > > > >>>> [ 5.430464] hci_le_meta_evt+0x2c0/0x4a0 > > > > >>>> > > > > >>>> [ 5.430464] hci_event_packet+0x636/0xf60 > > > > >>>> > > > > >>>> [ 5.430464] hci_rx_work+0xa8c/0x1000 > > > > >>>> > > > > >>>> [ 5.430464] process_one_work+0x8df/0x1530 > > > > >>>> > > > > >>>> [ 5.430464] worker_thread+0x575/0x11a0 > > > > >>>> > > > > >>>> [ 5.430464] kthread+0x29d/0x340 > > > > >>>> > > > > >>>> [ 5.430464] ret_from_fork+0x22/0x30 > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> I think I fixed a similar issue in d5ebaa7c5f6f ("Bluetooth: hci_event: Ignore multiple conn complete events"). Here, the problem was that multiple connection complete events for the same handle called hci_conn_add_sysfs multiple times, but if it is called with an existing connection conn->dev->p is freed. > > > > >>>> > > > > >>>> This is because device_add is called - its documentation contains this sentence: "Do not call this routine or device_register() more than once for any device structure". > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> This here is similar: First, an hci_le_conn_complete_evt creates a new connection. > > > > >>>> > > > > >>>> Afterwards, an hci_le_cis_estabilished_evt with the same handle finds that connection, and tries to add it to sysfs again, freeing conn->dev->p. Now, an event that might use that connection such as here the hci_le_conn_complete_evt triggers a use after free. > > > > >>>> > > > > > > > > > >Syzkaller reports a bug as follows [1]: > > > > >------------[ cut here ]------------ > > > > >kernel BUG at lib/list_debug.c:33! > > > > >invalid opcode: 0000 [#1] PREEMPT SMP KASAN > > > > >[...] > > > > >Call Trace: > > > > > > > > > > __list_add include/linux/list.h:69 [inline] > > > > > list_add_tail include/linux/list.h:102 [inline] > > > > > kobj_kset_join lib/kobject.c:164 [inline] > > > > > kobject_add_internal+0x18f/0x8f0 lib/kobject.c:214 > > > > > kobject_add_varg lib/kobject.c:358 [inline] > > > > > kobject_add+0x150/0x1c0 lib/kobject.c:410 > > > > > device_add+0x368/0x1e90 drivers/base/core.c:3452 > > > > > hci_conn_add_sysfs+0x9b/0x1b0 net/bluetooth/hci_sysfs.c:53 > > > > > hci_le_cis_estabilished_evt+0x57c/0xae0 net/bluetooth/hci_event.c:6799 > > > > > hci_le_meta_evt+0x2b8/0x510 net/bluetooth/hci_event.c:7110 > > > > > hci_event_func net/bluetooth/hci_event.c:7440 [inline] > > > > > hci_event_packet+0x63d/0xfd0 net/bluetooth/hci_event.c:7495 > > > > > hci_rx_work+0xae7/0x1230 net/bluetooth/hci_core.c:4007 > > > > > process_one_work+0x991/0x1610 kernel/workqueue.c:2289 > > > > > worker_thread+0x665/0x1080 kernel/workqueue.c:2436 > > > > > kthread+0x2e4/0x3a0 kernel/kthread.c:376 > > > > > ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306 > > > > > > > > > > > > > > >I think they are the same problems: > > > > >A hci_le_conn_complete_evt creates a new connection, and calls > > > > >hci_conn_add_sysfs(). Then hci_le_cis_estabilished_evt with the same handle > > > > >finds that connection, and will also calls hci_conn_add_sysfs(), which maybe > > > > >triggering corrupted list bug. > > > > > > > > > >Link: https://syzkaller.appspot.com/bug?id=da3246e2d33afdb92d66bc166a0934c5b146404a [1] > > > > > > > > > >>>> > > > > >>>> > > > > >>>> I bisected this bug and it was introduced with 26afbd826ee3 ("Bluetooth: Add initial implementation of CIS connections"). > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> The same happens with hci_le_create_big_complete_evt: Here, multiple events trigger the following bug: > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> [ 6.898080] BUG: kernel NULL pointer dereference, address: 0000000000000058 > > > > >>>> > > > > >>>> [ 6.898081] #PF: supervisor read access in kernel mode > > > > >>>> > > > > >>>> [ 6.898083] #PF: error_code(0x0000) - not-present page > > > > >>>> > > > > >>>> [ 6.898085] Oops: 0000 [#1] PREEMPT SMP NOPTI > > > > >>>> > > > > >>>> [ 6.898090] Workqueue: hci0 hci_rx_work > > > > >>>> > > > > >>>> [ 6.898092] RIP: 0010:klist_next+0x12/0x160 > > > > >>>> > > > > >>>> [ 6.898128] Call Trace: > > > > >>>> > > > > >>>> [ 6.898129] > > > > >>>> > > > > >>>> [ 6.898130] ? bt_link_release+0x20/0x20 > > > > >>>> > > > > >>>> [ 6.898133] device_find_child+0x37/0xa0 > > > > >>>> > > > > >>>> [ 6.898136] hci_conn_del_sysfs+0x71/0xa0 > > > > >>>> > > > > >>>> [ 6.898138] hci_conn_cleanup+0x17a/0x2c0 > > > > >>>> > > > > >>>> [ 6.898141] hci_conn_del+0x14a/0x240 > > > > >>>> > > > > >>>> [ 6.898144] hci_le_create_big_complete_evt+0x3d8/0x470 > > > > >>>> > > > > >>>> [ 6.898146] ? hci_le_remote_feat_complete_evt+0x3e0/0x3e0 > > > > >>>> > > > > >>>> [ 6.898148] hci_le_meta_evt+0x155/0x230 > > > > >>>> > > > > >>>> [ 6.898150] hci_event_packet+0x328/0x820 > > > > >>>> > > > > >>>> [ 6.898152] ? hci_conn_drop+0x100/0x100 > > > > >>>> > > > > >>>> [ 6.898155] hci_rx_work+0x725/0xb70 > > > > >>>> > > > > >>>> [ 6.898157] process_one_work+0x2a6/0x5d0 > > > > >>>> > > > > >>>> [ 6.898160] worker_thread+0x4a/0x3e0 > > > > >>>> > > > > >>>> [ 6.898162] ? process_one_work+0x5d0/0x5d0 > > > > >>>> > > > > >>>> [ 6.898164] kthread+0xed/0x120 > > > > >>>> > > > > >>>> [ 6.898165] ? kthread_complete_and_exit+0x20/0x20 > > > > >>>> > > > > >>>> [ 6.898167] ret_from_fork+0x22/0x30 > > > > >>>> > > > > >>>> [ 6.898170] > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> I bisected this bug and it was introduced with eca0ae4aea66 ("Bluetooth: Add initial implementation of BIS connections"). > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> I am not really sure how to solve that. As far as I understand, previously we simply set an unused handle as connection handle, and checked for that before setting the correct handle and adding it to sysfs. But here, adding it to sysfs seems to happen in a different function and the handle is already set. > > > > >>> > > > > >>> We should probably check if link-type, if it is an ISO link it shall > > > > >>> not be created via Connection Complete events and they have their own > > > > >>> events to create that. > > > > I wonder if we can check the connection type in hci_le_create_big_complete_evt() > > > > and hci_le_cis_estabilished_evt(), as below: > > > > > > > > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c > > > > index 6643c9c20fa4..5b83473d51b5 100644 > > > > --- a/net/bluetooth/hci_event.c > > > > +++ b/net/bluetooth/hci_event.c > > > > @@ -6795,8 +6795,16 @@ static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data, > > > > > > > > if (!ev->status) { > > > > conn->state = BT_CONNECTED; > > > > - hci_debugfs_create_conn(conn); > > > > - hci_conn_add_sysfs(conn); > > > > + > > > > + /* Only ISO_LINK link type need to register connection device > > > > + * here, others will register in their relative > > > > + * Connection Complete events > > > > + */ > > > > + if (conn->type == ISO_LINK) { > > > > + hci_debugfs_create_conn(conn); > > > > + hci_conn_add_sysfs(conn); > > > > + } > > > > > > We should probably just bail out if conn->type != ISO_LINK which can > > > be done much earlier. > > Thanks for explanation. > https://patchwork.kernel.org/project/bluetooth/patch/20220919181017.1658995-1-luiz.dentz@gmail.com/ Thanks for link. > > > > > > > > hci_iso_setup_path(conn); > > > > goto unlock; > > > > } > > > > @@ -6901,8 +6909,16 @@ static void hci_le_create_big_complete_evt(struct hci_dev *hdev, void *data, > > > > > > > > if (!ev->status) { > > > > conn->state = BT_CONNECTED; > > > > - hci_debugfs_create_conn(conn); > > > > - hci_conn_add_sysfs(conn); > > > > + > > > > + /* Only ISO_LINK link type need to register connection device > > > > + * here, others will register in their relative > > > > + * Connection Complete events > > > > + */ > > > > + if (conn->type == ISO_LINK) { > > > > + hci_debugfs_create_conn(conn); > > > > + hci_conn_add_sysfs(conn); > > > > + } > > > > + > > > > hci_iso_setup_path(conn); > > > > goto unlock; > > > > } > > > > > > > > It seems that this patch can pass the syzbot test. > > > > > > > > Link: https://lore.kernel.org/all/0000000000004f9ca105e8ba8157@google.com/ > > > > Reported-and-tested-by: syzbot+5a2d2b4a8ca80ad216a9@syzkaller.appspotmail.com > > > > > > > > Link: https://lore.kernel.org/all/0000000000008a7a3f05e8ad02f6@google.com/ > > > > Reported-and-tested-by: syzbot+e653e3f67251b6139aaa@syzkaller.appspotmail.com > > > > > > > > >>> > > > > >> > > > > >>But then the problem of duplicate hci_le_cis_estabilished_evt / hci_le_create_big_complete_evt still exists, isn't it? For example if the connection is created through a hci_le_cis_req_evt, and afterwards two hci_le_cis_estabilished_evt arrive, the second event calls hci_conn_add_sysfs a second time which frees parts of the device structure. > > > > As for this problem, I wonder if we can check the connection state in those > > > > functions as below, liking patch > > > > d5ebaa7c5f6f("Bluetooth: hci_event: Ignore multiple conn complete events"): > > > > > > > > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c > > > > index 5b83473d51b5..f6b62cfcf082 100644 > > > > --- a/net/bluetooth/hci_event.c > > > > +++ b/net/bluetooth/hci_event.c > > > > @@ -6794,6 +6794,14 @@ static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data, > > > > } > > > > > > > > if (!ev->status) { > > > > + /* The HCI_LE_CIS_Estabilished event is only sent once per connection. > > > > + * Processing it more than once per connection can corrupt kernel memory. > > > > + * > > > > + * As the connection state is set here for the first time, it indicates > > > > + * whether the connection is already set up. > > > > + */ > > > > + if (conn->state == BT_CONNECTED) > > > > + goto unlock; > > > > conn->state = BT_CONNECTED; > > > > > > > > /* Only ISO_LINK link type need to register connection device > > > > @@ -6908,6 +6916,14 @@ static void hci_le_create_big_complete_evt(struct hci_dev *hdev, void *data, > > > > conn->handle = __le16_to_cpu(ev->bis_handle[0]); > > > > > > > > if (!ev->status) { > > > > + /* The HCI_LE_Create_BIG_Complete event is only sent once per connection. > > > > + * Processing it more than once per connection can corrupt kernel memory. > > > > + * > > > > + * As the connection state is set here for the first time, it indicates > > > > + * whether the connection is already set up. > > > > + */ > > > > + if (conn->state == BT_CONNECTED) > > > > + goto unlock; > > > > > > These changes look good, please send a proper patch. > > OK, I will add some error message and send a proper patch. > > Note that I did send a set that should resolve this as well: > > https://patchwork.kernel.org/project/bluetooth/list/?series=678331 > Right, it seems better to patch this bug in this way. > > > > > > > conn->state = BT_CONNECTED; > > > > > > > > /* Only ISO_LINK link type need to register connection device > > > > > > > > >> > > > > >>>> Best > > > > >>>> Sönke > > > > >I wonder that if we need both two patches? Because they > > > > >seems to be used to patch different bugs? > > > > > > > > > > > > -- > > > Luiz Augusto von Dentz > > > > -- > Luiz Augusto von Dentz