From e21def2aea233d2486862f70419db9bd2ba0c01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=ADtek?= Date: Sat, 26 Sep 2020 18:00:29 +0200 Subject: [PATCH 1/2] Fixed memory leak in nfc_initiator_select_passive_target() --- libnfc/nfc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libnfc/nfc.c b/libnfc/nfc.c index 6f58a71..d89f0f0 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -579,6 +579,7 @@ nfc_initiator_select_passive_target(nfc_device *pnd, free(abtTmpInit); } else if (nm.nmt == NMT_ISO14443A) { abtInit = abtTmpInit; + free(abtTmpInit); iso14443_cascade_uid(pbtInitData, szInitData, abtInit, &szInit); } else { abtInit = abtTmpInit; @@ -587,8 +588,6 @@ nfc_initiator_select_passive_target(nfc_device *pnd, szInit = szInitData; } HAL(initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt); - - free(abtTmpInit); } /** @ingroup initiator From 3434adbb4e8c605545ba89dd817d693cc0cbd1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=ADtek?= Date: Fri, 16 Oct 2020 14:52:16 +0200 Subject: [PATCH 2/2] Replaced malloc() with alloca() --- libnfc/nfc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libnfc/nfc.c b/libnfc/nfc.c index d89f0f0..419dbde 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -81,6 +81,7 @@ #include #include #include +#include #include @@ -566,25 +567,21 @@ nfc_initiator_select_passive_target(nfc_device *pnd, { uint8_t *abtInit = NULL; uint8_t maxAbt = MAX(12, szInitData); - uint8_t *abtTmpInit = malloc(sizeof(uint8_t) * maxAbt); + uint8_t *abtTmpInit = alloca(sizeof(uint8_t) * maxAbt); size_t szInit = 0; int res; if ((res = nfc_device_validate_modulation(pnd, N_INITIATOR, &nm)) != NFC_SUCCESS) { - free(abtTmpInit); return res; } if (szInitData == 0) { // Provide default values, if any prepare_initiator_data(nm, &abtInit, &szInit); - free(abtTmpInit); } else if (nm.nmt == NMT_ISO14443A) { abtInit = abtTmpInit; - free(abtTmpInit); iso14443_cascade_uid(pbtInitData, szInitData, abtInit, &szInit); } else { abtInit = abtTmpInit; memcpy(abtInit, pbtInitData, szInitData); - free(abtTmpInit); szInit = szInitData; } HAL(initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt);