Remove global variable sessionData 97/67897/2
authorKiran Kamineni <kiran.k.kamineni@intel.com>
Wed, 19 Sep 2018 21:18:20 +0000 (14:18 -0700)
committerKiran Kamineni <kiran.k.kamineni@intel.com>
Wed, 19 Sep 2018 23:44:28 +0000 (16:44 -0700)
Remove global variable for storing session info.
Instead this is populated by the calling function
as required.

Issue-ID: AAF-334
Change-Id: I146b52bcee758fd053129fdf4f7a75691575e6e9
Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
TPM2-Plugin/bootstrap [changed mode: 0644->0755]
TPM2-Plugin/lib/tpm2_plugin_api.c

old mode 100644 (file)
new mode 100755 (executable)
index c27ec55..b328413 100644 (file)
@@ -247,7 +247,7 @@ static TSS2_SYS_CONTEXT *sapi_ctx_init (TSS2_TCTI_CONTEXT *tcti_ctx)
 
 #define BUFFER_SIZE(type, field) (sizeof((((type *)NULL)->t.field)))
 #define TPM2B_TYPE_INIT(type, field) { .t = { .size = BUFFER_SIZE(type, field), }, }
-TPMS_AUTH_COMMAND sessionData;
+
 int hex2ByteStructure(const char *inStr, UINT16 *byteLength, BYTE *byteBuffer)
 {
     int strLength;//if the inStr likes "1a2b...", no prefix "0x"
@@ -279,6 +279,7 @@ int hex2ByteStructure(const char *inStr, UINT16 *byteLength, BYTE *byteBuffer)
 }
 
 int load_key(TSS2_SYS_CONTEXT *sapi_context,
+             TPMS_AUTH_COMMAND sessionData,
              TPMI_DH_OBJECT    parentHandle,
              TPM2B_PUBLIC     *inPublic,
              TPM2B_PRIVATE    *inPrivate)
@@ -301,10 +302,6 @@ int load_key(TSS2_SYS_CONTEXT *sapi_context,
     sessionsDataOut.rspAuthsCount = 1;
     sessionsData.cmdAuthsCount = 1;
 
-    sessionData.sessionHandle = TPM_RS_PW;
-    sessionData.nonce.t.size = 0;
-
-    *((UINT8 *)((void *)&sessionData.sessionAttributes)) = 0;
     if (sessionData.hmac.t.size > 0 && hexPasswd)
     {
         sessionData.hmac.t.size = sizeof(sessionData.hmac) - 2;
@@ -400,21 +397,19 @@ int read_public(TSS2_SYS_CONTEXT *sapi_context,
 /*
 Reads the PRK_PASSWORD Environment variable
 and populates that information into the
-sessionData global environment variable
+provided sessionData variable
 */
-int readPassword()
+int readPassword(TPMS_AUTH_COMMAND *sessionData)
 {
     char *prk_passwd;
 
-    sessionData.hmac.t.size = 0;
-    
     prk_passwd = getenv("TPM_PRK_PASSWORD");
     if (prk_passwd != NULL) {
-        sessionData.hmac.t.size = strlen(prk_passwd);
-        if (sessionData.hmac.t.size > sizeof(sessionData.hmac.t.buffer)) {
+        sessionData->hmac.t.size = strlen(prk_passwd);
+        if (sessionData->hmac.t.size > sizeof(sessionData->hmac.t.buffer)) {
             return -1;
         }
-        memcpy(sessionData.hmac.t.buffer, prk_passwd, sessionData.hmac.t.size);
+        memcpy(sessionData->hmac.t.buffer, prk_passwd, sessionData->hmac.t.size);
         return 0;
     }
     return 0;
@@ -430,9 +425,20 @@ int load_key_execute(SSHSM_HW_PLUGIN_ACTIVATE_LOAD_IN_INFO_t *loadkey_in_info,
     TPMI_DH_OBJECT parentHandle;
     TPM2B_PUBLIC  inPublic;
     TPM2B_PRIVATE inPrivate;
+    TPMS_AUTH_COMMAND sessionData;
     UINT16 size;
     int returnVal = 0;
 
+    /*
+        Initializing the sessionData structure to the 0 values
+        sessionAttributes is a union and the following assignment
+        is based on the method used in other tpm2 tools.
+    */
+    *((UINT8 *)((void *)&sessionData.sessionAttributes)) = 0;
+    sessionData.sessionHandle = TPM_RS_PW;
+    sessionData.nonce.t.size = 0;
+    sessionData.hmac.t.size = 0;
+
     memset(&inPublic,0,sizeof(TPM2B_PUBLIC));
     memset(&inPrivate,0,sizeof(TPM2B_PRIVATE));
 
@@ -464,12 +470,13 @@ int load_key_execute(SSHSM_HW_PLUGIN_ACTIVATE_LOAD_IN_INFO_t *loadkey_in_info,
     }
 
     // Read TPM_PRK_PASSWORD and setup sessionsData appropriately
-    if (readPassword() != 0) {
+    if (readPassword(&sessionData) != 0) {
         // Password read failure
         return -1;
     }
 
     returnVal = load_key (sapi_context,
+                          sessionData,
                           parentHandle,
                           &inPublic,
                           &inPrivate);