|
Static Value-Flow Analysis
|
#include <DoubleFreeChecker.h>
Public Member Functions | |
| DoubleFreeChecker () | |
| Constructor. | |
| virtual | ~DoubleFreeChecker () |
| Destructor. | |
| virtual bool | runOnModule (SVFIR *pag) override |
| We start from here. | |
| void | reportBug (ProgSlice *slice) override |
| Report file/close bugs. | |
| void | testsValidation (ProgSlice *slice) |
| Validate test cases for regression test purpose. | |
| void | validateSuccessTests (ProgSlice *slice, const FunObjVar *fun) |
| void | validateExpectedFailureTests (ProgSlice *slice, const FunObjVar *fun) |
| Public Member Functions inherited from SVF::LeakChecker | |
| LeakChecker () | |
| Constructor. | |
| virtual | ~LeakChecker () |
| Destructor. | |
| virtual void | initSrcs () override |
| Initialize sources and sinks. | |
| virtual void | initSnks () override |
| virtual bool | isSourceLikeFun (const FunObjVar *fun) override |
| Whether the function is a heap allocator/reallocator (allocate memory). | |
| virtual bool | isSinkLikeFun (const FunObjVar *fun) override |
| Whether the function is a heap deallocator (free/release memory). | |
| Public Member Functions inherited from SVF::SrcSnkDDA | |
| SrcSnkDDA () | |
| Bug Reporter. | |
| ~SrcSnkDDA () override | |
| Destructor. | |
| virtual void | analyze () |
| Start analysis here. | |
| virtual void | initialize () |
| Initialize analysis. | |
| virtual void | finalize () |
| Finalize analysis. | |
| SVFIR * | getPAG () const |
| Get SVFIR. | |
| const SVFG * | getSVFG () const |
| Get SVFG. | |
| CallGraph * | getCallgraph () const |
| Get Callgraph. | |
| bool | isGlobalSVFGNode (const SVFGNode *node) const |
| Whether this svfg node may access global variable. | |
| virtual void | setCurSlice (const SVFGNode *src) |
| Slice operations. | |
| ProgSlice * | getCurSlice () const |
| void | addSinkToCurSlice (const SVFGNode *node) |
| bool | isInCurForwardSlice (const SVFGNode *node) |
| bool | isInCurBackwardSlice (const SVFGNode *node) |
| void | addToCurForwardSlice (const SVFGNode *node) |
| void | addToCurBackwardSlice (const SVFGNode *node) |
| bool | isInAWrapper (const SVFGNode *src, CallSiteSet &csIdSet) |
| Identify allocation wrappers. | |
| const SVFGNodeSet & | getSources () const |
| Get sources/sinks. | |
| SVFGNodeSetIter | sourcesBegin () const |
| SVFGNodeSetIter | sourcesEnd () const |
| void | addToSources (const SVFGNode *node) |
| const SVFGNodeSet & | getSinks () const |
| SVFGNodeSetIter | sinksBegin () const |
| SVFGNodeSetIter | sinksEnd () const |
| void | addToSinks (const SVFGNode *node) |
| SaberCondAllocator * | getSaberCondAllocator () const |
| Get saber condition allocator. | |
| const SVFBugReport & | getBugReport () const |
| bool | isSource (const SVFGNode *node) const |
| bool | isSink (const SVFGNode *node) const |
Additional Inherited Members | |
| Public Types inherited from SVF::LeakChecker | |
| enum | LEAK_TYPE { NEVER_FREE_LEAK , CONTEXT_LEAK , PATH_LEAK , GLOBAL_LEAK } |
| typedef Map< const SVFGNode *, const CallICFGNode * > | SVFGNodeToCSIDMap |
| typedef FIFOWorkList< const CallICFGNode * > | CSWorkList |
| typedef ProgSlice::VFWorkList | WorkList |
| typedef NodeBS | SVFGNodeBS |
| Public Types inherited from SVF::SrcSnkDDA | |
| typedef ProgSlice::SVFGNodeSet | SVFGNodeSet |
| typedef Map< const SVFGNode *, ProgSlice * > | SVFGNodeToSliceMap |
| typedef SVFGNodeSet::const_iterator | SVFGNodeSetIter |
| typedef CxtDPItem | DPIm |
| typedef Set< DPIm > | DPImSet |
| dpitem set | |
| typedef Map< const SVFGNode *, DPImSet > | SVFGNodeToDPItemsMap |
| map a SVFGNode to its visited dpitems | |
| typedef Set< const CallICFGNode * > | CallSiteSet |
| typedef NodeBS | SVFGNodeBS |
| typedef ProgSlice::VFWorkList | WorkList |
| Public Types inherited from SVF::GraphReachSolver< SVFG *, CxtDPItem > | |
| typedef SVF::GenericGraphTraits< SVFG * > | GTraits |
| Define the GTraits and node iterator. | |
| typedef GTraits::NodeType | GNODE |
| typedef GTraits::EdgeType | GEDGE |
| typedef GTraits::nodes_iterator | node_iterator |
| typedef GTraits::ChildIteratorType | child_iterator |
| typedef SVF::GenericGraphTraits< SVF::Inverse< GNODE * > > | InvGTraits |
| Define inverse GTraits and note iterator. | |
| typedef InvGTraits::ChildIteratorType | inv_child_iterator |
| typedef FIFOWorkList< CxtDPItem > | WorkList |
| Define worklist. | |
| Protected Member Functions inherited from SVF::LeakChecker | |
| void | testsValidation (const ProgSlice *slice) |
| Validate test cases for regression test purpose. | |
| void | validateSuccessTests (const SVFGNode *source, const FunObjVar *fun) |
| void | validateExpectedFailureTests (const SVFGNode *source, const FunObjVar *fun) |
| void | addSrcToCSID (const SVFGNode *src, const CallICFGNode *cs) |
| Record a source to its callsite. | |
| const CallICFGNode * | getSrcCSID (const SVFGNode *src) |
| Protected Member Functions inherited from SVF::SrcSnkDDA | |
| void | FWProcessCurNode (const DPIm &item) override |
| Forward traverse. | |
| void | BWProcessCurNode (const DPIm &item) override |
| Backward traverse. | |
| void | FWProcessOutgoingEdge (const DPIm &item, SVFGEdge *edge) override |
| Propagate information forward by matching context. | |
| void | BWProcessIncomingEdge (const DPIm &item, SVFGEdge *edge) override |
| Propagate information backward without matching context, as forward analysis already did it. | |
| bool | forwardVisited (const SVFGNode *node, const DPIm &item) |
| Whether has been visited or not, in order to avoid recursion on SVFG. | |
| void | addForwardVisited (const SVFGNode *node, const DPIm &item) |
| bool | backwardVisited (const SVFGNode *node) |
| void | addBackwardVisited (const SVFGNode *node) |
| void | clearVisitedMap () |
| virtual bool | isAllPathReachable () |
| Whether it is all path reachable from a source. | |
| virtual bool | isSomePathReachable () |
| Whether it is some path reachable from a source. | |
| void | dumpSlices () |
| Dump SVFG with annotated slice information. | |
| void | annotateSlice (ProgSlice *slice) |
| void | printZ3Stat () |
| Protected Member Functions inherited from SVF::GraphReachSolver< SVFG *, CxtDPItem > | |
| GraphReachSolver () | |
| Constructor. | |
| virtual | ~GraphReachSolver () |
| Destructor. | |
| const SVFG * | graph () const |
| Get/Set graph methods. | |
| void | setGraph (SVFG *g) |
| GNODE * | getNode (NodeID id) const |
| virtual NodeID | getNodeIDFromItem (const CxtDPItem &item) const |
| virtual void | forwardTraverse (CxtDPItem &it) |
| CFL forward traverse solve. | |
| virtual void | backwardTraverse (CxtDPItem &it) |
| CFL forward traverse solve. | |
| virtual void | FWProcessOutgoingEdge (const CxtDPItem &item, GEDGE *edge) |
| Propagation for the solving, to be implemented in the child class. | |
| virtual void | BWProcessIncomingEdge (const CxtDPItem &item, GEDGE *edge) |
| CxtDPItem | popFromWorklist () |
| Worklist operations. | |
| bool | pushIntoWorklist (CxtDPItem &item) |
| bool | isWorklistEmpty () |
| bool | isInWorklist (CxtDPItem &item) |
| Protected Attributes inherited from SVF::SrcSnkDDA | |
| SaberSVFGBuilder | memSSA |
| SVFG * | svfg |
| CallGraph * | callgraph |
| SVFBugReport | report |
Double free checker to check deallocations of memory
Definition at line 42 of file DoubleFreeChecker.h.
|
inline |
|
inlinevirtual |
|
overridevirtual |
Report file/close bugs.
Reimplemented from SVF::LeakChecker.
Definition at line 37 of file DoubleFreeChecker.cpp.
|
inlineoverridevirtual |
We start from here.
start analysis
Reimplemented from SVF::LeakChecker.
Definition at line 57 of file DoubleFreeChecker.h.
| void DoubleFreeChecker::testsValidation | ( | ProgSlice * | slice | ) |
Validate test cases for regression test purpose.
Definition at line 54 of file DoubleFreeChecker.cpp.
output safe but should be double free
output double free but should be safe
Definition at line 121 of file DoubleFreeChecker.cpp.
Definition at line 65 of file DoubleFreeChecker.cpp.