提交 2f10e40a 编写于 作者: P Pauli Virtanen 提交者: Luiz Augusto von Dentz

Bluetooth: ISO: fix timestamped HCI ISO data packet parsing

Use correct HCI ISO data packet header struct when the packet has
timestamp. The timestamp, when present, goes before the other fields
(Core v5.3 4E 5.4.5), so the structs are not compatible.

Fixes: ccf74f23 ("Bluetooth: Add BTPROTO_ISO socket type")
Signed-off-by: NPauli Virtanen <pav@iki.fi>
Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
上级 efe375b7
...@@ -1620,7 +1620,6 @@ static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason) ...@@ -1620,7 +1620,6 @@ static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason)
void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
{ {
struct iso_conn *conn = hcon->iso_data; struct iso_conn *conn = hcon->iso_data;
struct hci_iso_data_hdr *hdr;
__u16 pb, ts, len; __u16 pb, ts, len;
if (!conn) if (!conn)
...@@ -1642,6 +1641,8 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) ...@@ -1642,6 +1641,8 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
} }
if (ts) { if (ts) {
struct hci_iso_ts_data_hdr *hdr;
/* TODO: add timestamp to the packet? */ /* TODO: add timestamp to the packet? */
hdr = skb_pull_data(skb, HCI_ISO_TS_DATA_HDR_SIZE); hdr = skb_pull_data(skb, HCI_ISO_TS_DATA_HDR_SIZE);
if (!hdr) { if (!hdr) {
...@@ -1649,15 +1650,19 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) ...@@ -1649,15 +1650,19 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
goto drop; goto drop;
} }
len = __le16_to_cpu(hdr->slen);
} else { } else {
struct hci_iso_data_hdr *hdr;
hdr = skb_pull_data(skb, HCI_ISO_DATA_HDR_SIZE); hdr = skb_pull_data(skb, HCI_ISO_DATA_HDR_SIZE);
if (!hdr) { if (!hdr) {
BT_ERR("Frame is too short (len %d)", skb->len); BT_ERR("Frame is too short (len %d)", skb->len);
goto drop; goto drop;
} }
len = __le16_to_cpu(hdr->slen);
} }
len = __le16_to_cpu(hdr->slen);
flags = hci_iso_data_flags(len); flags = hci_iso_data_flags(len);
len = hci_iso_data_len(len); len = hci_iso_data_len(len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册