Message ID | 20190327083240.9104-2-kai.heng.feng@canonical.com |
---|---|
State | New |
Headers | show |
Series | Fix "Bluetooth: hci0: last event is not cmd complete (0x0f)" | expand |
On 27.03.19 09:32, Kai-Heng Feng wrote: > From: Johan Hedberg <johan.hedberg@intel.com> > > BugLink: https://bugs.launchpad.net/bugs/1748565 > > In case a command which completes in Command Status was sent using the > hci_cmd_send-family of APIs there would be a misleading error in the > hci_get_cmd_complete function, since the code would be trying to fetch > the Command Complete parameters when there are none. > > Avoid the misleading error and silently bail out from the function in > case the received event is a command status. > > Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> > Acked-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org> > (cherry picked from commit 1629db9c75342325868243d6bca5853017d91cf8) > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- > net/bluetooth/hci_event.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c > index 139707cd9d35..dc2bcf91baf4 100644 > --- a/net/bluetooth/hci_event.c > +++ b/net/bluetooth/hci_event.c > @@ -5213,6 +5213,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, > return true; > } > > + /* Check if request ended in Command Status - no way to retreive > + * any extra parameters in this case. > + */ > + if (hdr->evt == HCI_EV_CMD_STATUS) > + return false; > + > if (hdr->evt != HCI_EV_CMD_COMPLETE) { > bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)", > hdr->evt); >
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 139707cd9d35..dc2bcf91baf4 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -5213,6 +5213,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, return true; } + /* Check if request ended in Command Status - no way to retreive + * any extra parameters in this case. + */ + if (hdr->evt == HCI_EV_CMD_STATUS) + return false; + if (hdr->evt != HCI_EV_CMD_COMPLETE) { bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)", hdr->evt);