xref: /minix3/external/bsd/llvm/dist/clang/test/Analysis/chroot.c (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
1 // RUN: %clang_cc1 -analyze -analyzer-checker=alpha.unix.Chroot -analyzer-store region -verify %s
2 
3 extern int chroot(const char* path);
4 extern int chdir(const char* path);
5 
foo(void)6 void foo(void) {
7 }
8 
f1(void)9 void f1(void) {
10   chroot("/usr/local"); // root changed.
11   foo(); // expected-warning {{No call of chdir("/") immediately after chroot}}
12 }
13 
f2(void)14 void f2(void) {
15   chroot("/usr/local"); // root changed.
16   chdir("/"); // enter the jail.
17   foo(); // no-warning
18 }
19 
f3(void)20 void f3(void) {
21   chroot("/usr/local"); // root changed.
22   chdir("../"); // change working directory, still out of jail.
23   foo(); // expected-warning {{No call of chdir("/") immediately after chroot}}
24 }
25