aboutsummaryrefslogtreecommitdiffstats
path: root/fs/file_table.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/file_table.c')
-rw-r--r--fs/file_table.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/file_table.c b/fs/file_table.c
index 5ad0eca6eea2..0fbcacc3ea75 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -36,7 +36,9 @@ static struct percpu_counter nr_files __cacheline_aligned_in_smp;
36 36
37static inline void file_free_rcu(struct rcu_head *head) 37static inline void file_free_rcu(struct rcu_head *head)
38{ 38{
39 struct file *f = container_of(head, struct file, f_u.fu_rcuhead); 39 struct file *f = container_of(head, struct file, f_u.fu_rcuhead);
40
41 put_cred(f->f_cred);
40 kmem_cache_free(filp_cachep, f); 42 kmem_cache_free(filp_cachep, f);
41} 43}
42 44
@@ -94,7 +96,7 @@ int proc_nr_files(ctl_table *table, int write, struct file *filp,
94 */ 96 */
95struct file *get_empty_filp(void) 97struct file *get_empty_filp(void)
96{ 98{
97 struct task_struct *tsk; 99 const struct cred *cred = current_cred();
98 static int old_max; 100 static int old_max;
99 struct file * f; 101 struct file * f;
100 102
@@ -118,12 +120,10 @@ struct file *get_empty_filp(void)
118 if (security_file_alloc(f)) 120 if (security_file_alloc(f))
119 goto fail_sec; 121 goto fail_sec;
120 122
121 tsk = current;
122 INIT_LIST_HEAD(&f->f_u.fu_list); 123 INIT_LIST_HEAD(&f->f_u.fu_list);
123 atomic_long_set(&f->f_count, 1); 124 atomic_long_set(&f->f_count, 1);
124 rwlock_init(&f->f_owner.lock); 125 rwlock_init(&f->f_owner.lock);
125 f->f_uid = tsk->fsuid; 126 f->f_cred = get_cred(cred);
126 f->f_gid = tsk->fsgid;
127 eventpoll_init_file(f); 127 eventpoll_init_file(f);
128 /* f->f_version: 0 */ 128 /* f->f_version: 0 */
129 return f; 129 return f;