Versions Compared

Key

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

...

Passing a pointer value to a deallocation function that was not previously obtained by the matching allocation function results in undefined behavior, which can lead to exploitable vulnerabilities.

Rule

Severity

Likelihood

Detectable

RepairableRemediation Cost

Priority

Level

MEM51-CPP

High

Likely

No

NoMedium

P18 P9

L1 L2

Automated Detection

Tool

Version

Checker

Description

Astrée

Include Page
Astrée_V
Astrée_V

invalid_dynamic_memory_allocation
dangling_pointer_use

Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC++-MEM51
Clang
Include Page
Clang_V
Clang_V
clang-analyzer-cplusplus.NewDeleteLeaks
-Wmismatched-new-delete
clang-analyzer-unix.MismatchedDeallocator 
Checked by clang-tidy, but does not catch all violations of this rule
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V
ALLOC.FNH

ALLOC.DF
ALLOC.TM
ALLOC.LEAK

Free non-heap variable
Double free
Type mismatch
Leak
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C++2110, C++2111, C++2112, C++2113, C++2118, C++3337, C++3339, C++4262, C++4263, C++4264


Klocwork
Include Page
Klocwork_V
Klocwork_V
CL.FFM.ASSIGN
CL.FFM.COPY
CL.FMM
CL.SHALLOW.ASSIGN
CL.SHALLOW.COPY
FMM.MIGHT
FMM.MUST
FNH.MIGHT
FNH.MUST
FUM.GEN.MIGHT
FUM.GEN.MUST
UNINIT.CTOR.MIGHT
UNINIT.CTOR.MUST
UNINIT.HEAP.MIGHT
UNINIT.HEAP.MUST

LDRA tool suite
Include Page
LDRA_V
LDRA_V

232 S, 236 S, 239 S, 407 S, 469 S, 470 S, 483 S, 484 S, 485 S, 64 D, 112 D

Partially implemented

Parasoft C/C++test
Include Page
Parasoft_V
Parasoft_V

CERT_CPP-MEM51-a
CERT_CPP-MEM51-b
CERT_CPP-MEM51-c
CERT_CPP-MEM51-d


Use the same form in corresponding calls to new/malloc and delete/free
Always provide empty brackets ([]) for delete when deallocating arrays
Both copy constructor and copy assignment operator should be declared for classes with a nontrivial destructor
Properly deallocate dynamically allocated resources

Parasoft Insure++

Runtime detection
Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C++: MEM51-CPP

Checks for:

  • Invalid deletion of pointer
  • Invalid free of pointer
  • Deallocation of previously deallocated pointer

Rule partially covered.

PVS-Studio

Include Page
PVS-Studio_V
PVS-Studio_V

V515, V554, V611, V701, V748, V773, V1066
Security Reviewer - Static Reviewer

Include Page
Security Reviewer - Static Reviewer_V
Security Reviewer - Static Reviewer_V

wcsdupCalledFully implemented
SonarQube C/C++ Plugin
Include Page
SonarQube C/C++ Plugin_V
SonarQube C/C++ Plugin_V
S1232

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

...