From: Gang W. <gan...@in...> - 2018-11-30 07:12:26
|
changeset e55784aa2d2b in /hg/p/tboot/code details: http://hg.code.sf.net/p/tboot/code/code?cmd=changeset;node=e55784aa2d2b description: tools: fix some dereference-NULL issues reported by klocwork Signed-off-by: Gang Wei <gan...@in...> diffstat: lcptools-v2/crtpollist.c | 29 +++++++++++++++++++++++++---- 1 files changed, 25 insertions(+), 4 deletions(-) diffs (61 lines): diff -r 48fdbc3d9fcd -r e55784aa2d2b lcptools-v2/crtpollist.c --- a/lcptools-v2/crtpollist.c Fri Nov 30 12:04:56 2018 +0800 +++ b/lcptools-v2/crtpollist.c Fri Nov 30 12:04:56 2018 +0800 @@ -341,9 +341,15 @@ RSA_free(privkey); + uint8_t *plsigblock = get_tpm20_sig_block(pollist); + if ( plsigblock == NULL ) { + ERROR("Error: list sig block not found\n"); + return false; + } + /* sigblock is big-endian and policy needs little-endian, so reverse */ for ( unsigned int i = 0; i < sig->rsa_signature.pubkey_size; i++ ) - *(get_tpm20_sig_block(pollist) + i) = *(sigblock + (sig->rsa_signature.pubkey_size - i - 1)); + *(plsigblock + i) = *(sigblock + (sig->rsa_signature.pubkey_size - i - 1)); if ( verbose ) { LOG("signature:\n"); @@ -407,12 +413,19 @@ unsigned char key_s[BN_s_size]; BN_bn2bin(r,key_r); BN_bn2bin(s,key_s); + + uint8_t *plsigblock = get_tpm20_sig_block(pollist); + if ( plsigblock == NULL ) { + ERROR("Error: list sig block not found\n"); + return false; + } + for ( unsigned int i = 0; i < BN_r_size; i++ ) { - *(get_tpm20_sig_block(pollist) + i) = *(key_r + (BN_r_size -i - 1)); + *(plsigblock + i) = *(key_r + (BN_r_size -i - 1)); } for ( unsigned int i = 0; i < BN_s_size; i++ ) { - *(get_tpm20_sig_block(pollist) + BN_r_size + i) = *(key_s + (BN_s_size -i - 1)); + *(plsigblock + BN_r_size + i) = *(key_s + (BN_s_size -i - 1)); } if ( verbose ) { @@ -653,9 +666,17 @@ } LOG("signature file verified\n"); + uint8_t *plsigblock = get_tpm20_sig_block(&(pollist->tpm20_policy_list)); + if ( plsigblock == NULL ) { + ERROR("Error: list sig block not found\n"); + free(pollist); + free(data); + return 1; + } + /* data is big-endian and policy needs little-endian, so reverse */ for ( unsigned int i = 0; i < sig->rsa_signature.pubkey_size; i++ ) - *(get_tpm20_sig_block(&(pollist->tpm20_policy_list)) + i) = + *(plsigblock + i) = *(data + (sig->rsa_signature.pubkey_size - i - 1)); if ( verbose ) { |