From: Christophe Ricard <christophe.ricard@gmail.com>
Date: Thu, 24 Apr 2014 21:19:32 +0000 (+0200)
Subject: NFC: st21nfca: Fix incorrect byte stuffing revocation
X-Git-Tag: firefly_0821_release~176^2~3540^2~11^2~7^2~65^2~13
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3096e25a3e40b73afd59e46f3bf8d84f919992a1;p=firefly-linux-kernel-4.4.55.git

NFC: st21nfca: Fix incorrect byte stuffing revocation

Byte stuffing was not correctly removed after a i2c read operation.
This was causing improper crc calculation when byte stuffing was
applied to more than 1 byte.

Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
---

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index 6c4d0a0fc7fc..4df15ef2528a 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -315,11 +315,10 @@ static int st21nfca_hci_i2c_repack(struct sk_buff *skb)
 		skb_trim(skb, size);
 		/* remove ST21NFCA byte stuffing for upper layer */
 		for (i = 1, j = 0; i < skb->len; i++) {
-			if (skb->data[i] ==
+			if (skb->data[i + j] ==
 					(u8) ST21NFCA_ESCAPE_BYTE_STUFFING) {
-				skb->data[i] =
-				    skb->data[i +
-					      1] | ST21NFCA_BYTE_STUFFING_MASK;
+				skb->data[i] = skb->data[i + j + 1]
+						| ST21NFCA_BYTE_STUFFING_MASK;
 				i++;
 				j++;
 			}