================
@@ -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 *)
----------------
vabridgers wrote:
The checker looks for unexpected usages of chdir() that follow an invocation of
chroot(), so at the point of detecting an unexpected use of chdir() I want to
produce an improved warning that includes a "note" about where chroot() was
called. So I stored the Chroot expression with the intent of using it for the
warning message. But your comments have got me thinking about simplifying all
of this, so will look at doing that. If you have suggestions about simplest and
best way, I'd be grateful to hear those. BTW, this pattern also exists in a
different checker (cannot remember which one now).
https://github.com/llvm/llvm-project/pull/117791
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits