diff options
author | Jocelyn Bohr <bohr@chromium.org> | 2015-08-11 13:42:27 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-08-11 21:58:56 +0000 |
commit | 8931d21cdb99bc3a6ce4833bf384a94349470a4d (patch) | |
tree | 8025c8341fdf9cd4b9de27948900328d6513dc13 | |
parent | 5aef9c6461983184408bb4ca0747c7c124b38903 (diff) | |
download | tpm2-8931d21cdb99bc3a6ce4833bf384a94349470a4d.tar.gz |
Source code changes to correctly account for empty union case.
This change adds cases for valid selector values indicating that no
marshaling/unmarshaling should occur. Without these cases, union marshaling
functions erroneously return TPM_RC_SELECTOR for some valid selector values
(e.g. TPM_ALG_NULL in TPMU_HA).
TEST=$ sudo emerge tpm2
builds libtpm2.a
$ gcc marshal_test.c -ltpm2 -lssl -lcrypto -o marshal-test
$ ./marshal-test
passes all test cases
BUG=none
Change-Id: Ie9f1efda68cdedbe0c09d60728d39d7f34f77d80
Reviewed-on: https://chromium-review.googlesource.com/292880
Reviewed-by: Darren Krahn <dkrahn@chromium.org>
Commit-Queue: Jocelyn Bohr <bohr@chromium.org>
Tested-by: Jocelyn Bohr <bohr@chromium.org>
-rw-r--r-- | tpm_generated.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tpm_generated.c b/tpm_generated.c index ead8c5d..beb2d0b 100644 --- a/tpm_generated.c +++ b/tpm_generated.c @@ -4215,6 +4215,10 @@ UINT16 TPMU_HA_Marshal(TPMU_HA* source, } return total_size; #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif #ifdef TPM_ALG_SHA256 case TPM_ALG_SHA256: for (i = 0; i < SHA256_DIGEST_SIZE; ++i) { @@ -4270,6 +4274,10 @@ TPM_RC TPMU_HA_Unmarshal(TPMU_HA* target, } return TPM_RC_SUCCESS; #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_SHA256 case TPM_ALG_SHA256: for (i = 0; i < SHA256_DIGEST_SIZE; ++i) { @@ -5787,6 +5795,10 @@ UINT16 TPMU_SYM_KEY_BITS_Marshal(TPMU_SYM_KEY_BITS* source, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif #ifdef TPM_ALG_SM4 case TPM_ALG_SM4: return TPMI_SM4_KEY_BITS_Marshal((TPMI_SM4_KEY_BITS*)&source->SM4, buffer, @@ -5810,6 +5822,10 @@ TPM_RC TPMU_SYM_KEY_BITS_Unmarshal(TPMU_SYM_KEY_BITS* target, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_SM4 case TPM_ALG_SM4: return TPMI_SM4_KEY_BITS_Unmarshal((TPMI_SM4_KEY_BITS*)&target->SM4, @@ -5833,6 +5849,10 @@ UINT16 TPMU_SYM_MODE_Marshal(TPMU_SYM_MODE* source, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif #ifdef TPM_ALG_SM4 case TPM_ALG_SM4: return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->SM4, buffer, @@ -5843,6 +5863,10 @@ UINT16 TPMU_SYM_MODE_Marshal(TPMU_SYM_MODE* source, return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->aes, buffer, size); #endif +#ifdef TPM_ALG_XOR + case TPM_ALG_XOR: + return 0; +#endif } return 0; } @@ -5852,6 +5876,10 @@ TPM_RC TPMU_SYM_MODE_Unmarshal(TPMU_SYM_MODE* target, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_SM4 case TPM_ALG_SM4: return TPMI_ALG_SYM_MODE_Unmarshal(&target->SM4, buffer, size, FALSE); @@ -5860,6 +5888,10 @@ TPM_RC TPMU_SYM_MODE_Unmarshal(TPMU_SYM_MODE* target, case TPM_ALG_AES: return TPMI_ALG_SYM_MODE_Unmarshal(&target->aes, buffer, size, FALSE); #endif +#ifdef TPM_ALG_XOR + case TPM_ALG_XOR: + return TPM_RC_SUCCESS; +#endif } return TPM_RC_SELECTOR; } @@ -6107,6 +6139,10 @@ UINT16 TPMU_SCHEME_KEYEDHASH_Marshal(TPMU_SCHEME_KEYEDHASH* source, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif #ifdef TPM_ALG_HMAC case TPM_ALG_HMAC: return TPMS_SCHEME_HMAC_Marshal((TPMS_SCHEME_HMAC*)&source->hmac, buffer, @@ -6126,6 +6162,10 @@ TPM_RC TPMU_SCHEME_KEYEDHASH_Unmarshal(TPMU_SCHEME_KEYEDHASH* target, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_HMAC case TPM_ALG_HMAC: return TPMS_SCHEME_HMAC_Unmarshal((TPMS_SCHEME_HMAC*)&target->hmac, @@ -6232,6 +6272,10 @@ UINT16 TPMU_SIG_SCHEME_Marshal(TPMU_SIG_SCHEME* source, return TPMS_SCHEME_ECDSA_Marshal((TPMS_SCHEME_ECDSA*)&source->ecdsa, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif } return 0; } @@ -6276,6 +6320,10 @@ TPM_RC TPMU_SIG_SCHEME_Unmarshal(TPMU_SIG_SCHEME* target, return TPMS_SCHEME_ECDSA_Unmarshal((TPMS_SCHEME_ECDSA*)&target->ecdsa, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif } return TPM_RC_SELECTOR; } @@ -6445,6 +6493,10 @@ UINT16 TPMU_KDF_SCHEME_Marshal(TPMU_KDF_SCHEME* source, return TPMS_SCHEME_KDF2_Marshal((TPMS_SCHEME_KDF2*)&source->kdf2, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif } return 0; } @@ -6474,6 +6526,10 @@ TPM_RC TPMU_KDF_SCHEME_Unmarshal(TPMU_KDF_SCHEME* target, return TPMS_SCHEME_KDF2_Unmarshal((TPMS_SCHEME_KDF2*)&target->kdf2, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif } return TPM_RC_SELECTOR; } @@ -6509,11 +6565,19 @@ UINT16 TPMU_ASYM_SCHEME_Marshal(TPMU_ASYM_SCHEME* source, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_RSAES + case TPM_ALG_RSAES: + return 0; +#endif #ifdef TPM_ALG_ECSCHNORR case TPM_ALG_ECSCHNORR: return TPMS_SCHEME_ECSCHNORR_Marshal( (TPMS_SCHEME_ECSCHNORR*)&source->ecSchnorr, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif #ifdef TPM_ALG_ECDH case TPM_ALG_ECDH: return TPMS_SCHEME_ECDH_Marshal((TPMS_SCHEME_ECDH*)&source->ecdh, buffer, @@ -6558,11 +6622,19 @@ TPM_RC TPMU_ASYM_SCHEME_Unmarshal(TPMU_ASYM_SCHEME* target, INT32* size, UINT32 selector) { switch (selector) { +#ifdef TPM_ALG_RSAES + case TPM_ALG_RSAES: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_ECSCHNORR case TPM_ALG_ECSCHNORR: return TPMS_SCHEME_ECSCHNORR_Unmarshal( (TPMS_SCHEME_ECSCHNORR*)&target->ecSchnorr, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif #ifdef TPM_ALG_ECDH case TPM_ALG_ECDH: return TPMS_SCHEME_ECDH_Unmarshal((TPMS_SCHEME_ECDH*)&target->ecdh, @@ -7056,6 +7128,10 @@ UINT16 TPMU_SIGNATURE_Marshal(TPMU_SIGNATURE* source, return TPMS_SIGNATURE_ECDSA_Marshal((TPMS_SIGNATURE_ECDSA*)&source->ecdsa, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return 0; +#endif } return 0; } @@ -7099,6 +7175,10 @@ TPM_RC TPMU_SIGNATURE_Unmarshal(TPMU_SIGNATURE* target, return TPMS_SIGNATURE_ECDSA_Unmarshal( (TPMS_SIGNATURE_ECDSA*)&target->ecdsa, buffer, size); #endif +#ifdef TPM_ALG_NULL + case TPM_ALG_NULL: + return TPM_RC_SUCCESS; +#endif } return TPM_RC_SELECTOR; } |