fs: Expand __receive_fd() to accept existing fd
[linux-2.6-microblaze.git] / fs / file.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  linux/fs/file.c
4  *
5  *  Copyright (C) 1998-1999, Stephen Tweedie and Bill Hawes
6  *
7  *  Manage the dynamic fd arrays in the process files_struct.
8  */
9
10 #include <linux/syscalls.h>
11 #include <linux/export.h>
12 #include <linux/fs.h>
13 #include <linux/mm.h>
14 #include <linux/sched/signal.h>
15 #include <linux/slab.h>
16 #include <linux/file.h>
17 #include <linux/fdtable.h>
18 #include <linux/bitops.h>
19 #include <linux/spinlock.h>
20 #include <linux/rcupdate.h>
21 #include <net/sock.h>
22
23 unsigned int sysctl_nr_open __read_mostly = 1024*1024;
24 unsigned int sysctl_nr_open_min = BITS_PER_LONG;
25 /* our min() is unusable in constant expressions ;-/ */
26 #define __const_min(x, y) ((x) < (y) ? (x) : (y))
27 unsigned int sysctl_nr_open_max =
28         __const_min(INT_MAX, ~(size_t)0/sizeof(void *)) & -BITS_PER_LONG;
29
30 static void __free_fdtable(struct fdtable *fdt)
31 {
32         kvfree(fdt->fd);
33         kvfree(fdt->open_fds);
34         kfree(fdt);
35 }
36
37 static void free_fdtable_rcu(struct rcu_head *rcu)
38 {
39         __free_fdtable(container_of(rcu, struct fdtable, rcu));
40 }
41
42 #define BITBIT_NR(nr)   BITS_TO_LONGS(BITS_TO_LONGS(nr))
43 #define BITBIT_SIZE(nr) (BITBIT_NR(nr) * sizeof(long))
44
45 /*
46  * Copy 'count' fd bits from the old table to the new table and clear the extra
47  * space if any.  This does not copy the file pointers.  Called with the files
48  * spinlock held for write.
49  */
50 static void copy_fd_bitmaps(struct fdtable *nfdt, struct fdtable *ofdt,
51                             unsigned int count)
52 {
53         unsigned int cpy, set;
54
55         cpy = count / BITS_PER_BYTE;
56         set = (nfdt->max_fds - count) / BITS_PER_BYTE;
57         memcpy(nfdt->open_fds, ofdt->open_fds, cpy);
58         memset((char *)nfdt->open_fds + cpy, 0, set);
59         memcpy(nfdt->close_on_exec, ofdt->close_on_exec, cpy);
60         memset((char *)nfdt->close_on_exec + cpy, 0, set);
61
62         cpy = BITBIT_SIZE(count);
63         set = BITBIT_SIZE(nfdt->max_fds) - cpy;
64         memcpy(nfdt->full_fds_bits, ofdt->full_fds_bits, cpy);
65         memset((char *)nfdt->full_fds_bits + cpy, 0, set);
66 }
67
68 /*
69  * Copy all file descriptors from the old table to the new, expanded table and
70  * clear the extra space.  Called with the files spinlock held for write.
71  */
72 static void copy_fdtable(struct fdtable *nfdt, struct fdtable *ofdt)
73 {
74         size_t cpy, set;
75
76         BUG_ON(nfdt->max_fds < ofdt->max_fds);
77
78         cpy = ofdt->max_fds * sizeof(struct file *);
79         set = (nfdt->max_fds - ofdt->max_fds) * sizeof(struct file *);
80         memcpy(nfdt->fd, ofdt->fd, cpy);
81         memset((char *)nfdt->fd + cpy, 0, set);
82
83         copy_fd_bitmaps(nfdt, ofdt, ofdt->max_fds);
84 }
85
86 static struct fdtable * alloc_fdtable(unsigned int nr)
87 {
88         struct fdtable *fdt;
89         void *data;
90
91         /*
92          * Figure out how many fds we actually want to support in this fdtable.
93          * Allocation steps are keyed to the size of the fdarray, since it
94          * grows far faster than any of the other dynamic data. We try to fit
95          * the fdarray into comfortable page-tuned chunks: starting at 1024B
96          * and growing in powers of two from there on.
97          */
98         nr /= (1024 / sizeof(struct file *));
99         nr = roundup_pow_of_two(nr + 1);
100         nr *= (1024 / sizeof(struct file *));
101         /*
102          * Note that this can drive nr *below* what we had passed if sysctl_nr_open
103          * had been set lower between the check in expand_files() and here.  Deal
104          * with that in caller, it's cheaper that way.
105          *
106          * We make sure that nr remains a multiple of BITS_PER_LONG - otherwise
107          * bitmaps handling below becomes unpleasant, to put it mildly...
108          */
109         if (unlikely(nr > sysctl_nr_open))
110                 nr = ((sysctl_nr_open - 1) | (BITS_PER_LONG - 1)) + 1;
111
112         fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL_ACCOUNT);
113         if (!fdt)
114                 goto out;
115         fdt->max_fds = nr;
116         data = kvmalloc_array(nr, sizeof(struct file *), GFP_KERNEL_ACCOUNT);
117         if (!data)
118                 goto out_fdt;
119         fdt->fd = data;
120
121         data = kvmalloc(max_t(size_t,
122                                  2 * nr / BITS_PER_BYTE + BITBIT_SIZE(nr), L1_CACHE_BYTES),
123                                  GFP_KERNEL_ACCOUNT);
124         if (!data)
125                 goto out_arr;
126         fdt->open_fds = data;
127         data += nr / BITS_PER_BYTE;
128         fdt->close_on_exec = data;
129         data += nr / BITS_PER_BYTE;
130         fdt->full_fds_bits = data;
131
132         return fdt;
133
134 out_arr:
135         kvfree(fdt->fd);
136 out_fdt:
137         kfree(fdt);
138 out:
139         return NULL;
140 }
141
142 /*
143  * Expand the file descriptor table.
144  * This function will allocate a new fdtable and both fd array and fdset, of
145  * the given size.
146  * Return <0 error code on error; 1 on successful completion.
147  * The files->file_lock should be held on entry, and will be held on exit.
148  */
149 static int expand_fdtable(struct files_struct *files, unsigned int nr)
150         __releases(files->file_lock)
151         __acquires(files->file_lock)
152 {
153         struct fdtable *new_fdt, *cur_fdt;
154
155         spin_unlock(&files->file_lock);
156         new_fdt = alloc_fdtable(nr);
157
158         /* make sure all __fd_install() have seen resize_in_progress
159          * or have finished their rcu_read_lock_sched() section.
160          */
161         if (atomic_read(&files->count) > 1)
162                 synchronize_rcu();
163
164         spin_lock(&files->file_lock);
165         if (!new_fdt)
166                 return -ENOMEM;
167         /*
168          * extremely unlikely race - sysctl_nr_open decreased between the check in
169          * caller and alloc_fdtable().  Cheaper to catch it here...
170          */
171         if (unlikely(new_fdt->max_fds <= nr)) {
172                 __free_fdtable(new_fdt);
173                 return -EMFILE;
174         }
175         cur_fdt = files_fdtable(files);
176         BUG_ON(nr < cur_fdt->max_fds);
177         copy_fdtable(new_fdt, cur_fdt);
178         rcu_assign_pointer(files->fdt, new_fdt);
179         if (cur_fdt != &files->fdtab)
180                 call_rcu(&cur_fdt->rcu, free_fdtable_rcu);
181         /* coupled with smp_rmb() in __fd_install() */
182         smp_wmb();
183         return 1;
184 }
185
186 /*
187  * Expand files.
188  * This function will expand the file structures, if the requested size exceeds
189  * the current capacity and there is room for expansion.
190  * Return <0 error code on error; 0 when nothing done; 1 when files were
191  * expanded and execution may have blocked.
192  * The files->file_lock should be held on entry, and will be held on exit.
193  */
194 static int expand_files(struct files_struct *files, unsigned int nr)
195         __releases(files->file_lock)
196         __acquires(files->file_lock)
197 {
198         struct fdtable *fdt;
199         int expanded = 0;
200
201 repeat:
202         fdt = files_fdtable(files);
203
204         /* Do we need to expand? */
205         if (nr < fdt->max_fds)
206                 return expanded;
207
208         /* Can we expand? */
209         if (nr >= sysctl_nr_open)
210                 return -EMFILE;
211
212         if (unlikely(files->resize_in_progress)) {
213                 spin_unlock(&files->file_lock);
214                 expanded = 1;
215                 wait_event(files->resize_wait, !files->resize_in_progress);
216                 spin_lock(&files->file_lock);
217                 goto repeat;
218         }
219
220         /* All good, so we try */
221         files->resize_in_progress = true;
222         expanded = expand_fdtable(files, nr);
223         files->resize_in_progress = false;
224
225         wake_up_all(&files->resize_wait);
226         return expanded;
227 }
228
229 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt)
230 {
231         __set_bit(fd, fdt->close_on_exec);
232 }
233
234 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt)
235 {
236         if (test_bit(fd, fdt->close_on_exec))
237                 __clear_bit(fd, fdt->close_on_exec);
238 }
239
240 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt)
241 {
242         __set_bit(fd, fdt->open_fds);
243         fd /= BITS_PER_LONG;
244         if (!~fdt->open_fds[fd])
245                 __set_bit(fd, fdt->full_fds_bits);
246 }
247
248 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt)
249 {
250         __clear_bit(fd, fdt->open_fds);
251         __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);
252 }
253
254 static unsigned int count_open_files(struct fdtable *fdt)
255 {
256         unsigned int size = fdt->max_fds;
257         unsigned int i;
258
259         /* Find the last open fd */
260         for (i = size / BITS_PER_LONG; i > 0; ) {
261                 if (fdt->open_fds[--i])
262                         break;
263         }
264         i = (i + 1) * BITS_PER_LONG;
265         return i;
266 }
267
268 /*
269  * Allocate a new files structure and copy contents from the
270  * passed in files structure.
271  * errorp will be valid only when the returned files_struct is NULL.
272  */
273 struct files_struct *dup_fd(struct files_struct *oldf, int *errorp)
274 {
275         struct files_struct *newf;
276         struct file **old_fds, **new_fds;
277         unsigned int open_files, i;
278         struct fdtable *old_fdt, *new_fdt;
279
280         *errorp = -ENOMEM;
281         newf = kmem_cache_alloc(files_cachep, GFP_KERNEL);
282         if (!newf)
283                 goto out;
284
285         atomic_set(&newf->count, 1);
286
287         spin_lock_init(&newf->file_lock);
288         newf->resize_in_progress = false;
289         init_waitqueue_head(&newf->resize_wait);
290         newf->next_fd = 0;
291         new_fdt = &newf->fdtab;
292         new_fdt->max_fds = NR_OPEN_DEFAULT;
293         new_fdt->close_on_exec = newf->close_on_exec_init;
294         new_fdt->open_fds = newf->open_fds_init;
295         new_fdt->full_fds_bits = newf->full_fds_bits_init;
296         new_fdt->fd = &newf->fd_array[0];
297
298         spin_lock(&oldf->file_lock);
299         old_fdt = files_fdtable(oldf);
300         open_files = count_open_files(old_fdt);
301
302         /*
303          * Check whether we need to allocate a larger fd array and fd set.
304          */
305         while (unlikely(open_files > new_fdt->max_fds)) {
306                 spin_unlock(&oldf->file_lock);
307
308                 if (new_fdt != &newf->fdtab)
309                         __free_fdtable(new_fdt);
310
311                 new_fdt = alloc_fdtable(open_files - 1);
312                 if (!new_fdt) {
313                         *errorp = -ENOMEM;
314                         goto out_release;
315                 }
316
317                 /* beyond sysctl_nr_open; nothing to do */
318                 if (unlikely(new_fdt->max_fds < open_files)) {
319                         __free_fdtable(new_fdt);
320                         *errorp = -EMFILE;
321                         goto out_release;
322                 }
323
324                 /*
325                  * Reacquire the oldf lock and a pointer to its fd table
326                  * who knows it may have a new bigger fd table. We need
327                  * the latest pointer.
328                  */
329                 spin_lock(&oldf->file_lock);
330                 old_fdt = files_fdtable(oldf);
331                 open_files = count_open_files(old_fdt);
332         }
333
334         copy_fd_bitmaps(new_fdt, old_fdt, open_files);
335
336         old_fds = old_fdt->fd;
337         new_fds = new_fdt->fd;
338
339         for (i = open_files; i != 0; i--) {
340                 struct file *f = *old_fds++;
341                 if (f) {
342                         get_file(f);
343                 } else {
344                         /*
345                          * The fd may be claimed in the fd bitmap but not yet
346                          * instantiated in the files array if a sibling thread
347                          * is partway through open().  So make sure that this
348                          * fd is available to the new process.
349                          */
350                         __clear_open_fd(open_files - i, new_fdt);
351                 }
352                 rcu_assign_pointer(*new_fds++, f);
353         }
354         spin_unlock(&oldf->file_lock);
355
356         /* clear the remainder */
357         memset(new_fds, 0, (new_fdt->max_fds - open_files) * sizeof(struct file *));
358
359         rcu_assign_pointer(newf->fdt, new_fdt);
360
361         return newf;
362
363 out_release:
364         kmem_cache_free(files_cachep, newf);
365 out:
366         return NULL;
367 }
368
369 static struct fdtable *close_files(struct files_struct * files)
370 {
371         /*
372          * It is safe to dereference the fd table without RCU or
373          * ->file_lock because this is the last reference to the
374          * files structure.
375          */
376         struct fdtable *fdt = rcu_dereference_raw(files->fdt);
377         unsigned int i, j = 0;
378
379         for (;;) {
380                 unsigned long set;
381                 i = j * BITS_PER_LONG;
382                 if (i >= fdt->max_fds)
383                         break;
384                 set = fdt->open_fds[j++];
385                 while (set) {
386                         if (set & 1) {
387                                 struct file * file = xchg(&fdt->fd[i], NULL);
388                                 if (file) {
389                                         filp_close(file, files);
390                                         cond_resched();
391                                 }
392                         }
393                         i++;
394                         set >>= 1;
395                 }
396         }
397
398         return fdt;
399 }
400
401 struct files_struct *get_files_struct(struct task_struct *task)
402 {
403         struct files_struct *files;
404
405         task_lock(task);
406         files = task->files;
407         if (files)
408                 atomic_inc(&files->count);
409         task_unlock(task);
410
411         return files;
412 }
413
414 void put_files_struct(struct files_struct *files)
415 {
416         if (atomic_dec_and_test(&files->count)) {
417                 struct fdtable *fdt = close_files(files);
418
419                 /* free the arrays if they are not embedded */
420                 if (fdt != &files->fdtab)
421                         __free_fdtable(fdt);
422                 kmem_cache_free(files_cachep, files);
423         }
424 }
425
426 void reset_files_struct(struct files_struct *files)
427 {
428         struct task_struct *tsk = current;
429         struct files_struct *old;
430
431         old = tsk->files;
432         task_lock(tsk);
433         tsk->files = files;
434         task_unlock(tsk);
435         put_files_struct(old);
436 }
437
438 void exit_files(struct task_struct *tsk)
439 {
440         struct files_struct * files = tsk->files;
441
442         if (files) {
443                 task_lock(tsk);
444                 tsk->files = NULL;
445                 task_unlock(tsk);
446                 put_files_struct(files);
447         }
448 }
449
450 struct files_struct init_files = {
451         .count          = ATOMIC_INIT(1),
452         .fdt            = &init_files.fdtab,
453         .fdtab          = {
454                 .max_fds        = NR_OPEN_DEFAULT,
455                 .fd             = &init_files.fd_array[0],
456                 .close_on_exec  = init_files.close_on_exec_init,
457                 .open_fds       = init_files.open_fds_init,
458                 .full_fds_bits  = init_files.full_fds_bits_init,
459         },
460         .file_lock      = __SPIN_LOCK_UNLOCKED(init_files.file_lock),
461         .resize_wait    = __WAIT_QUEUE_HEAD_INITIALIZER(init_files.resize_wait),
462 };
463
464 static unsigned int find_next_fd(struct fdtable *fdt, unsigned int start)
465 {
466         unsigned int maxfd = fdt->max_fds;
467         unsigned int maxbit = maxfd / BITS_PER_LONG;
468         unsigned int bitbit = start / BITS_PER_LONG;
469
470         bitbit = find_next_zero_bit(fdt->full_fds_bits, maxbit, bitbit) * BITS_PER_LONG;
471         if (bitbit > maxfd)
472                 return maxfd;
473         if (bitbit > start)
474                 start = bitbit;
475         return find_next_zero_bit(fdt->open_fds, maxfd, start);
476 }
477
478 /*
479  * allocate a file descriptor, mark it busy.
480  */
481 int __alloc_fd(struct files_struct *files,
482                unsigned start, unsigned end, unsigned flags)
483 {
484         unsigned int fd;
485         int error;
486         struct fdtable *fdt;
487
488         spin_lock(&files->file_lock);
489 repeat:
490         fdt = files_fdtable(files);
491         fd = start;
492         if (fd < files->next_fd)
493                 fd = files->next_fd;
494
495         if (fd < fdt->max_fds)
496                 fd = find_next_fd(fdt, fd);
497
498         /*
499          * N.B. For clone tasks sharing a files structure, this test
500          * will limit the total number of files that can be opened.
501          */
502         error = -EMFILE;
503         if (fd >= end)
504                 goto out;
505
506         error = expand_files(files, fd);
507         if (error < 0)
508                 goto out;
509
510         /*
511          * If we needed to expand the fs array we
512          * might have blocked - try again.
513          */
514         if (error)
515                 goto repeat;
516
517         if (start <= files->next_fd)
518                 files->next_fd = fd + 1;
519
520         __set_open_fd(fd, fdt);
521         if (flags & O_CLOEXEC)
522                 __set_close_on_exec(fd, fdt);
523         else
524                 __clear_close_on_exec(fd, fdt);
525         error = fd;
526 #if 1
527         /* Sanity check */
528         if (rcu_access_pointer(fdt->fd[fd]) != NULL) {
529                 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd);
530                 rcu_assign_pointer(fdt->fd[fd], NULL);
531         }
532 #endif
533
534 out:
535         spin_unlock(&files->file_lock);
536         return error;
537 }
538
539 static int alloc_fd(unsigned start, unsigned flags)
540 {
541         return __alloc_fd(current->files, start, rlimit(RLIMIT_NOFILE), flags);
542 }
543
544 int __get_unused_fd_flags(unsigned flags, unsigned long nofile)
545 {
546         return __alloc_fd(current->files, 0, nofile, flags);
547 }
548
549 int get_unused_fd_flags(unsigned flags)
550 {
551         return __get_unused_fd_flags(flags, rlimit(RLIMIT_NOFILE));
552 }
553 EXPORT_SYMBOL(get_unused_fd_flags);
554
555 static void __put_unused_fd(struct files_struct *files, unsigned int fd)
556 {
557         struct fdtable *fdt = files_fdtable(files);
558         __clear_open_fd(fd, fdt);
559         if (fd < files->next_fd)
560                 files->next_fd = fd;
561 }
562
563 void put_unused_fd(unsigned int fd)
564 {
565         struct files_struct *files = current->files;
566         spin_lock(&files->file_lock);
567         __put_unused_fd(files, fd);
568         spin_unlock(&files->file_lock);
569 }
570
571 EXPORT_SYMBOL(put_unused_fd);
572
573 /*
574  * Install a file pointer in the fd array.
575  *
576  * The VFS is full of places where we drop the files lock between
577  * setting the open_fds bitmap and installing the file in the file
578  * array.  At any such point, we are vulnerable to a dup2() race
579  * installing a file in the array before us.  We need to detect this and
580  * fput() the struct file we are about to overwrite in this case.
581  *
582  * It should never happen - if we allow dup2() do it, _really_ bad things
583  * will follow.
584  *
585  * NOTE: __fd_install() variant is really, really low-level; don't
586  * use it unless you are forced to by truly lousy API shoved down
587  * your throat.  'files' *MUST* be either current->files or obtained
588  * by get_files_struct(current) done by whoever had given it to you,
589  * or really bad things will happen.  Normally you want to use
590  * fd_install() instead.
591  */
592
593 void __fd_install(struct files_struct *files, unsigned int fd,
594                 struct file *file)
595 {
596         struct fdtable *fdt;
597
598         rcu_read_lock_sched();
599
600         if (unlikely(files->resize_in_progress)) {
601                 rcu_read_unlock_sched();
602                 spin_lock(&files->file_lock);
603                 fdt = files_fdtable(files);
604                 BUG_ON(fdt->fd[fd] != NULL);
605                 rcu_assign_pointer(fdt->fd[fd], file);
606                 spin_unlock(&files->file_lock);
607                 return;
608         }
609         /* coupled with smp_wmb() in expand_fdtable() */
610         smp_rmb();
611         fdt = rcu_dereference_sched(files->fdt);
612         BUG_ON(fdt->fd[fd] != NULL);
613         rcu_assign_pointer(fdt->fd[fd], file);
614         rcu_read_unlock_sched();
615 }
616
617 /*
618  * This consumes the "file" refcount, so callers should treat it
619  * as if they had called fput(file).
620  */
621 void fd_install(unsigned int fd, struct file *file)
622 {
623         __fd_install(current->files, fd, file);
624 }
625
626 EXPORT_SYMBOL(fd_install);
627
628 /*
629  * The same warnings as for __alloc_fd()/__fd_install() apply here...
630  */
631 int __close_fd(struct files_struct *files, unsigned fd)
632 {
633         struct file *file;
634         struct fdtable *fdt;
635
636         spin_lock(&files->file_lock);
637         fdt = files_fdtable(files);
638         if (fd >= fdt->max_fds)
639                 goto out_unlock;
640         file = fdt->fd[fd];
641         if (!file)
642                 goto out_unlock;
643         rcu_assign_pointer(fdt->fd[fd], NULL);
644         __put_unused_fd(files, fd);
645         spin_unlock(&files->file_lock);
646         return filp_close(file, files);
647
648 out_unlock:
649         spin_unlock(&files->file_lock);
650         return -EBADF;
651 }
652 EXPORT_SYMBOL(__close_fd); /* for ksys_close() */
653
654 /*
655  * variant of __close_fd that gets a ref on the file for later fput.
656  * The caller must ensure that filp_close() called on the file, and then
657  * an fput().
658  */
659 int __close_fd_get_file(unsigned int fd, struct file **res)
660 {
661         struct files_struct *files = current->files;
662         struct file *file;
663         struct fdtable *fdt;
664
665         spin_lock(&files->file_lock);
666         fdt = files_fdtable(files);
667         if (fd >= fdt->max_fds)
668                 goto out_unlock;
669         file = fdt->fd[fd];
670         if (!file)
671                 goto out_unlock;
672         rcu_assign_pointer(fdt->fd[fd], NULL);
673         __put_unused_fd(files, fd);
674         spin_unlock(&files->file_lock);
675         get_file(file);
676         *res = file;
677         return 0;
678
679 out_unlock:
680         spin_unlock(&files->file_lock);
681         *res = NULL;
682         return -ENOENT;
683 }
684
685 void do_close_on_exec(struct files_struct *files)
686 {
687         unsigned i;
688         struct fdtable *fdt;
689
690         /* exec unshares first */
691         spin_lock(&files->file_lock);
692         for (i = 0; ; i++) {
693                 unsigned long set;
694                 unsigned fd = i * BITS_PER_LONG;
695                 fdt = files_fdtable(files);
696                 if (fd >= fdt->max_fds)
697                         break;
698                 set = fdt->close_on_exec[i];
699                 if (!set)
700                         continue;
701                 fdt->close_on_exec[i] = 0;
702                 for ( ; set ; fd++, set >>= 1) {
703                         struct file *file;
704                         if (!(set & 1))
705                                 continue;
706                         file = fdt->fd[fd];
707                         if (!file)
708                                 continue;
709                         rcu_assign_pointer(fdt->fd[fd], NULL);
710                         __put_unused_fd(files, fd);
711                         spin_unlock(&files->file_lock);
712                         filp_close(file, files);
713                         cond_resched();
714                         spin_lock(&files->file_lock);
715                 }
716
717         }
718         spin_unlock(&files->file_lock);
719 }
720
721 static struct file *__fget_files(struct files_struct *files, unsigned int fd,
722                                  fmode_t mask, unsigned int refs)
723 {
724         struct file *file;
725
726         rcu_read_lock();
727 loop:
728         file = fcheck_files(files, fd);
729         if (file) {
730                 /* File object ref couldn't be taken.
731                  * dup2() atomicity guarantee is the reason
732                  * we loop to catch the new file (or NULL pointer)
733                  */
734                 if (file->f_mode & mask)
735                         file = NULL;
736                 else if (!get_file_rcu_many(file, refs))
737                         goto loop;
738         }
739         rcu_read_unlock();
740
741         return file;
742 }
743
744 static inline struct file *__fget(unsigned int fd, fmode_t mask,
745                                   unsigned int refs)
746 {
747         return __fget_files(current->files, fd, mask, refs);
748 }
749
750 struct file *fget_many(unsigned int fd, unsigned int refs)
751 {
752         return __fget(fd, FMODE_PATH, refs);
753 }
754
755 struct file *fget(unsigned int fd)
756 {
757         return __fget(fd, FMODE_PATH, 1);
758 }
759 EXPORT_SYMBOL(fget);
760
761 struct file *fget_raw(unsigned int fd)
762 {
763         return __fget(fd, 0, 1);
764 }
765 EXPORT_SYMBOL(fget_raw);
766
767 struct file *fget_task(struct task_struct *task, unsigned int fd)
768 {
769         struct file *file = NULL;
770
771         task_lock(task);
772         if (task->files)
773                 file = __fget_files(task->files, fd, 0, 1);
774         task_unlock(task);
775
776         return file;
777 }
778
779 /*
780  * Lightweight file lookup - no refcnt increment if fd table isn't shared.
781  *
782  * You can use this instead of fget if you satisfy all of the following
783  * conditions:
784  * 1) You must call fput_light before exiting the syscall and returning control
785  *    to userspace (i.e. you cannot remember the returned struct file * after
786  *    returning to userspace).
787  * 2) You must not call filp_close on the returned struct file * in between
788  *    calls to fget_light and fput_light.
789  * 3) You must not clone the current task in between the calls to fget_light
790  *    and fput_light.
791  *
792  * The fput_needed flag returned by fget_light should be passed to the
793  * corresponding fput_light.
794  */
795 static unsigned long __fget_light(unsigned int fd, fmode_t mask)
796 {
797         struct files_struct *files = current->files;
798         struct file *file;
799
800         if (atomic_read(&files->count) == 1) {
801                 file = __fcheck_files(files, fd);
802                 if (!file || unlikely(file->f_mode & mask))
803                         return 0;
804                 return (unsigned long)file;
805         } else {
806                 file = __fget(fd, mask, 1);
807                 if (!file)
808                         return 0;
809                 return FDPUT_FPUT | (unsigned long)file;
810         }
811 }
812 unsigned long __fdget(unsigned int fd)
813 {
814         return __fget_light(fd, FMODE_PATH);
815 }
816 EXPORT_SYMBOL(__fdget);
817
818 unsigned long __fdget_raw(unsigned int fd)
819 {
820         return __fget_light(fd, 0);
821 }
822
823 unsigned long __fdget_pos(unsigned int fd)
824 {
825         unsigned long v = __fdget(fd);
826         struct file *file = (struct file *)(v & ~3);
827
828         if (file && (file->f_mode & FMODE_ATOMIC_POS)) {
829                 if (file_count(file) > 1) {
830                         v |= FDPUT_POS_UNLOCK;
831                         mutex_lock(&file->f_pos_lock);
832                 }
833         }
834         return v;
835 }
836
837 void __f_unlock_pos(struct file *f)
838 {
839         mutex_unlock(&f->f_pos_lock);
840 }
841
842 /*
843  * We only lock f_pos if we have threads or if the file might be
844  * shared with another process. In both cases we'll have an elevated
845  * file count (done either by fdget() or by fork()).
846  */
847
848 void set_close_on_exec(unsigned int fd, int flag)
849 {
850         struct files_struct *files = current->files;
851         struct fdtable *fdt;
852         spin_lock(&files->file_lock);
853         fdt = files_fdtable(files);
854         if (flag)
855                 __set_close_on_exec(fd, fdt);
856         else
857                 __clear_close_on_exec(fd, fdt);
858         spin_unlock(&files->file_lock);
859 }
860
861 bool get_close_on_exec(unsigned int fd)
862 {
863         struct files_struct *files = current->files;
864         struct fdtable *fdt;
865         bool res;
866         rcu_read_lock();
867         fdt = files_fdtable(files);
868         res = close_on_exec(fd, fdt);
869         rcu_read_unlock();
870         return res;
871 }
872
873 static int do_dup2(struct files_struct *files,
874         struct file *file, unsigned fd, unsigned flags)
875 __releases(&files->file_lock)
876 {
877         struct file *tofree;
878         struct fdtable *fdt;
879
880         /*
881          * We need to detect attempts to do dup2() over allocated but still
882          * not finished descriptor.  NB: OpenBSD avoids that at the price of
883          * extra work in their equivalent of fget() - they insert struct
884          * file immediately after grabbing descriptor, mark it larval if
885          * more work (e.g. actual opening) is needed and make sure that
886          * fget() treats larval files as absent.  Potentially interesting,
887          * but while extra work in fget() is trivial, locking implications
888          * and amount of surgery on open()-related paths in VFS are not.
889          * FreeBSD fails with -EBADF in the same situation, NetBSD "solution"
890          * deadlocks in rather amusing ways, AFAICS.  All of that is out of
891          * scope of POSIX or SUS, since neither considers shared descriptor
892          * tables and this condition does not arise without those.
893          */
894         fdt = files_fdtable(files);
895         tofree = fdt->fd[fd];
896         if (!tofree && fd_is_open(fd, fdt))
897                 goto Ebusy;
898         get_file(file);
899         rcu_assign_pointer(fdt->fd[fd], file);
900         __set_open_fd(fd, fdt);
901         if (flags & O_CLOEXEC)
902                 __set_close_on_exec(fd, fdt);
903         else
904                 __clear_close_on_exec(fd, fdt);
905         spin_unlock(&files->file_lock);
906
907         if (tofree)
908                 filp_close(tofree, files);
909
910         return fd;
911
912 Ebusy:
913         spin_unlock(&files->file_lock);
914         return -EBUSY;
915 }
916
917 int replace_fd(unsigned fd, struct file *file, unsigned flags)
918 {
919         int err;
920         struct files_struct *files = current->files;
921
922         if (!file)
923                 return __close_fd(files, fd);
924
925         if (fd >= rlimit(RLIMIT_NOFILE))
926                 return -EBADF;
927
928         spin_lock(&files->file_lock);
929         err = expand_files(files, fd);
930         if (unlikely(err < 0))
931                 goto out_unlock;
932         return do_dup2(files, file, fd, flags);
933
934 out_unlock:
935         spin_unlock(&files->file_lock);
936         return err;
937 }
938
939 /**
940  * __receive_fd() - Install received file into file descriptor table
941  *
942  * @fd: fd to install into (if negative, a new fd will be allocated)
943  * @file: struct file that was received from another process
944  * @ufd: __user pointer to write new fd number to
945  * @o_flags: the O_* flags to apply to the new fd entry
946  *
947  * Installs a received file into the file descriptor table, with appropriate
948  * checks and count updates. Optionally writes the fd number to userspace, if
949  * @ufd is non-NULL.
950  *
951  * This helper handles its own reference counting of the incoming
952  * struct file.
953  *
954  * Returns newly install fd or -ve on error.
955  */
956 int __receive_fd(int fd, struct file *file, int __user *ufd, unsigned int o_flags)
957 {
958         int new_fd;
959         int error;
960
961         error = security_file_receive(file);
962         if (error)
963                 return error;
964
965         if (fd < 0) {
966                 new_fd = get_unused_fd_flags(o_flags);
967                 if (new_fd < 0)
968                         return new_fd;
969         } else {
970                 new_fd = fd;
971         }
972
973         if (ufd) {
974                 error = put_user(new_fd, ufd);
975                 if (error) {
976                         if (fd < 0)
977                                 put_unused_fd(new_fd);
978                         return error;
979                 }
980         }
981
982         if (fd < 0) {
983                 fd_install(new_fd, get_file(file));
984         } else {
985                 error = replace_fd(new_fd, file, o_flags);
986                 if (error)
987                         return error;
988         }
989
990         /* Bump the sock usage counts, if any. */
991         __receive_sock(file);
992         return new_fd;
993 }
994
995 static int ksys_dup3(unsigned int oldfd, unsigned int newfd, int flags)
996 {
997         int err = -EBADF;
998         struct file *file;
999         struct files_struct *files = current->files;
1000
1001         if ((flags & ~O_CLOEXEC) != 0)
1002                 return -EINVAL;
1003
1004         if (unlikely(oldfd == newfd))
1005                 return -EINVAL;
1006
1007         if (newfd >= rlimit(RLIMIT_NOFILE))
1008                 return -EBADF;
1009
1010         spin_lock(&files->file_lock);
1011         err = expand_files(files, newfd);
1012         file = fcheck(oldfd);
1013         if (unlikely(!file))
1014                 goto Ebadf;
1015         if (unlikely(err < 0)) {
1016                 if (err == -EMFILE)
1017                         goto Ebadf;
1018                 goto out_unlock;
1019         }
1020         return do_dup2(files, file, newfd, flags);
1021
1022 Ebadf:
1023         err = -EBADF;
1024 out_unlock:
1025         spin_unlock(&files->file_lock);
1026         return err;
1027 }
1028
1029 SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
1030 {
1031         return ksys_dup3(oldfd, newfd, flags);
1032 }
1033
1034 SYSCALL_DEFINE2(dup2, unsigned int, oldfd, unsigned int, newfd)
1035 {
1036         if (unlikely(newfd == oldfd)) { /* corner case */
1037                 struct files_struct *files = current->files;
1038                 int retval = oldfd;
1039
1040                 rcu_read_lock();
1041                 if (!fcheck_files(files, oldfd))
1042                         retval = -EBADF;
1043                 rcu_read_unlock();
1044                 return retval;
1045         }
1046         return ksys_dup3(oldfd, newfd, 0);
1047 }
1048
1049 int ksys_dup(unsigned int fildes)
1050 {
1051         int ret = -EBADF;
1052         struct file *file = fget_raw(fildes);
1053
1054         if (file) {
1055                 ret = get_unused_fd_flags(0);
1056                 if (ret >= 0)
1057                         fd_install(ret, file);
1058                 else
1059                         fput(file);
1060         }
1061         return ret;
1062 }
1063
1064 SYSCALL_DEFINE1(dup, unsigned int, fildes)
1065 {
1066         return ksys_dup(fildes);
1067 }
1068
1069 int f_dupfd(unsigned int from, struct file *file, unsigned flags)
1070 {
1071         int err;
1072         if (from >= rlimit(RLIMIT_NOFILE))
1073                 return -EINVAL;
1074         err = alloc_fd(from, flags);
1075         if (err >= 0) {
1076                 get_file(file);
1077                 fd_install(err, file);
1078         }
1079         return err;
1080 }
1081
1082 int iterate_fd(struct files_struct *files, unsigned n,
1083                 int (*f)(const void *, struct file *, unsigned),
1084                 const void *p)
1085 {
1086         struct fdtable *fdt;
1087         int res = 0;
1088         if (!files)
1089                 return 0;
1090         spin_lock(&files->file_lock);
1091         for (fdt = files_fdtable(files); n < fdt->max_fds; n++) {
1092                 struct file *file;
1093                 file = rcu_dereference_check_fdtable(files, fdt->fd[n]);
1094                 if (!file)
1095                         continue;
1096                 res = f(p, file, n);
1097                 if (res)
1098                         break;
1099         }
1100         spin_unlock(&files->file_lock);
1101         return res;
1102 }
1103 EXPORT_SYMBOL(iterate_fd);