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);