All files and directories will be matched against entries taken from /data/local/perm_checker.conf, and any file/directory which fails the ruleset will cause an error message along with a corresponding explicit (fully specified and minimal) rule for that file/directory to be printed on stdout. If only the message "Passed." is printed on stdout, all files are correctly matched by perm_checker.conf. A file or directory will always fail the ruleset unless there is AT LEAST one matching rule. If there is an explicit (fully specified) <spec> matching the file or directory name, it will fail if and only if that explicit <spec> rule fails (i.e., other matching <spec> rules will be ignored). Otherwise, it will fail if _any_ matching wildcard or recursive <spec> rule fails to hold. Entries in the perm_checker.conf file are of the following form: <spec> <min_mode> <max_mode> <min_uid> <max_uid> <min_gid> <max_gid> Where <spec> is one of the following: A fully specified path name, which must end in / ex: /dev/ A fully specified filename, symlink, device node, etc. ex: /dev/tty0 A recursive path specification, which ends in /... ex: /dev/... A wildcard file specification, which ends in * ex: /dev/tty* By convention /dev/* will include all files directly in /dev/, but not files that are in subdirectories of /dev/, such as /dev/input/, unlike a recursive path specification. The wildcard notation * will never result in a match to a directory name. NOTE: Symbolic links are treated specially to prevent infinite recursion and simplify the ruleset. Symbolic links are ignored unless an explicit rule with the same name as the symlink exists, in which case the permissions on the rule must match the permissions on the symlink itself, not the target. <min_mode> is a numeric mode mask, and a mode will match it if and only if (min_mode & mode) == min_mode. <max_mode> is a numeric mode mask, and a mode will match it if and only if (max_mode | mode) == max_mode. <min_uid> may be either a numeric user id, or a user name (which must not start with a number). If it is a user name, getpwnam() will be used to translate it to a numeric user id. <max_uid>, <min_gid>, and <max_gid> have similar syntax to <min_uid>. -- Tips -- I recommend to use 19999 as the maximum uid/gid whenever any valid application uid/gid is acceptable. Once the test is installed, it can be executed via: adb shell perm_checker To get a list of all failing rules: adb shell perm_checker | grep "^# INFO #" | sort | uniq To get a fully specified set of rules for all failing files: adb shell perm_checker | grep -v "^#" NOTE: There may be failing files even if no rules have failed, since a file that does not match any rule is a failure.