================ @@ -24,21 +26,30 @@ using namespace clang; using namespace ento; -namespace { - // enum value that represent the jail state -enum Kind { NO_CHROOT, ROOT_CHANGED, JAIL_ENTERED }; +enum ChrootKind { NO_CHROOT, ROOT_CHANGED, ROOT_CHANGE_FAILED, JAIL_ENTERED }; -bool isRootChanged(intptr_t k) { return k == ROOT_CHANGED; } -//bool isJailEntered(intptr_t k) { return k == JAIL_ENTERED; } +// Track chroot state changes for success, failure, state change +// and "jail" +REGISTER_TRAIT_WITH_PROGRAMSTATE(ChrootState, ChrootKind) + +// Track the call expression to chroot for accurate +// warning messages +REGISTER_TRAIT_WITH_PROGRAMSTATE(ChrootCall, const Expr *) ---------------- steakhal wrote:
Why do we need this metadata? I thought we can already infer this from the State by looking at the exploded node where we changed `ChrootState`, grab the ProgramPoint as a `StmtPoint` and get the Stmt of it. That will be a CallExpr you were looking for. This should hold because the checker only "acts on" the `eval::Call` and `check::PreCall` events, so transitions can only happen in a `Stmt` ProgramPoint location. https://github.com/llvm/llvm-project/pull/117791 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits