|
@@ -645,8 +645,8 @@ retry_deleg:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user,
|
|
|
- gid_t, group, int, flag)
|
|
|
+int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group,
|
|
|
+ int flag)
|
|
|
{
|
|
|
struct path path;
|
|
|
int error = -EINVAL;
|
|
@@ -677,18 +677,24 @@ out:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
+SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user,
|
|
|
+ gid_t, group, int, flag)
|
|
|
+{
|
|
|
+ return do_fchownat(dfd, filename, user, group, flag);
|
|
|
+}
|
|
|
+
|
|
|
SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group)
|
|
|
{
|
|
|
- return sys_fchownat(AT_FDCWD, filename, user, group, 0);
|
|
|
+ return do_fchownat(AT_FDCWD, filename, user, group, 0);
|
|
|
}
|
|
|
|
|
|
SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group)
|
|
|
{
|
|
|
- return sys_fchownat(AT_FDCWD, filename, user, group,
|
|
|
- AT_SYMLINK_NOFOLLOW);
|
|
|
+ return do_fchownat(AT_FDCWD, filename, user, group,
|
|
|
+ AT_SYMLINK_NOFOLLOW);
|
|
|
}
|
|
|
|
|
|
-SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
|
|
|
+int ksys_fchown(unsigned int fd, uid_t user, gid_t group)
|
|
|
{
|
|
|
struct fd f = fdget(fd);
|
|
|
int error = -EBADF;
|
|
@@ -708,6 +714,11 @@ out:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
+SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
|
|
|
+{
|
|
|
+ return ksys_fchown(fd, user, group);
|
|
|
+}
|
|
|
+
|
|
|
int open_check_o_direct(struct file *f)
|
|
|
{
|
|
|
/* NB: we're sure to have correct a_ops only after f_op->open */
|