Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#FFcccc
char *secret;

secret = (char *)malloc(size+1);
if (!secret) {
  /* Handle Error */
}
secret = create_secret();

/* Perform operations using secret... */

free(secret);
secret = NULL;

...

Code Block
bgColor#ccccff
#include <sys/resource.h>
/* ... */
struct rlimit limit;
char *secret;

limit.rlim_cur = 0;
limit.rlim_max = 0;
if (setrlimit(RLIMIT_CORE, &limit) != 0) {
    /* Handle Error */
}

/* Create or otherwise obtain some sensitive data */
fgets(secret, sizeof(secret), stdin);

...

Code Block
bgColor#CCCCFF
#include <sys/resource.h>
/* ... */
struct rlimit limit;
char *secret;

limit.rlim_cur = 0;
limit.rlim_max = 0;
if (setrlimit(RLIMIT_CORE, &limit) != 0) {
    /* Handle Error */
}

if (mlock(secret, sizeof(secret)) != 0) {
    /* Handle error */
}

/* Create or otherwise obtain some sensitive data */
fgets(secret, sizeof(secret), stdin);

Compliant Solution (privileged process on Windows)

Code Block
bgColor#CCCCFF

char *secret;

if (VirtualLock(secret, sizeof(secret)) != 0) {
    /* Handle error */
}

/* Create or otherwise obtain some sensitive data */
fgets(secret, sizeof(secret), stdin);

...