Skip to content

Commit 49f3310

Browse files
authored
Fix taint analysis (#648)
* Move Source/Sink/Sanitizer handling from CTR to Summary FF preventing those functions from being analyzed * Fix TA summary FF * Add insertvalue and bitcast handling * Improve alias-handling in TA * minor style
1 parent f1c5865 commit 49f3310

File tree

3 files changed

+177
-142
lines changed

3 files changed

+177
-142
lines changed

include/phasar/PhasarLLVM/DataFlow/IfdsIde/LLVMFlowFunctions.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,12 @@ mapFactsToCallee(const llvm::CallBase *CallSite, const llvm::Function *DestFun,
179179
llvm::Function::const_arg_iterator ParamIt = DestFun->arg_begin();
180180
llvm::Function::const_arg_iterator ParamEnd = DestFun->arg_end();
181181

182+
if (ParamIt != ParamEnd && (*ParamIt).hasStructRetAttr()) {
183+
// sret parameters are writeonly
184+
++ParamIt;
185+
++ArgIt;
186+
}
187+
182188
for (; ParamIt != ParamEnd; ++ParamIt, ++ArgIt) {
183189
if (std::invoke(PropArg, ArgIt->get(), Source)) {
184190
Res.insert(std::invoke(FactConstructor, &*ParamIt));

include/phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/IFDSTaintAnalysis.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ class IFDSTaintAnalysis
9898
bool isSanitizerCall(const llvm::CallBase *CB,
9999
const llvm::Function *Callee) const;
100100

101-
void populateWithMayAliases(std::set<d_t> &Facts) const;
102-
void populateWithMustAliases(std::set<d_t> &Facts) const;
101+
void populateWithMayAliases(container_type &Facts,
102+
const llvm::Instruction *Context) const;
103+
void populateWithMustAliases(container_type &Facts,
104+
const llvm::Instruction *Context) const;
103105
};
104106
} // namespace psr
105107

0 commit comments

Comments
 (0)