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

LDRALDRA232 S, of pointer
  • Invalid free of pointer
  • Deallocation previously deallocated

    Rule partially covered.

     

    2110, 2111, 2112, 2113, 2118,

    3337, 3339, 4262, 4263, 4264

    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.FNHDF
    ALLOC.TM

    ALLOC.LEAK

    Double freeFree non-heap variable
    Type mismatch
    Leak
    Helix QACLDRA tool suite

    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
    PRQA QA-C++
    Include Page
    PRQA QA-C++_VPRQA QA-C++_V
    • 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.

    ...