Not enough memory allocated for pointer type¶
ID: cpp/allocation-too-small
Kind: problem
Security severity: 8.1
Severity: warning
Precision: medium
Tags:
- reliability
- security
- external/cwe/cwe-131
- external/cwe/cwe-122
Query suites:
- cpp-security-extended.qls
- cpp-security-and-quality.qls
Click to see the query in the CodeQL repository
When you allocate an array from memory using malloc
, calloc
or realloc
, you should ensure that you allocate enough memory to contain an instance of the required pointer type. Calls that are assigned to a non-void pointer variable, but do not allocate enough memory will cause a buffer overflow when a field accessed on the pointer points to memory that is beyond the allocated array. Buffer overflows can lead to anything from a segmentation fault to a security vulnerability.
Recommendation¶
The highlighted call allocates memory that is too small to contain an instance of the type of the pointer, which can cause a memory overrun. Use the sizeof
operator to ensure that the function call allocates enough memory for that type.
Example¶
#define RECORD_SIZE 30 //incorrect or outdated size for record
typedef struct {
char name[30];
int status;
} Record;
void f() {
Record* p = malloc(RECORD_SIZE); //not of sufficient size to hold a Record
...
}