mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-22 17:33:01 +00:00
NFC: nci: Fix incorrect data chaining when sending data
When sending HCI data over NCI, cmd information should be present only on the first packet. Each packet shall be specifically allocated and sent to the NCI layer. Cc: stable@vger.kernel.org Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
a1269dd116
commit
500c4ef022
@ -146,18 +146,18 @@ static int nci_hci_send_data(struct nci_dev *ndev, u8 pipe,
|
||||
if (!conn_info)
|
||||
return -EPROTO;
|
||||
|
||||
skb = nci_skb_alloc(ndev, 2 + conn_info->max_pkt_payload_len +
|
||||
i = 0;
|
||||
skb = nci_skb_alloc(ndev, conn_info->max_pkt_payload_len +
|
||||
NCI_DATA_HDR_SIZE, GFP_KERNEL);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
skb_reserve(skb, 2 + NCI_DATA_HDR_SIZE);
|
||||
skb_reserve(skb, NCI_DATA_HDR_SIZE + 2);
|
||||
*skb_push(skb, 1) = data_type;
|
||||
|
||||
i = 0;
|
||||
len = conn_info->max_pkt_payload_len;
|
||||
|
||||
do {
|
||||
len = conn_info->max_pkt_payload_len;
|
||||
|
||||
/* If last packet add NCI_HFP_NO_CHAINING */
|
||||
if (i + conn_info->max_pkt_payload_len -
|
||||
(skb->len + 1) >= data_len) {
|
||||
@ -177,9 +177,15 @@ static int nci_hci_send_data(struct nci_dev *ndev, u8 pipe,
|
||||
return r;
|
||||
|
||||
i += len;
|
||||
|
||||
if (i < data_len) {
|
||||
skb_trim(skb, 0);
|
||||
skb_pull(skb, len);
|
||||
skb = nci_skb_alloc(ndev,
|
||||
conn_info->max_pkt_payload_len +
|
||||
NCI_DATA_HDR_SIZE, GFP_KERNEL);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
skb_reserve(skb, NCI_DATA_HDR_SIZE + 1);
|
||||
}
|
||||
} while (i < data_len);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user