Author: dchagin
Date: Sun May 24 16:18:03 2015
New Revision: 283428
URL: https://svnweb.freebsd.org/changeset/base/283428

Log:
  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

Modified:
  head/sys/amd64/linux/syscalls.master
  head/sys/amd64/linux32/syscalls.master
  head/sys/compat/linux/linux_file.c
  head/sys/i386/linux/syscalls.master

Modified: head/sys/amd64/linux/syscalls.master
==============================================================================
--- head/sys/amd64/linux/syscalls.master        Sun May 24 16:14:41 2015        
(r283427)
+++ head/sys/amd64/linux/syscalls.master        Sun May 24 16:18:03 2015        
(r283428)
@@ -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); }

Modified: head/sys/amd64/linux32/syscalls.master
==============================================================================
--- head/sys/amd64/linux32/syscalls.master      Sun May 24 16:14:41 2015        
(r283427)
+++ head/sys/amd64/linux32/syscalls.master      Sun May 24 16:18:03 2015        
(r283428)
@@ -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); }

Modified: head/sys/compat/linux/linux_file.c
==============================================================================
--- head/sys/compat/linux/linux_file.c  Sun May 24 16:14:41 2015        
(r283427)
+++ head/sys/compat/linux/linux_file.c  Sun May 24 16:18:03 2015        
(r283428)
@@ -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, struc
                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);

Modified: head/sys/i386/linux/syscalls.master
==============================================================================
--- head/sys/i386/linux/syscalls.master Sun May 24 16:14:41 2015        
(r283427)
+++ head/sys/i386/linux/syscalls.master Sun May 24 16:18:03 2015        
(r283428)
@@ -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); }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to