diff options
Diffstat (limited to 'libsandbox/wrapper-funcs/__openat_2.c')
-rw-r--r-- | libsandbox/wrapper-funcs/__openat_2.c | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/libsandbox/wrapper-funcs/__openat_2.c b/libsandbox/wrapper-funcs/__openat_2.c index b7a6e09..4549a23 100644 --- a/libsandbox/wrapper-funcs/__openat_2.c +++ b/libsandbox/wrapper-funcs/__openat_2.c @@ -9,40 +9,16 @@ # define WRAPPER_ARGS_PROTO int dirfd, const char *pathname, int flags # define WRAPPER_ARGS dirfd, pathname, flags # define WRAPPER_SAFE() SB_SAFE_OPEN_INT_AT(dirfd, pathname, flags) -# define USE_AT 1 #else -# define USE_AT 0 +# define dirfd AT_FDCWD #endif -#ifndef PRE_CHECK_FUNC -# define _PRE_CHECK_FUNC(x) sb_##x##_pre_check -# define PRE_CHECK_FUNC(x) _PRE_CHECK_FUNC(x) -#endif -static inline bool PRE_CHECK_FUNC(WRAPPER_NAME)(WRAPPER_ARGS_PROTO) -{ - if (!(flags & O_CREAT)) { - /* If we're not trying to create, fail normally if - * file does not stat - */ -#if USE_AT - if (dirfd == AT_FDCWD || pathname[0] == '/') +#ifdef SB64 +# define WRAPPER_PRE_CHECKS() sb_openat64_pre_check(STRING_NAME, pathname, dirfd, flags) +#else +# define WRAPPER_PRE_CHECKS() sb_openat_pre_check(STRING_NAME, pathname, dirfd, flags) #endif -#undef USE_AT - { - struct stat st; - save_errno(); - if (-1 == stat(pathname, &st)) { - if (is_env_on(ENV_SANDBOX_DEBUG)) - SB_EINFO("EARLY FAIL", " %s(%s): %s\n", - STRING_NAME, pathname, strerror(errno)); - return false; - } - restore_errno(); - } - } - - return true; -} -#define WRAPPER_PRE_CHECKS() PRE_CHECK_FUNC(WRAPPER_NAME)(WRAPPER_ARGS) #include "__wrapper_simple.c" + +#undef dirfd |