Change linux faccessat syscall definition to match actual linux one.

The AT_EACCESS and AT_SYMLINK_NOFOLLOW flags are actually implemented
within the glibc wrapper function for faccessat().  If either of these
flags are specified, then the wrapper function employs fstatat() to
determine access permissions.

Differential Revision:	https://reviews.freebsd.org/D1078
Reviewed by:	trasz
This commit is contained in:
Dmitry Chagin 2015-05-24 16:18:03 +00:00
parent e0d3ea8c65
commit baa232bbfd
4 changed files with 7 additions and 8 deletions

View File

@ -450,7 +450,7 @@
268 AUE_FCHMODAT STD { int linux_fchmodat(l_int dfd, const char *filename, \
l_mode_t mode); }
269 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, \
l_int amode, l_int flag); }
l_int amode); }
270 AUE_SELECT STD { int linux_pselect6(l_int nfds, \
l_fd_set *readfds, l_fd_set *writefds, l_fd_set *exceptfds, \
struct l_timespec *tsp, l_uintptr_t *sig); }

View File

@ -507,7 +507,8 @@
char *buf, l_int bufsiz); }
306 AUE_FCHMODAT STD { int linux_fchmodat(l_int dfd, const char *filename, \
l_mode_t mode); }
307 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, l_int amode, int flag); }
307 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, \
l_int amode); }
308 AUE_SELECT STD { int linux_pselect6(l_int nfds, l_fd_set *readfds, \
l_fd_set *writefds, l_fd_set *exceptfds, \
struct l_timespec *tsp, l_uintptr_t *sig); }

View File

@ -581,10 +581,8 @@ int
linux_faccessat(struct thread *td, struct linux_faccessat_args *args)
{
char *path;
int error, dfd, flag;
int error, dfd;
if (args->flag & ~LINUX_AT_EACCESS)
return (EINVAL);
/* linux convention */
if (args->amode & ~(F_OK | X_OK | W_OK | R_OK))
return (EINVAL);
@ -597,8 +595,7 @@ linux_faccessat(struct thread *td, struct linux_faccessat_args *args)
printf(ARGS(access, "%s, %d"), path, args->amode);
#endif
flag = (args->flag & LINUX_AT_EACCESS) == 0 ? 0 : AT_EACCESS;
error = kern_accessat(td, dfd, path, UIO_SYSSPACE, flag, args->amode);
error = kern_accessat(td, dfd, path, UIO_SYSSPACE, 0, args->amode);
LFREEPATH(path);
return (error);

View File

@ -515,7 +515,8 @@
char *buf, l_int bufsiz); }
306 AUE_FCHMODAT STD { int linux_fchmodat(l_int dfd, const char *filename, \
l_mode_t mode); }
307 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, l_int amode, l_int flag); }
307 AUE_FACCESSAT STD { int linux_faccessat(l_int dfd, const char *filename, \
l_int amode); }
308 AUE_SELECT STD { int linux_pselect6(l_int nfds, l_fd_set *readfds, \
l_fd_set *writefds, l_fd_set *exceptfds, \
struct l_timespec *tsp, l_uintptr_t *sig); }