mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
move put_unused_fd() and fd_install() to fs/file.c
Change-Id: I38181db167e8c6222c84f62d8d0658e260b7ceb8 Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
b66d20fae3
commit
e25ec45dc3
2 changed files with 44 additions and 44 deletions
44
fs/file.c
44
fs/file.c
|
@ -487,3 +487,47 @@ int get_unused_fd_flags(unsigned flags)
|
|||
return __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags);
|
||||
}
|
||||
EXPORT_SYMBOL(get_unused_fd_flags);
|
||||
|
||||
static void __put_unused_fd(struct files_struct *files, unsigned int fd)
|
||||
{
|
||||
struct fdtable *fdt = files_fdtable(files);
|
||||
__clear_open_fd(fd, fdt);
|
||||
if (fd < files->next_fd)
|
||||
files->next_fd = fd;
|
||||
}
|
||||
|
||||
void put_unused_fd(unsigned int fd)
|
||||
{
|
||||
struct files_struct *files = current->files;
|
||||
spin_lock(&files->file_lock);
|
||||
__put_unused_fd(files, fd);
|
||||
spin_unlock(&files->file_lock);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(put_unused_fd);
|
||||
|
||||
/*
|
||||
* Install a file pointer in the fd array.
|
||||
*
|
||||
* The VFS is full of places where we drop the files lock between
|
||||
* setting the open_fds bitmap and installing the file in the file
|
||||
* array. At any such point, we are vulnerable to a dup2() race
|
||||
* installing a file in the array before us. We need to detect this and
|
||||
* fput() the struct file we are about to overwrite in this case.
|
||||
*
|
||||
* It should never happen - if we allow dup2() do it, _really_ bad things
|
||||
* will follow.
|
||||
*/
|
||||
|
||||
void fd_install(unsigned int fd, struct file *file)
|
||||
{
|
||||
struct files_struct *files = current->files;
|
||||
struct fdtable *fdt;
|
||||
spin_lock(&files->file_lock);
|
||||
fdt = files_fdtable(files);
|
||||
BUG_ON(fdt->fd[fd] != NULL);
|
||||
rcu_assign_pointer(fdt->fd[fd], file);
|
||||
spin_unlock(&files->file_lock);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(fd_install);
|
||||
|
|
44
fs/open.c
44
fs/open.c
|
@ -865,50 +865,6 @@ struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags,
|
|||
}
|
||||
EXPORT_SYMBOL(dentry_open);
|
||||
|
||||
static void __put_unused_fd(struct files_struct *files, unsigned int fd)
|
||||
{
|
||||
struct fdtable *fdt = files_fdtable(files);
|
||||
__clear_open_fd(fd, fdt);
|
||||
if (fd < files->next_fd)
|
||||
files->next_fd = fd;
|
||||
}
|
||||
|
||||
void put_unused_fd(unsigned int fd)
|
||||
{
|
||||
struct files_struct *files = current->files;
|
||||
spin_lock(&files->file_lock);
|
||||
__put_unused_fd(files, fd);
|
||||
spin_unlock(&files->file_lock);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(put_unused_fd);
|
||||
|
||||
/*
|
||||
* Install a file pointer in the fd array.
|
||||
*
|
||||
* The VFS is full of places where we drop the files lock between
|
||||
* setting the open_fds bitmap and installing the file in the file
|
||||
* array. At any such point, we are vulnerable to a dup2() race
|
||||
* installing a file in the array before us. We need to detect this and
|
||||
* fput() the struct file we are about to overwrite in this case.
|
||||
*
|
||||
* It should never happen - if we allow dup2() do it, _really_ bad things
|
||||
* will follow.
|
||||
*/
|
||||
|
||||
void fd_install(unsigned int fd, struct file *file)
|
||||
{
|
||||
struct files_struct *files = current->files;
|
||||
struct fdtable *fdt;
|
||||
spin_lock(&files->file_lock);
|
||||
fdt = files_fdtable(files);
|
||||
BUG_ON(fdt->fd[fd] != NULL);
|
||||
rcu_assign_pointer(fdt->fd[fd], file);
|
||||
spin_unlock(&files->file_lock);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(fd_install);
|
||||
|
||||
static inline int build_open_flags(int flags, umode_t mode, struct open_flags *op)
|
||||
{
|
||||
int lookup_flags = 0;
|
||||
|
|
Loading…
Reference in a new issue