aboutsummaryrefslogtreecommitdiffstats
path: root/net/nfc
diff options
context:
space:
mode:
authorThierry Escande <thierry.escande@collabora.com>2016-06-16 14:24:41 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2016-07-06 04:03:08 -0400
commitb77693447db987e77a39afaa8774e8702cb110d5 (patch)
treec16ef17f147b8a7b45cd98686f9ce5b8e4237d69 /net/nfc
parent8f49bec6c36c73f0c212e07229b19fb4bba85788 (diff)
NFC: digital: Fix a memory leak in NFC-F listening mode
When configured as a target listening for a SENSF_REQ poll command, a nfcid2 array was allocated for no reason leading to a memory leak. The nfcid2 is sent by the target in the SENSF_RES reply. Signed-off-by: Thierry Escande <thierry.escande@collabora.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc')
-rw-r--r--net/nfc/digital_technology.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c
index fb58ed2dd41d..d9080dec5d27 100644
--- a/net/nfc/digital_technology.c
+++ b/net/nfc/digital_technology.c
@@ -1257,21 +1257,12 @@ static int digital_tg_config_nfcf(struct nfc_digital_dev *ddev, u8 rf_tech)
1257int digital_tg_listen_nfcf(struct nfc_digital_dev *ddev, u8 rf_tech) 1257int digital_tg_listen_nfcf(struct nfc_digital_dev *ddev, u8 rf_tech)
1258{ 1258{
1259 int rc; 1259 int rc;
1260 u8 *nfcid2;
1261 1260
1262 rc = digital_tg_config_nfcf(ddev, rf_tech); 1261 rc = digital_tg_config_nfcf(ddev, rf_tech);
1263 if (rc) 1262 if (rc)
1264 return rc; 1263 return rc;
1265 1264
1266 nfcid2 = kzalloc(NFC_NFCID2_MAXSIZE, GFP_KERNEL); 1265 return digital_tg_listen(ddev, 300, digital_tg_recv_sensf_req, NULL);
1267 if (!nfcid2)
1268 return -ENOMEM;
1269
1270 nfcid2[0] = DIGITAL_SENSF_NFCID2_NFC_DEP_B1;
1271 nfcid2[1] = DIGITAL_SENSF_NFCID2_NFC_DEP_B2;
1272 get_random_bytes(nfcid2 + 2, NFC_NFCID2_MAXSIZE - 2);
1273
1274 return digital_tg_listen(ddev, 300, digital_tg_recv_sensf_req, nfcid2);
1275} 1266}
1276 1267
1277void digital_tg_recv_md_req(struct nfc_digital_dev *ddev, void *arg, 1268void digital_tg_recv_md_req(struct nfc_digital_dev *ddev, void *arg,