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:
parent
e0d3ea8c65
commit
baa232bbfd
@ -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); }
|
||||
|
@ -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); }
|
||||
|
@ -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);
|
||||
|
@ -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); }
|
||||
|
Loading…
Reference in New Issue
Block a user