All of lore.kernel.org
 help / color / mirror / Atom feed
From: bugzilla-daemon@kernel.org
To: linux-bluetooth@vger.kernel.org
Subject: [Bug 218151] New: Bluetooth: Erratic HCI_Command_Status without Inquiry
Date: Thu, 16 Nov 2023 02:22:05 +0000	[thread overview]
Message-ID: <bug-218151-62941@https.bugzilla.kernel.org/> (raw)

https://bugzilla.kernel.org/show_bug.cgi?id=218151

            Bug ID: 218151
           Summary: Bluetooth: Erratic HCI_Command_Status without Inquiry
           Product: Drivers
           Version: 2.5
          Hardware: Intel
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P3
         Component: Bluetooth
          Assignee: linux-bluetooth@vger.kernel.org
          Reporter: sy2239101@buaa.edu.cn
        Regression: No

Created attachment 305410
  --> https://bugzilla.kernel.org/attachment.cgi?id=305410&action=edit
wireshark screenshot

Our fuzzing tool finds a possible semantic bug in the Bluetooth system in Linux
6.2:

According to the core specification v5.4, the HCI_Inquiry command triggers the
BR/EDR Controller to enter Inquiry Mode, a process used for discovering nearby
BR/EDR Controllers. Furthermore, it is specified that an HCI_Command_Status
event should be sent to the Host when the BR/EDR Controller has started the
Inquiry process.

In our testing, if a related HCI_Command_Status event is sent by the controller
without a preceding HCI_Inquiry command from the host, this could lead to a
failure in establishing Bluetooth connections.

Through our examination and debugging of the Linux 6.2 source code, we have
identified the underlying cause of the observed phenomenon:

(1.1) When the HCI_Command_Status event related to the HCI_Inquiry command is
received, the function hci_cs_inquiry (/net/bluetooth/hci_event.c:2289) is
called.

(1.2) This leads to the execution of set_bit(HCI_INQUIRY, &hdev->flags);
(/net/bluetooth/hci_event.c:2298).

(2.1) Upon initiating an ACL connection for the first time, the function
hci_acl_create_connection (/net/bluetooth/hci_conn.c:212) is called.

(2.2) The result of test_bit(HCI_INQUIRY, &hdev->flags)
(/net/bluetooth/hci_conn.c:228) being true causes the connection's state to
change to BT_CONNECT2, and the HCI_Inquiry_Cancel command is sent.

(3.1) When the HCI_Command_Complete event related to the HCI_Inquiry_Cancel
command is received, the function hci_cc_inquiry_cancel
(/net/bluetooth/hci_event.c:84) is called.

(3.2) The Status field of the HCI_Command_Complete event being 0x0c results in
the execution of return rp->status; (/net/bluetooth/hci_event.c:104).

(4.1) A timeout triggers hci_conn_timeout (/net/bluetooth/hci_conn.c:638),
which in turn calls hci_abort_conn (/net/bluetooth/hci_conn.c:2771).

(4.2) This leads to the execution of case BT_CONNECT2:
(/net/bluetooth/hci_conn.c:2771), where the HCI_Reject_Connection_Request
command is sent. 

We are not sure whether this is a semantic bug or implementation feature in the
Linux kernel. Any feedback would be appreciated, thanks!

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are the assignee for the bug.

             reply	other threads:[~2023-11-16  2:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-16  2:22 bugzilla-daemon [this message]
2023-11-16  2:27 ` [Bug 218151] Bluetooth: Erratic HCI_Command_Status without Inquiry bugzilla-daemon
2023-11-16  2:42 ` bugzilla-daemon
2023-11-16 11:11 ` bugzilla-daemon
2023-11-20 15:23 ` bugzilla-daemon
2023-11-22  1:05 ` bugzilla-daemon
2023-11-22  1:06 ` bugzilla-daemon
2023-11-22  3:23 ` bugzilla-daemon
2023-11-22  8:28 ` bugzilla-daemon
2023-11-23 11:12 ` bugzilla-daemon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-218151-62941@https.bugzilla.kernel.org/ \
    --to=bugzilla-daemon@kernel.org \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.