SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode) { struct inode * inode; struct dentry * dentry; struct file * file; int err = -EBADF; struct iattr newattrs; file = fget(fd); if (!file) goto out; dentry = file->f_path.dentry; inode = dentry->d_inode; audit_inode(NULL, dentry); err = mnt_want_write(file->f_path.mnt); if (err) goto out_putf; mutex_lock(&inode->i_mutex); if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); mutex_unlock(&inode->i_mutex); mnt_drop_write(file->f_path.mnt); out_putf: fput(file); out: return err; }
SYSCALL_DEFINE2(fchmod, unsigned int, fd, umode_t, mode) { struct fd f = fdget(fd); int err = -EBADF; if (f.file) { audit_inode(NULL, f.file->f_path.dentry, 0); err = chmod_common(&f.file->f_path, mode); fdput(f); } return err; }
SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size) { struct file *f; ssize_t error = -EBADF; f = fget(fd); if (!f) return error; audit_inode(NULL, f->f_path.dentry); error = listxattr(f->f_path.dentry, list, size); fput(f); return error; }
SYSCALL_DEFINE2(fchmod, unsigned int, fd, umode_t, mode) { struct file * file; int err = -EBADF; file = fget(fd); if (file) { audit_inode(NULL, file->f_path.dentry); err = chmod_common(&file->f_path, mode); fput(file); } return err; }
asmlinkage ssize_t sys_fgetxattr(int fd, char __user *name, void __user *value, size_t size) { struct file *f; ssize_t error = -EBADF; f = fget(fd); if (!f) return error; audit_inode(NULL, f->f_path.dentry); error = getxattr(f->f_path.dentry, name, value, size); fput(f); return error; }
asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size) { struct file *f; ssize_t error = -EBADF; f = fget(fd); if (!f) return error; audit_inode(NULL, f->f_path.dentry); error = listxattr(f->f_path.dentry, list, size); fput(f); return error; }
SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name, void __user *, value, size_t, size) { struct file *f; ssize_t error = -EBADF; f = fget(fd); if (!f) return error; audit_inode(NULL, f->f_path.dentry); error = getxattr(f->f_path.dentry, name, value, size); fput(f); return error; }
asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) { struct file * file; int error = -EBADF; file = fget(fd); if (file) { struct dentry * dentry; dentry = file->f_dentry; audit_inode(NULL, dentry); error = chown_common(dentry, user, group); fput(file); } return error; }
asmlinkage long sys_fremovexattr(int fd, char __user *name) { struct file *f; struct dentry *dentry; int error = -EBADF; f = fget(fd); if (!f) return error; dentry = f->f_path.dentry; audit_inode(NULL, dentry); error = removexattr(dentry, name); fput(f); return error; }
asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) { struct file * file; int error = -EBADF; struct _dentry * dentry; file = fget(fd); if (!file) goto out; dentry = file_get_dentry(file); audit_inode(NULL, dentry->d_inode); error = chown_common(dentry, user, group); fput(file); out: return error; }
asmlinkage long sys_fsetxattr(int fd, char __user *name, void __user *value, size_t size, int flags) { struct file *f; struct dentry *dentry; int error = -EBADF; f = fget(fd); if (!f) return error; dentry = f->f_path.dentry; audit_inode(NULL, dentry); error = setxattr(dentry, name, value, size, flags); fput(f); return error; }
SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group) { struct fd f = fdget(fd); int error = -EBADF; if (!f.file) goto out; error = mnt_want_write_file(f.file); if (error) goto out_fput; audit_inode(NULL, f.file->f_path.dentry, 0); error = chown_common(&f.file->f_path, user, group); mnt_drop_write_file(f.file); out_fput: fdput(f); out: return error; }
SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name) { struct file *f; struct dentry *dentry; int error = -EBADF; f = fget(fd); if (!f) return error; dentry = f->f_path.dentry; audit_inode(NULL, dentry); error = mnt_want_write(f->f_path.mnt); if (!error) { error = removexattr(dentry, name); mnt_drop_write(f->f_path.mnt); } fput(f); return error; }
SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode) { struct inode * inode; struct dentry * dentry; struct file * file; int err = -EBADF; struct iattr newattrs; file = fget(fd); if (!file) goto out; //ASUS_BSP +++ Jimmy,Josh "remove fuse" if(strcmp(file->f_vfsmnt->mnt_mountpoint->d_iname,"sdcard")==0){ err = -ENOSYS; goto out_putf; } //ASUS_BSP --- Jimmy,Josh "remove fuse" dentry = file->f_path.dentry; inode = dentry->d_inode; audit_inode(NULL, dentry); err = mnt_want_write_file(file); if (err) goto out_putf; mutex_lock(&inode->i_mutex); err = security_path_chmod(dentry, file->f_vfsmnt, mode); if (err) goto out_unlock; if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); out_unlock: mutex_unlock(&inode->i_mutex); mnt_drop_write(file->f_path.mnt); out_putf: fput(file); out: return err; }
SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group) { struct file *file; int error = -EBADF, fput_needed; file = fget_light(fd, &fput_needed); if (!file) goto out; error = mnt_want_write_file(file); if (error) goto out_fput; audit_inode(NULL, file->f_path.dentry); error = chown_common(&file->f_path, user, group); mnt_drop_write_file(file); out_fput: fput_light(file, fput_needed); out: return error; }
SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name, const void __user *,value, size_t, size, int, flags) { struct file *f; struct dentry *dentry; int error = -EBADF; f = fget(fd); if (!f) return error; dentry = f->f_path.dentry; audit_inode(NULL, dentry); error = mnt_want_write(f->f_path.mnt); if (!error) { error = setxattr(dentry, name, value, size, flags); mnt_drop_write(f->f_path.mnt); } fput(f); return error; }
SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group) { struct file * file; int error = -EBADF; struct dentry * dentry; file = fget(fd); if (!file) goto out; error = mnt_want_write(file->f_path.mnt); if (error) goto out_fput; dentry = file->f_path.dentry; audit_inode(NULL, dentry); error = chown_common(dentry, user, group, file->f_path.mnt); mnt_drop_write(file->f_path.mnt); out_fput: fput(file); out: return error; }
asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) { struct file * file; int error = -EBADF; struct dentry * dentry; file = fget(fd); if (!file) goto out; error = mnt_want_write(file->f_path.mnt); if (error) goto out_fput; dentry = file->f_path.dentry; audit_inode(NULL, dentry); error = chown_common(dentry, user, group); mnt_drop_write(file->f_path.mnt); out_fput: fput(file); out: return error; }
asmlinkage long sys_fchmod(unsigned int fd, mode_t mode) { struct inode * inode; struct dentry * dentry; struct file * file; int err = -EBADF; struct iattr newattrs; file = fget(fd); if (!file) goto out; dentry = file->f_path.dentry; inode = dentry->d_inode; audit_inode(NULL, dentry); err = mnt_want_write(file->f_path.mnt); if (err) goto out_putf; err = -EPERM; if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) goto out_drop_write; mutex_lock(&inode->i_mutex); if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); mutex_unlock(&inode->i_mutex); out_drop_write: mnt_drop_write(file->f_path.mnt); out_putf: fput(file); out: return err; }
asmlinkage long sys_fchmod(unsigned int fd, mode_t mode) { struct _inode * inode; struct _dentry * dentry; struct file * file; int err = -EBADF; struct iattr newattrs; file = fget(fd); if (!file) goto out; dentry = file_get_dentry(file); inode = d_get_inode(dentry); audit_inode(NULL, inode); err = -EROFS; if (IS_RDONLY(inode)) goto out_putf; err = -EPERM; if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) goto out_putf; imutex_lock(parent(inode)); if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); imutex_unlock(parent(inode)); out_putf: fput(file); out: return err; }