Commit ccfa72b7dae809973f67dfd3d50795a311ecd7b7

Authored by ths
1 parent 75ac37a0

linux-user fchownat() syscall, by Thayne Harbaugh.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3220 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 20 additions and 0 deletions
linux-user/syscall.c
... ... @@ -139,6 +139,7 @@ type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
139 139  
140 140  
141 141 #define __NR_sys_uname __NR_uname
  142 +#define __NR_sys_fchownat __NR_fchownat
142 143 #define __NR_sys_getcwd1 __NR_getcwd
143 144 #define __NR_sys_getdents __NR_getdents
144 145 #define __NR_sys_getdents64 __NR_getdents64
... ... @@ -162,6 +163,10 @@ static int gettid(void) {
162 163 }
163 164 #endif
164 165 _syscall1(int,sys_uname,struct new_utsname *,buf)
  166 +#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat)
  167 +_syscall5(int,sys_fchownat,int,dirfd,const char *,pathname,
  168 + uid_t,owner,gid_t,group,int,flags)
  169 +#endif
165 170 _syscall2(int,sys_getcwd1,char *,buf,size_t,size)
166 171 _syscall3(int, sys_getdents, uint, fd, struct dirent *, dirp, uint, count);
167 172 #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
... ... @@ -4293,6 +4298,21 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
4293 4298 case TARGET_NR_fchown:
4294 4299 ret = get_errno(fchown(arg1, low2highuid(arg2), low2highgid(arg3)));
4295 4300 break;
  4301 +#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat)
  4302 + case TARGET_NR_fchownat:
  4303 + if (!arg2) {
  4304 + ret = -EFAULT;
  4305 + goto fail;
  4306 + }
  4307 + p = lock_user_string(arg2);
  4308 + if (!access_ok(VERIFY_READ, p, 1))
  4309 + ret = -EFAULT;
  4310 + else
  4311 + ret = get_errno(sys_fchownat(arg1, p, low2highuid(arg3), low2highgid(arg4), arg5));
  4312 + if (p)
  4313 + unlock_user(p, arg2, 0);
  4314 + break;
  4315 +#endif
4296 4316 #ifdef TARGET_NR_setresuid
4297 4317 case TARGET_NR_setresuid:
4298 4318 ret = get_errno(setresuid(low2highuid(arg1),
... ...