diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-06-04 00:19:20 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-06-04 00:19:20 -0400 |
commit | 70f148095b7b9acd4e8329da0766aadc88b017d8 (patch) | |
tree | f9c69308721da245f85bf0f09dfffc6234d9ab61 /libsandbox/wrapper-funcs/fopen_pre_check.c | |
parent | libsandbox: make sure fopen64 uses 64bit funcs (diff) | |
download | sandbox-70f148095b7b9acd4e8329da0766aadc88b017d8.tar.gz sandbox-70f148095b7b9acd4e8329da0766aadc88b017d8.tar.bz2 sandbox-70f148095b7b9acd4e8329da0766aadc88b017d8.zip |
libsandbox: add pre checks to static tracing
The normal wrapped functions go through some "pre checks" where certain
normal conditions are not flagged as problematic. The static tracing
lacked those pre checks though.
URL: http://bugs.gentoo.org/265885
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Reported-by: Daniel Robbins <drobbins@funtoo.org>
Diffstat (limited to 'libsandbox/wrapper-funcs/fopen_pre_check.c')
-rw-r--r-- | libsandbox/wrapper-funcs/fopen_pre_check.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libsandbox/wrapper-funcs/fopen_pre_check.c b/libsandbox/wrapper-funcs/fopen_pre_check.c new file mode 100644 index 0000000..9ee3b60 --- /dev/null +++ b/libsandbox/wrapper-funcs/fopen_pre_check.c @@ -0,0 +1,26 @@ +/* + * fopen() pre-check. + * + * Copyright 1999-2009 Gentoo Foundation + * Licensed under the GPL-2 + */ + +bool sb_fopen_pre_check(const char *func, const char *pathname, const char *mode) +{ + if ((NULL != mode) && (mode[0] == 'r')) { + save_errno(); + + /* If we're trying to read, fail normally if file does not stat */ + struct stat st; + if (-1 == stat(pathname, &st)) { + if (is_env_on(ENV_SANDBOX_DEBUG)) + SB_EINFO("EARLY FAIL", " %s(%s): %s\n", + func, pathname, strerror(errno)); + return false; + } + + restore_errno(); + } + + return true; +} |