keystore: fix memory leak from readKeymasterBlob
memory allocated in readKeymasterBlob() was not freed.
The memory leak happens when the clientId
and appData for getKeyCharacteristics() or exportKey() is non-null.
Change-Id: Ie0340e122bf25a2385175892e5ff8535cca8710a
Signed-off-by: Bin Chen <pierr.chen@gmail.com>
diff --git a/keystore/IKeystoreService.cpp b/keystore/IKeystoreService.cpp
index 85c60a5..847abc1 100644
--- a/keystore/IKeystoreService.cpp
+++ b/keystore/IKeystoreService.cpp
@@ -1693,6 +1693,12 @@
KeyCharacteristics outCharacteristics;
int ret = getKeyCharacteristics(name, clientId.get(), appData.get(), uid,
&outCharacteristics);
+ if (clientId.get() && clientId->data) {
+ free(const_cast<void*>(static_cast<const void*>(clientId->data)));
+ }
+ if (appData.get() && appData->data) {
+ free(const_cast<void*>(static_cast<const void*>(appData->data)));
+ }
reply->writeNoException();
reply->writeInt32(ret);
reply->writeInt32(1);
@@ -1731,6 +1737,12 @@
int32_t uid = data.readInt32();
ExportResult result;
exportKey(name, format, clientId.get(), appData.get(), uid, &result);
+ if (clientId.get() && clientId->data) {
+ free(const_cast<void*>(static_cast<const void*>(clientId->data)));
+ }
+ if (appData.get() && appData->data) {
+ free(const_cast<void*>(static_cast<const void*>(appData->data)));
+ }
reply->writeNoException();
reply->writeInt32(1);
result.writeToParcel(reply);