Abstract
Improperly scrubbing sensitive data from memory can
compromise security.
Description
Compiler optimization errors occur when:
- Secret data is stored in memory.
- The secret data is scrubbed from memory by
overwriting its contents.
- The source code is compiled using an optimizing
compiler, which identifies and removes the function that
overwrites the contents as a dead store because the
memory is not used subsequently.
Examples
Example: "Dead store removal"
Memory overwriting code is removed by optimizing
compiler, which causes sensitive information left in the
memory after its usage.
The following code reads a password from the user, uses
the password to connect to a back-end mainframe and then
attempts to scrub the password from memory using memset().
void GetData(char *MFAddr) {
char pwd[64];
if (GetPasswordFromUser(pwd, sizeof(pwd))) {
if (ConnectToMainframe(MFAddr, pwd)) {
// Interaction with mainframe
}
}
memset(pwd, 0, sizeof(pwd));
}
The code in the example will behave correctly if it is
executed verbatim, but if the code is compiled using an
optimizing compiler, such as Microsoft Visual C++