Lines Matching full:state
47 ProgramStateRef evalAssume(ProgramStateRef State, SVal Cond,
51 void processSetuid(ProgramStateRef State, const CallEvent &Call,
53 void processSetgid(ProgramStateRef State, const CallEvent &Call,
55 void processOther(ProgramStateRef State, const CallEvent &Call,
61 void emitReport(ProgramStateRef State, CheckerContext &C) const;
80 ProgramStateRef State = C.getState(); in REGISTER_TRAIT_WITH_PROGRAMSTATE() local
82 processSetuid(State, Call, C); in REGISTER_TRAIT_WITH_PROGRAMSTATE()
84 processSetgid(State, Call, C); in REGISTER_TRAIT_WITH_PROGRAMSTATE()
86 processOther(State, Call, C); in REGISTER_TRAIT_WITH_PROGRAMSTATE()
90 ProgramStateRef SetgidSetuidOrderChecker::evalAssume(ProgramStateRef State, in evalAssume() argument
93 SValBuilder &SVB = State->getStateManager().getSValBuilder(); in evalAssume()
94 SymbolRef LastSetuidSym = State->get<LastSetuidCallSVal>(); in evalAssume()
96 return State; in evalAssume()
104 SVB.evalBinOpNN(State, BO_NE, nonloc::SymbolVal(LastSetuidSym), in evalAssume()
109 return State; in evalAssume()
110 if (auto IsFailBranch = State->assume(*FailComparison); in evalAssume()
114 State = State->set<LastSetPrivilegeCall>(Irrelevant); in evalAssume()
115 State = State->set<LastSetuidCallSVal>(SymbolRef{}); in evalAssume()
117 return State; in evalAssume()
120 void SetgidSetuidOrderChecker::processSetuid(ProgramStateRef State, in processSetuid() argument
124 if (State->get<LastSetPrivilegeCall>() != Setgid && IsSetuidWithGetuid) { in processSetuid()
126 State = State->set<LastSetPrivilegeCall>(Setuid); in processSetuid()
127 State = State->set<LastSetuidCallSVal>(RetSym); in processSetuid()
134 C.addTransition(State, Note); in processSetuid()
137 State = State->set<LastSetPrivilegeCall>(Irrelevant); in processSetuid()
138 State = State->set<LastSetuidCallSVal>(SymbolRef{}); in processSetuid()
139 C.addTransition(State); in processSetuid()
142 void SetgidSetuidOrderChecker::processSetgid(ProgramStateRef State, in processSetgid() argument
146 if (State->get<LastSetPrivilegeCall>() == Setuid) { in processSetgid()
148 State = State->set<LastSetPrivilegeCall>(Irrelevant); in processSetgid()
149 emitReport(State, C); in processSetgid()
152 State = State->set<LastSetPrivilegeCall>(Irrelevant); in processSetgid()
154 State = State->set<LastSetPrivilegeCall>(IsSetgidWithGetgid ? Setgid in processSetgid()
157 State = State->set<LastSetuidCallSVal>(SymbolRef{}); in processSetgid()
158 C.addTransition(State); in processSetgid()
161 void SetgidSetuidOrderChecker::processOther(ProgramStateRef State, in processOther() argument
164 State = State->set<LastSetuidCallSVal>(SymbolRef{}); in processOther()
165 State = State->set<LastSetPrivilegeCall>(Irrelevant); in processOther()
166 C.addTransition(State); in processOther()
177 void SetgidSetuidOrderChecker::emitReport(ProgramStateRef State, in emitReport() argument
179 if (ExplodedNode *N = C.generateNonFatalErrorNode(State)) { in emitReport()
185 Report->markInteresting(State->get<LastSetuidCallSVal>()); in emitReport()