Skip to content

Commit c85d95d

Browse files
author
Kent Yoder
committed
tpm-tools: replace memset with an implementation that can't be as easily
optimized away Signed-off-by: Kent Yoder <key@linux.vnet.ibm.com>
1 parent ddf5f3d commit c85d95d

File tree

6 files changed

+26
-12
lines changed

6 files changed

+26
-12
lines changed

‎include/tpm_utils.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@
6565
#define LOG_DEBUG _("debug")
6666
#define LOG_LEVEL_DEBUG 3
6767

68+
#ifdef __GNUC__
69+
#define __no_optimize __attribute__((optimize("O0")))
70+
#else
71+
#define __no_optimize
72+
#endif
73+
74+
void * __no_optimize __memset(void *s, int c, size_t n);
75+
6876
typedef int (*CmdOptParser)( const int aOpt, const char *aOptArg );
6977
typedef void (*CmdHelpFunction)( const char *aCmd );
7078

‎lib/tpm_pkcs11.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ pkcsSlotInfo(CK_SLOT_INFO *a_ptSlotInfo ) {
8484
char szSlotDesc[ sizeof( a_ptSlotInfo->slotDescription ) + 1 ];
8585
char szSlotMfr[ sizeof( a_ptSlotInfo->manufacturerID ) + 1 ];
8686

87-
memset( szSlotDesc, 0, sizeof( szSlotDesc ) );
88-
memset( szSlotMfr, 0, sizeof( szSlotMfr ) );
87+
__memset( szSlotDesc, 0, sizeof( szSlotDesc ) );
88+
__memset( szSlotMfr, 0, sizeof( szSlotMfr ) );
8989

9090
strncpy( szSlotDesc, (char *)a_ptSlotInfo->slotDescription,
9191
sizeof( a_ptSlotInfo->slotDescription ) );
@@ -111,9 +111,9 @@ pkcsTokenInfo(CK_TOKEN_INFO *a_ptTokenInfo ) {
111111
char szTokenMfr[ sizeof( a_ptTokenInfo->manufacturerID ) + 1 ];
112112
char szTokenModel[ sizeof( a_ptTokenInfo->model ) + 1 ];
113113

114-
memset( szTokenLabel, 0, sizeof( szTokenLabel ) );
115-
memset( szTokenMfr, 0, sizeof( szTokenMfr ) );
116-
memset( szTokenModel, 0, sizeof( szTokenModel ) );
114+
__memset( szTokenLabel, 0, sizeof( szTokenLabel ) );
115+
__memset( szTokenMfr, 0, sizeof( szTokenMfr ) );
116+
__memset( szTokenModel, 0, sizeof( szTokenModel ) );
117117

118118
strncpy( szTokenLabel, (char *)a_ptTokenInfo->label,
119119
sizeof( a_ptTokenInfo->label ) );
@@ -172,7 +172,7 @@ openToken( char *a_pszTokenLabel ) {
172172
goto out;
173173

174174
// Set the name of the TPM token
175-
memset( szTokenLabel, ' ', sizeof( szTokenLabel ) );
175+
__memset( szTokenLabel, ' ', sizeof( szTokenLabel ) );
176176
if ( a_pszTokenLabel ) {
177177
if ( strlen( a_pszTokenLabel ) > sizeof( szTokenLabel ) ) {
178178
logError( _("The token label cannot be greater than %ld characters\n"), sizeof( szTokenLabel ) );

‎lib/tpm_unseal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ int tpmUnsealFile( char* fname, unsigned char** tss_data, int* tss_size,
465465
void tpmUnsealShred(unsigned char* data, int size) {
466466

467467
if ( data != NULL ) {
468-
memset( data, 0, size);
468+
__memset( data, 0, size);
469469
free(data);
470470
}
471471

‎lib/tpm_utils.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ genericOptHandler( int a_iNumArgs, char **a_pszArgs,
6969
if ( a_pszShortOpts )
7070
strcat( szShortOpts, a_pszShortOpts );
7171

72-
memset( sLongOpts, 0, sizeof( sLongOpts ) );
72+
__memset( sLongOpts, 0, sizeof( sLongOpts ) );
7373
memcpy( sLongOpts, sGenLongOpts, sizeof( sGenLongOpts ) );
7474
if ( a_sLongOpts ) {
7575
memcpy( sLongOpts + iNumGenLongOpts,
@@ -134,14 +134,20 @@ genericOptHandler( int a_iNumArgs, char **a_pszArgs,
134134
return 0;
135135
}
136136

137+
void * __no_optimize
138+
__memset(void *s, int c, size_t n)
139+
{
140+
return memset(s, c, n);
141+
}
142+
137143
/*
138144
* This function should be called when you are done with a password
139145
* the above getPasswd function to properly clean up.
140146
*/
141147
void shredPasswd( char *a_pszPasswd ) {
142148

143149
if ( a_pszPasswd ) {
144-
memset( a_pszPasswd, 0, strlen( a_pszPasswd ) );
150+
__memset( a_pszPasswd, 0, strlen( a_pszPasswd ) );
145151
free( a_pszPasswd );
146152
}
147153
}
@@ -213,7 +219,7 @@ char *_getPasswd(const char *a_pszPrompt, int* a_iLen,
213219

214220
// pszPasswd is a static buffer, just clear it
215221
if ( pszPasswd )
216-
memset( pszPasswd, 0, strlen( pszPasswd ) );
222+
__memset( pszPasswd, 0, strlen( pszPasswd ) );
217223

218224
return pszRetPasswd;
219225
}

‎src/tpm_mgmt/tpm_createek.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ static int readData(UINT32 bytesToRead, BYTE **buffer)
9393
int rc = 0;
9494
BYTE eofile;
9595

96-
memset(*buffer, 0x00, bytesToRead);
96+
__memset(*buffer, 0x00, bytesToRead);
9797
infile = fopen(in_filename, "r");
9898
if ( !infile ){
9999
logError(_("Unable to open input file: %s\n"),

‎src/tpm_mgmt/tpm_nvwrite.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ int main(int argc, char **argv)
230230
logError(_("Out of memory.\n"));
231231
return -1;
232232
}
233-
memset(rgbDataToWrite, fillvalue, ulDataLength);
233+
__memset(rgbDataToWrite, fillvalue, ulDataLength);
234234
} else {
235235
ulDataLength = 0;
236236
}

0 commit comments

Comments
 (0)