[klee-dev] FilePerm.c test fails
Emil Rakadjiev
emil.rakadjiev.bf at hitachi.com
Thu Sep 25 06:02:01 BST 2014
Hello,
In the meantime, I found out under what circumstances the FilePerm.c
test fails. The problem is compiler-dependent and occurs with LLVM 2.9,
but not with LLVM 3.4.
The part of the code that is relevant for this test case is in the
has_permission() method in runtime/POSIX/fd.c (this method is called by
__fd_open()). At the end of has_permission() there are the following two
checks:
if (read_access && ((mode & S_IRUSR) | (mode & S_IRGRP) | (mode & S_IROTH)))
return 0;
if (write_access && !((mode & S_IWUSR) | (mode & S_IWGRP) | (mode &
S_IWOTH)))
return 0;
Since the method is called with a symbolic file's symbolic stat (and
thus the mode in stat is symbolic, too), and the file is opened with
O_RDWR (so both read_access and write_access are true), the following 3
paths are explored:
1) open() succeeds: first if's condition is false, second if's condition
is false -> has_permission() returns 1 -> __fd_open()/open() returns
non-negative fd
2) open() fails: first if's condition is true -> has_permission()
returns 0 -> __fd_open()/open() returns -1
3) open() fails: first if's condition is false, second if's condition is
true -> has_permission() returns 0 -> __fd_open()/open() returns -1
But if a debug build of KLEE is built according to the instructions in
the developer's guide, namely using CXXFLAGS="-g -O0" CFLAGS="-g -O0",
then path 3 is not explored, thus only 2 test cases are generated and
FilePerm.c fails.
I've tested this on Ubuntu 14.04 with LLVM 2.9 (LLVM-GCC 4.2), STP r-940
and upstream, klee-uclibc klee_0_9_29, and KLEE revisions e87af57 and
547dd6f (the current newest one).
As mentioned above, with LLVM 3.4 (Clang 3.4) the error does not occur.
Best regards,
Emil
More information about the klee-dev
mailing list