Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added the 2nd solution (might add another compliant solution for this one)

...

Code Block
bgColor#ccccff
void f1 (size_t nchars, size_t val) {

char *p = (char *)malloc(nchars);
const size_t n = val;

if (nchars - n < 0) {

     /* Handle Error */

}

else {

	memset(p, 0, n);

}

/* More program code */

}

Noncompliant Code Example

This noncompliant code example assigns a value greater than the size of dynamic memory to 'n' which is then passed to the memset().

Code Block
bgColor#FFcccc

void f2() {
float a[4];
const size_t n= sizeof(int) * 4;
void *p = a;


memset(p, 0, n);
/* More program code */

}

Compliant Solution

This compliant solution makes sure that the value of 'n' is not greater the size of the dynamic memory pointed to by the pointer 'p':

Code Block
bgColor#ccccff

void f2() {
float a[4];
const size_t n= sizeof(float) * 4;
void *p = a;

memset(p, 0, n);
/* More program code */

}

Risk Assessment

Depending on the library function called, the attacker may be able to use a heap overflow vulnerability to run arbitrary code. The detection of checks specified in description can be automated but the remediation has to be manual.

...