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