Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0
2 : /*
3 : * linux/fs/fcntl.c
4 : *
5 : * Copyright (C) 1991, 1992 Linus Torvalds
6 : */
7 :
8 : #include <linux/syscalls.h>
9 : #include <linux/init.h>
10 : #include <linux/mm.h>
11 : #include <linux/sched/task.h>
12 : #include <linux/fs.h>
13 : #include <linux/file.h>
14 : #include <linux/fdtable.h>
15 : #include <linux/capability.h>
16 : #include <linux/dnotify.h>
17 : #include <linux/slab.h>
18 : #include <linux/module.h>
19 : #include <linux/pipe_fs_i.h>
20 : #include <linux/security.h>
21 : #include <linux/ptrace.h>
22 : #include <linux/signal.h>
23 : #include <linux/rcupdate.h>
24 : #include <linux/pid_namespace.h>
25 : #include <linux/user_namespace.h>
26 : #include <linux/memfd.h>
27 : #include <linux/compat.h>
28 : #include <linux/mount.h>
29 :
30 : #include <linux/poll.h>
31 : #include <asm/siginfo.h>
32 : #include <linux/uaccess.h>
33 :
34 : #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
35 :
36 81 : static int setfl(int fd, struct file * filp, unsigned long arg)
37 : {
38 81 : struct inode * inode = file_inode(filp);
39 81 : int error = 0;
40 :
41 : /*
42 : * O_APPEND cannot be cleared if the file is marked as append-only
43 : * and the file is open for write.
44 : */
45 81 : if (((arg ^ filp->f_flags) & O_APPEND) && IS_APPEND(inode))
46 : return -EPERM;
47 :
48 : /* O_NOATIME can only be set by the owner or superuser */
49 81 : if ((arg & O_NOATIME) && !(filp->f_flags & O_NOATIME))
50 0 : if (!inode_owner_or_capable(file_mnt_user_ns(filp), inode))
51 : return -EPERM;
52 :
53 : /* required for strict SunOS emulation */
54 81 : if (O_NONBLOCK != O_NDELAY)
55 : if (arg & O_NDELAY)
56 : arg |= O_NONBLOCK;
57 :
58 : /* Pipe packetized mode is controlled by O_DIRECT flag */
59 81 : if (!S_ISFIFO(inode->i_mode) && (arg & O_DIRECT)) {
60 0 : if (!filp->f_mapping || !filp->f_mapping->a_ops ||
61 0 : !filp->f_mapping->a_ops->direct_IO)
62 : return -EINVAL;
63 : }
64 :
65 81 : if (filp->f_op->check_flags)
66 0 : error = filp->f_op->check_flags(arg);
67 0 : if (error)
68 : return error;
69 :
70 : /*
71 : * ->fasync() is responsible for setting the FASYNC bit.
72 : */
73 81 : if (((arg ^ filp->f_flags) & FASYNC) && filp->f_op->fasync) {
74 0 : error = filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0);
75 0 : if (error < 0)
76 0 : goto out;
77 0 : if (error > 0)
78 0 : error = 0;
79 : }
80 81 : spin_lock(&filp->f_lock);
81 81 : filp->f_flags = (arg & SETFL_MASK) | (filp->f_flags & ~SETFL_MASK);
82 81 : spin_unlock(&filp->f_lock);
83 :
84 : out:
85 : return error;
86 : }
87 :
88 0 : static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
89 : int force)
90 : {
91 0 : write_lock_irq(&filp->f_owner.lock);
92 0 : if (force || !filp->f_owner.pid) {
93 0 : put_pid(filp->f_owner.pid);
94 0 : filp->f_owner.pid = get_pid(pid);
95 0 : filp->f_owner.pid_type = type;
96 :
97 0 : if (pid) {
98 0 : const struct cred *cred = current_cred();
99 0 : filp->f_owner.uid = cred->uid;
100 0 : filp->f_owner.euid = cred->euid;
101 : }
102 : }
103 0 : write_unlock_irq(&filp->f_owner.lock);
104 0 : }
105 :
106 0 : void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
107 : int force)
108 : {
109 0 : security_file_set_fowner(filp);
110 0 : f_modown(filp, pid, type, force);
111 0 : }
112 : EXPORT_SYMBOL(__f_setown);
113 :
114 0 : int f_setown(struct file *filp, unsigned long arg, int force)
115 : {
116 0 : enum pid_type type;
117 0 : struct pid *pid = NULL;
118 0 : int who = arg, ret = 0;
119 :
120 0 : type = PIDTYPE_TGID;
121 0 : if (who < 0) {
122 : /* avoid overflow below */
123 0 : if (who == INT_MIN)
124 : return -EINVAL;
125 :
126 0 : type = PIDTYPE_PGID;
127 0 : who = -who;
128 : }
129 :
130 0 : rcu_read_lock();
131 0 : if (who) {
132 0 : pid = find_vpid(who);
133 0 : if (!pid)
134 : ret = -ESRCH;
135 : }
136 :
137 : if (!ret)
138 0 : __f_setown(filp, pid, type, force);
139 0 : rcu_read_unlock();
140 :
141 0 : return ret;
142 : }
143 : EXPORT_SYMBOL(f_setown);
144 :
145 0 : void f_delown(struct file *filp)
146 : {
147 0 : f_modown(filp, NULL, PIDTYPE_TGID, 1);
148 0 : }
149 :
150 0 : pid_t f_getown(struct file *filp)
151 : {
152 0 : pid_t pid = 0;
153 0 : read_lock(&filp->f_owner.lock);
154 0 : rcu_read_lock();
155 0 : if (pid_task(filp->f_owner.pid, filp->f_owner.pid_type)) {
156 0 : pid = pid_vnr(filp->f_owner.pid);
157 0 : if (filp->f_owner.pid_type == PIDTYPE_PGID)
158 0 : pid = -pid;
159 : }
160 0 : rcu_read_unlock();
161 0 : read_unlock(&filp->f_owner.lock);
162 0 : return pid;
163 : }
164 :
165 0 : static int f_setown_ex(struct file *filp, unsigned long arg)
166 : {
167 0 : struct f_owner_ex __user *owner_p = (void __user *)arg;
168 0 : struct f_owner_ex owner;
169 0 : struct pid *pid;
170 0 : int type;
171 0 : int ret;
172 :
173 0 : ret = copy_from_user(&owner, owner_p, sizeof(owner));
174 0 : if (ret)
175 : return -EFAULT;
176 :
177 0 : switch (owner.type) {
178 : case F_OWNER_TID:
179 : type = PIDTYPE_PID;
180 : break;
181 :
182 : case F_OWNER_PID:
183 : type = PIDTYPE_TGID;
184 : break;
185 :
186 : case F_OWNER_PGRP:
187 : type = PIDTYPE_PGID;
188 : break;
189 :
190 : default:
191 : return -EINVAL;
192 : }
193 :
194 0 : rcu_read_lock();
195 0 : pid = find_vpid(owner.pid);
196 0 : if (owner.pid && !pid)
197 : ret = -ESRCH;
198 : else
199 0 : __f_setown(filp, pid, type, 1);
200 0 : rcu_read_unlock();
201 :
202 0 : return ret;
203 : }
204 :
205 0 : static int f_getown_ex(struct file *filp, unsigned long arg)
206 : {
207 0 : struct f_owner_ex __user *owner_p = (void __user *)arg;
208 0 : struct f_owner_ex owner = {};
209 0 : int ret = 0;
210 :
211 0 : read_lock(&filp->f_owner.lock);
212 0 : rcu_read_lock();
213 0 : if (pid_task(filp->f_owner.pid, filp->f_owner.pid_type))
214 0 : owner.pid = pid_vnr(filp->f_owner.pid);
215 0 : rcu_read_unlock();
216 0 : switch (filp->f_owner.pid_type) {
217 0 : case PIDTYPE_PID:
218 0 : owner.type = F_OWNER_TID;
219 0 : break;
220 :
221 0 : case PIDTYPE_TGID:
222 0 : owner.type = F_OWNER_PID;
223 0 : break;
224 :
225 0 : case PIDTYPE_PGID:
226 0 : owner.type = F_OWNER_PGRP;
227 0 : break;
228 :
229 : default:
230 0 : WARN_ON(1);
231 0 : ret = -EINVAL;
232 0 : break;
233 : }
234 0 : read_unlock(&filp->f_owner.lock);
235 :
236 0 : if (!ret) {
237 0 : ret = copy_to_user(owner_p, &owner, sizeof(owner));
238 0 : if (ret)
239 0 : ret = -EFAULT;
240 : }
241 0 : return ret;
242 : }
243 :
244 : #ifdef CONFIG_CHECKPOINT_RESTORE
245 : static int f_getowner_uids(struct file *filp, unsigned long arg)
246 : {
247 : struct user_namespace *user_ns = current_user_ns();
248 : uid_t __user *dst = (void __user *)arg;
249 : uid_t src[2];
250 : int err;
251 :
252 : read_lock(&filp->f_owner.lock);
253 : src[0] = from_kuid(user_ns, filp->f_owner.uid);
254 : src[1] = from_kuid(user_ns, filp->f_owner.euid);
255 : read_unlock(&filp->f_owner.lock);
256 :
257 : err = put_user(src[0], &dst[0]);
258 : err |= put_user(src[1], &dst[1]);
259 :
260 : return err;
261 : }
262 : #else
263 : static int f_getowner_uids(struct file *filp, unsigned long arg)
264 : {
265 : return -EINVAL;
266 : }
267 : #endif
268 :
269 0 : static bool rw_hint_valid(enum rw_hint hint)
270 : {
271 0 : switch (hint) {
272 : case RWH_WRITE_LIFE_NOT_SET:
273 : case RWH_WRITE_LIFE_NONE:
274 : case RWH_WRITE_LIFE_SHORT:
275 : case RWH_WRITE_LIFE_MEDIUM:
276 : case RWH_WRITE_LIFE_LONG:
277 : case RWH_WRITE_LIFE_EXTREME:
278 : return true;
279 : default:
280 : return false;
281 : }
282 : }
283 :
284 0 : static long fcntl_rw_hint(struct file *file, unsigned int cmd,
285 : unsigned long arg)
286 : {
287 0 : struct inode *inode = file_inode(file);
288 0 : u64 __user *argp = (u64 __user *)arg;
289 0 : enum rw_hint hint;
290 0 : u64 h;
291 :
292 0 : switch (cmd) {
293 : case F_GET_FILE_RW_HINT:
294 0 : h = file_write_hint(file);
295 0 : if (copy_to_user(argp, &h, sizeof(*argp)))
296 0 : return -EFAULT;
297 : return 0;
298 : case F_SET_FILE_RW_HINT:
299 0 : if (copy_from_user(&h, argp, sizeof(h)))
300 : return -EFAULT;
301 0 : hint = (enum rw_hint) h;
302 0 : if (!rw_hint_valid(hint))
303 : return -EINVAL;
304 :
305 0 : spin_lock(&file->f_lock);
306 0 : file->f_write_hint = hint;
307 0 : spin_unlock(&file->f_lock);
308 0 : return 0;
309 0 : case F_GET_RW_HINT:
310 0 : h = inode->i_write_hint;
311 0 : if (copy_to_user(argp, &h, sizeof(*argp)))
312 0 : return -EFAULT;
313 : return 0;
314 : case F_SET_RW_HINT:
315 0 : if (copy_from_user(&h, argp, sizeof(h)))
316 : return -EFAULT;
317 0 : hint = (enum rw_hint) h;
318 0 : if (!rw_hint_valid(hint))
319 : return -EINVAL;
320 :
321 0 : inode_lock(inode);
322 0 : inode->i_write_hint = hint;
323 0 : inode_unlock(inode);
324 0 : return 0;
325 : default:
326 : return -EINVAL;
327 : }
328 : }
329 :
330 3955 : static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
331 : struct file *filp)
332 : {
333 3955 : void __user *argp = (void __user *)arg;
334 3955 : struct flock flock;
335 3955 : long err = -EINVAL;
336 :
337 3955 : switch (cmd) {
338 634 : case F_DUPFD:
339 634 : err = f_dupfd(arg, filp, 0);
340 634 : break;
341 651 : case F_DUPFD_CLOEXEC:
342 651 : err = f_dupfd(arg, filp, O_CLOEXEC);
343 651 : break;
344 91 : case F_GETFD:
345 91 : err = get_close_on_exec(fd) ? FD_CLOEXEC : 0;
346 91 : break;
347 1199 : case F_SETFD:
348 1199 : err = 0;
349 1199 : set_close_on_exec(fd, arg & FD_CLOEXEC);
350 1199 : break;
351 1209 : case F_GETFL:
352 1209 : err = filp->f_flags;
353 1209 : break;
354 81 : case F_SETFL:
355 81 : err = setfl(fd, filp, arg);
356 81 : break;
357 : #if BITS_PER_LONG != 32
358 : /* 32-bit arches must use fcntl64() */
359 : case F_OFD_GETLK:
360 : #endif
361 : case F_GETLK:
362 0 : if (copy_from_user(&flock, argp, sizeof(flock)))
363 : return -EFAULT;
364 0 : err = fcntl_getlk(filp, cmd, &flock);
365 0 : if (!err && copy_to_user(argp, &flock, sizeof(flock)))
366 0 : return -EFAULT;
367 : break;
368 : #if BITS_PER_LONG != 32
369 : /* 32-bit arches must use fcntl64() */
370 : case F_OFD_SETLK:
371 : case F_OFD_SETLKW:
372 : #endif
373 90 : fallthrough;
374 : case F_SETLK:
375 : case F_SETLKW:
376 90 : if (copy_from_user(&flock, argp, sizeof(flock)))
377 : return -EFAULT;
378 90 : err = fcntl_setlk(fd, filp, cmd, &flock);
379 90 : break;
380 0 : case F_GETOWN:
381 : /*
382 : * XXX If f_owner is a process group, the
383 : * negative return value will get converted
384 : * into an error. Oops. If we keep the
385 : * current syscall conventions, the only way
386 : * to fix this will be in libc.
387 : */
388 0 : err = f_getown(filp);
389 0 : force_successful_syscall_return();
390 0 : break;
391 0 : case F_SETOWN:
392 0 : err = f_setown(filp, arg, 1);
393 0 : break;
394 0 : case F_GETOWN_EX:
395 0 : err = f_getown_ex(filp, arg);
396 0 : break;
397 0 : case F_SETOWN_EX:
398 0 : err = f_setown_ex(filp, arg);
399 0 : break;
400 : case F_GETOWNER_UIDS:
401 3955 : err = f_getowner_uids(filp, arg);
402 : break;
403 0 : case F_GETSIG:
404 0 : err = filp->f_owner.signum;
405 0 : break;
406 : case F_SETSIG:
407 : /* arg == 0 restores default behaviour. */
408 0 : if (!valid_signal(arg)) {
409 : break;
410 : }
411 0 : err = 0;
412 0 : filp->f_owner.signum = arg;
413 0 : break;
414 0 : case F_GETLEASE:
415 0 : err = fcntl_getlease(filp);
416 0 : break;
417 0 : case F_SETLEASE:
418 0 : err = fcntl_setlease(fd, filp, arg);
419 0 : break;
420 : case F_NOTIFY:
421 3955 : err = fcntl_dirnotify(fd, filp, arg);
422 : break;
423 0 : case F_SETPIPE_SZ:
424 : case F_GETPIPE_SZ:
425 0 : err = pipe_fcntl(filp, cmd, arg);
426 0 : break;
427 0 : case F_ADD_SEALS:
428 : case F_GET_SEALS:
429 0 : err = memfd_fcntl(filp, cmd, arg);
430 0 : break;
431 0 : case F_GET_RW_HINT:
432 : case F_SET_RW_HINT:
433 : case F_GET_FILE_RW_HINT:
434 : case F_SET_FILE_RW_HINT:
435 0 : err = fcntl_rw_hint(filp, cmd, arg);
436 0 : break;
437 : default:
438 : break;
439 : }
440 0 : return err;
441 : }
442 :
443 3 : static int check_fcntl_cmd(unsigned cmd)
444 : {
445 3 : switch (cmd) {
446 : case F_DUPFD:
447 : case F_DUPFD_CLOEXEC:
448 : case F_GETFD:
449 : case F_SETFD:
450 : case F_GETFL:
451 : return 1;
452 : }
453 0 : return 0;
454 : }
455 :
456 7990 : SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
457 : {
458 3995 : struct fd f = fdget_raw(fd);
459 3995 : long err = -EBADF;
460 :
461 3995 : if (!f.file)
462 40 : goto out;
463 :
464 3955 : if (unlikely(f.file->f_mode & FMODE_PATH)) {
465 3 : if (!check_fcntl_cmd(cmd))
466 0 : goto out1;
467 : }
468 :
469 3955 : err = security_file_fcntl(f.file, cmd, arg);
470 3955 : if (!err)
471 3955 : err = do_fcntl(fd, cmd, arg, f.file);
472 :
473 0 : out1:
474 3963 : fdput(f);
475 3995 : out:
476 3995 : return err;
477 : }
478 :
479 : #if BITS_PER_LONG == 32
480 : SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd,
481 : unsigned long, arg)
482 : {
483 : void __user *argp = (void __user *)arg;
484 : struct fd f = fdget_raw(fd);
485 : struct flock64 flock;
486 : long err = -EBADF;
487 :
488 : if (!f.file)
489 : goto out;
490 :
491 : if (unlikely(f.file->f_mode & FMODE_PATH)) {
492 : if (!check_fcntl_cmd(cmd))
493 : goto out1;
494 : }
495 :
496 : err = security_file_fcntl(f.file, cmd, arg);
497 : if (err)
498 : goto out1;
499 :
500 : switch (cmd) {
501 : case F_GETLK64:
502 : case F_OFD_GETLK:
503 : err = -EFAULT;
504 : if (copy_from_user(&flock, argp, sizeof(flock)))
505 : break;
506 : err = fcntl_getlk64(f.file, cmd, &flock);
507 : if (!err && copy_to_user(argp, &flock, sizeof(flock)))
508 : err = -EFAULT;
509 : break;
510 : case F_SETLK64:
511 : case F_SETLKW64:
512 : case F_OFD_SETLK:
513 : case F_OFD_SETLKW:
514 : err = -EFAULT;
515 : if (copy_from_user(&flock, argp, sizeof(flock)))
516 : break;
517 : err = fcntl_setlk64(fd, f.file, cmd, &flock);
518 : break;
519 : default:
520 : err = do_fcntl(fd, cmd, arg, f.file);
521 : break;
522 : }
523 : out1:
524 : fdput(f);
525 : out:
526 : return err;
527 : }
528 : #endif
529 :
530 : #ifdef CONFIG_COMPAT
531 : /* careful - don't use anywhere else */
532 : #define copy_flock_fields(dst, src) \
533 : (dst)->l_type = (src)->l_type; \
534 : (dst)->l_whence = (src)->l_whence; \
535 : (dst)->l_start = (src)->l_start; \
536 : (dst)->l_len = (src)->l_len; \
537 : (dst)->l_pid = (src)->l_pid;
538 :
539 0 : static int get_compat_flock(struct flock *kfl, const struct compat_flock __user *ufl)
540 : {
541 0 : struct compat_flock fl;
542 :
543 0 : if (copy_from_user(&fl, ufl, sizeof(struct compat_flock)))
544 : return -EFAULT;
545 0 : copy_flock_fields(kfl, &fl);
546 0 : return 0;
547 : }
548 :
549 0 : static int get_compat_flock64(struct flock *kfl, const struct compat_flock64 __user *ufl)
550 : {
551 0 : struct compat_flock64 fl;
552 :
553 0 : if (copy_from_user(&fl, ufl, sizeof(struct compat_flock64)))
554 : return -EFAULT;
555 0 : copy_flock_fields(kfl, &fl);
556 0 : return 0;
557 : }
558 :
559 0 : static int put_compat_flock(const struct flock *kfl, struct compat_flock __user *ufl)
560 : {
561 0 : struct compat_flock fl;
562 :
563 0 : memset(&fl, 0, sizeof(struct compat_flock));
564 0 : copy_flock_fields(&fl, kfl);
565 0 : if (copy_to_user(ufl, &fl, sizeof(struct compat_flock)))
566 0 : return -EFAULT;
567 : return 0;
568 : }
569 :
570 0 : static int put_compat_flock64(const struct flock *kfl, struct compat_flock64 __user *ufl)
571 : {
572 0 : struct compat_flock64 fl;
573 :
574 0 : BUILD_BUG_ON(sizeof(kfl->l_start) > sizeof(ufl->l_start));
575 0 : BUILD_BUG_ON(sizeof(kfl->l_len) > sizeof(ufl->l_len));
576 :
577 0 : memset(&fl, 0, sizeof(struct compat_flock64));
578 0 : copy_flock_fields(&fl, kfl);
579 0 : if (copy_to_user(ufl, &fl, sizeof(struct compat_flock64)))
580 0 : return -EFAULT;
581 : return 0;
582 : }
583 : #undef copy_flock_fields
584 :
585 : static unsigned int
586 0 : convert_fcntl_cmd(unsigned int cmd)
587 : {
588 0 : switch (cmd) {
589 : case F_GETLK64:
590 : return F_GETLK;
591 : case F_SETLK64:
592 : return F_SETLK;
593 : case F_SETLKW64:
594 : return F_SETLKW;
595 : }
596 :
597 : return cmd;
598 : }
599 :
600 : /*
601 : * GETLK was successful and we need to return the data, but it needs to fit in
602 : * the compat structure.
603 : * l_start shouldn't be too big, unless the original start + end is greater than
604 : * COMPAT_OFF_T_MAX, in which case the app was asking for trouble, so we return
605 : * -EOVERFLOW in that case. l_len could be too big, in which case we just
606 : * truncate it, and only allow the app to see that part of the conflicting lock
607 : * that might make sense to it anyway
608 : */
609 0 : static int fixup_compat_flock(struct flock *flock)
610 : {
611 0 : if (flock->l_start > COMPAT_OFF_T_MAX)
612 : return -EOVERFLOW;
613 0 : if (flock->l_len > COMPAT_OFF_T_MAX)
614 0 : flock->l_len = COMPAT_OFF_T_MAX;
615 : return 0;
616 : }
617 :
618 0 : static long do_compat_fcntl64(unsigned int fd, unsigned int cmd,
619 : compat_ulong_t arg)
620 : {
621 0 : struct fd f = fdget_raw(fd);
622 0 : struct flock flock;
623 0 : long err = -EBADF;
624 :
625 0 : if (!f.file)
626 : return err;
627 :
628 0 : if (unlikely(f.file->f_mode & FMODE_PATH)) {
629 0 : if (!check_fcntl_cmd(cmd))
630 0 : goto out_put;
631 : }
632 :
633 0 : err = security_file_fcntl(f.file, cmd, arg);
634 0 : if (err)
635 0 : goto out_put;
636 :
637 0 : switch (cmd) {
638 : case F_GETLK:
639 0 : err = get_compat_flock(&flock, compat_ptr(arg));
640 0 : if (err)
641 : break;
642 0 : err = fcntl_getlk(f.file, convert_fcntl_cmd(cmd), &flock);
643 0 : if (err)
644 : break;
645 0 : err = fixup_compat_flock(&flock);
646 0 : if (!err)
647 0 : err = put_compat_flock(&flock, compat_ptr(arg));
648 : break;
649 : case F_GETLK64:
650 : case F_OFD_GETLK:
651 0 : err = get_compat_flock64(&flock, compat_ptr(arg));
652 0 : if (err)
653 : break;
654 0 : err = fcntl_getlk(f.file, convert_fcntl_cmd(cmd), &flock);
655 0 : if (!err)
656 0 : err = put_compat_flock64(&flock, compat_ptr(arg));
657 : break;
658 : case F_SETLK:
659 : case F_SETLKW:
660 0 : err = get_compat_flock(&flock, compat_ptr(arg));
661 0 : if (err)
662 : break;
663 0 : err = fcntl_setlk(fd, f.file, convert_fcntl_cmd(cmd), &flock);
664 0 : break;
665 : case F_SETLK64:
666 : case F_SETLKW64:
667 : case F_OFD_SETLK:
668 : case F_OFD_SETLKW:
669 0 : err = get_compat_flock64(&flock, compat_ptr(arg));
670 0 : if (err)
671 : break;
672 0 : err = fcntl_setlk(fd, f.file, convert_fcntl_cmd(cmd), &flock);
673 0 : break;
674 0 : default:
675 0 : err = do_fcntl(fd, cmd, arg, f.file);
676 0 : break;
677 : }
678 0 : out_put:
679 0 : fdput(f);
680 0 : return err;
681 : }
682 :
683 0 : COMPAT_SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd,
684 : compat_ulong_t, arg)
685 : {
686 0 : return do_compat_fcntl64(fd, cmd, arg);
687 : }
688 :
689 0 : COMPAT_SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd,
690 : compat_ulong_t, arg)
691 : {
692 0 : switch (cmd) {
693 : case F_GETLK64:
694 : case F_SETLK64:
695 : case F_SETLKW64:
696 : case F_OFD_GETLK:
697 : case F_OFD_SETLK:
698 : case F_OFD_SETLKW:
699 : return -EINVAL;
700 : }
701 0 : return do_compat_fcntl64(fd, cmd, arg);
702 : }
703 : #endif
704 :
705 : /* Table to convert sigio signal codes into poll band bitmaps */
706 :
707 : static const __poll_t band_table[NSIGPOLL] = {
708 : EPOLLIN | EPOLLRDNORM, /* POLL_IN */
709 : EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND, /* POLL_OUT */
710 : EPOLLIN | EPOLLRDNORM | EPOLLMSG, /* POLL_MSG */
711 : EPOLLERR, /* POLL_ERR */
712 : EPOLLPRI | EPOLLRDBAND, /* POLL_PRI */
713 : EPOLLHUP | EPOLLERR /* POLL_HUP */
714 : };
715 :
716 0 : static inline int sigio_perm(struct task_struct *p,
717 : struct fown_struct *fown, int sig)
718 : {
719 0 : const struct cred *cred;
720 0 : int ret;
721 :
722 0 : rcu_read_lock();
723 0 : cred = __task_cred(p);
724 0 : ret = ((uid_eq(fown->euid, GLOBAL_ROOT_UID) ||
725 0 : uid_eq(fown->euid, cred->suid) || uid_eq(fown->euid, cred->uid) ||
726 0 : uid_eq(fown->uid, cred->suid) || uid_eq(fown->uid, cred->uid)) &&
727 0 : !security_file_send_sigiotask(p, fown, sig));
728 0 : rcu_read_unlock();
729 0 : return ret;
730 : }
731 :
732 0 : static void send_sigio_to_task(struct task_struct *p,
733 : struct fown_struct *fown,
734 : int fd, int reason, enum pid_type type)
735 : {
736 : /*
737 : * F_SETSIG can change ->signum lockless in parallel, make
738 : * sure we read it once and use the same value throughout.
739 : */
740 0 : int signum = READ_ONCE(fown->signum);
741 :
742 0 : if (!sigio_perm(p, fown, signum))
743 : return;
744 :
745 0 : switch (signum) {
746 : default: {
747 0 : kernel_siginfo_t si;
748 :
749 : /* Queue a rt signal with the appropriate fd as its
750 : value. We use SI_SIGIO as the source, not
751 : SI_KERNEL, since kernel signals always get
752 : delivered even if we can't queue. Failure to
753 : queue in this case _should_ be reported; we fall
754 : back to SIGIO in that case. --sct */
755 0 : clear_siginfo(&si);
756 0 : si.si_signo = signum;
757 0 : si.si_errno = 0;
758 0 : si.si_code = reason;
759 : /*
760 : * Posix definies POLL_IN and friends to be signal
761 : * specific si_codes for SIG_POLL. Linux extended
762 : * these si_codes to other signals in a way that is
763 : * ambiguous if other signals also have signal
764 : * specific si_codes. In that case use SI_SIGIO instead
765 : * to remove the ambiguity.
766 : */
767 0 : if ((signum != SIGPOLL) && sig_specific_sicodes(signum))
768 0 : si.si_code = SI_SIGIO;
769 :
770 : /* Make sure we are called with one of the POLL_*
771 : reasons, otherwise we could leak kernel stack into
772 : userspace. */
773 0 : BUG_ON((reason < POLL_IN) || ((reason - POLL_IN) >= NSIGPOLL));
774 0 : if (reason - POLL_IN >= NSIGPOLL)
775 0 : si.si_band = ~0L;
776 : else
777 0 : si.si_band = mangle_poll(band_table[reason - POLL_IN]);
778 0 : si.si_fd = fd;
779 0 : if (!do_send_sig_info(signum, &si, p, type))
780 : break;
781 : }
782 0 : fallthrough; /* fall back on the old plain SIGIO signal */
783 : case 0:
784 0 : do_send_sig_info(SIGIO, SEND_SIG_PRIV, p, type);
785 : }
786 : }
787 :
788 0 : void send_sigio(struct fown_struct *fown, int fd, int band)
789 : {
790 0 : struct task_struct *p;
791 0 : enum pid_type type;
792 0 : unsigned long flags;
793 0 : struct pid *pid;
794 :
795 0 : read_lock_irqsave(&fown->lock, flags);
796 :
797 0 : type = fown->pid_type;
798 0 : pid = fown->pid;
799 0 : if (!pid)
800 0 : goto out_unlock_fown;
801 :
802 0 : if (type <= PIDTYPE_TGID) {
803 0 : rcu_read_lock();
804 0 : p = pid_task(pid, PIDTYPE_PID);
805 0 : if (p)
806 0 : send_sigio_to_task(p, fown, fd, band, type);
807 0 : rcu_read_unlock();
808 : } else {
809 0 : read_lock(&tasklist_lock);
810 0 : do_each_pid_task(pid, type, p) {
811 0 : send_sigio_to_task(p, fown, fd, band, type);
812 0 : } while_each_pid_task(pid, type, p);
813 0 : read_unlock(&tasklist_lock);
814 : }
815 0 : out_unlock_fown:
816 0 : read_unlock_irqrestore(&fown->lock, flags);
817 0 : }
818 :
819 0 : static void send_sigurg_to_task(struct task_struct *p,
820 : struct fown_struct *fown, enum pid_type type)
821 : {
822 0 : if (sigio_perm(p, fown, SIGURG))
823 0 : do_send_sig_info(SIGURG, SEND_SIG_PRIV, p, type);
824 0 : }
825 :
826 0 : int send_sigurg(struct fown_struct *fown)
827 : {
828 0 : struct task_struct *p;
829 0 : enum pid_type type;
830 0 : struct pid *pid;
831 0 : unsigned long flags;
832 0 : int ret = 0;
833 :
834 0 : read_lock_irqsave(&fown->lock, flags);
835 :
836 0 : type = fown->pid_type;
837 0 : pid = fown->pid;
838 0 : if (!pid)
839 0 : goto out_unlock_fown;
840 :
841 0 : ret = 1;
842 :
843 0 : if (type <= PIDTYPE_TGID) {
844 0 : rcu_read_lock();
845 0 : p = pid_task(pid, PIDTYPE_PID);
846 0 : if (p)
847 0 : send_sigurg_to_task(p, fown, type);
848 0 : rcu_read_unlock();
849 : } else {
850 0 : read_lock(&tasklist_lock);
851 0 : do_each_pid_task(pid, type, p) {
852 0 : send_sigurg_to_task(p, fown, type);
853 0 : } while_each_pid_task(pid, type, p);
854 0 : read_unlock(&tasklist_lock);
855 : }
856 0 : out_unlock_fown:
857 0 : read_unlock_irqrestore(&fown->lock, flags);
858 0 : return ret;
859 : }
860 :
861 : static DEFINE_SPINLOCK(fasync_lock);
862 : static struct kmem_cache *fasync_cache __read_mostly;
863 :
864 0 : static void fasync_free_rcu(struct rcu_head *head)
865 : {
866 0 : kmem_cache_free(fasync_cache,
867 0 : container_of(head, struct fasync_struct, fa_rcu));
868 0 : }
869 :
870 : /*
871 : * Remove a fasync entry. If successfully removed, return
872 : * positive and clear the FASYNC flag. If no entry exists,
873 : * do nothing and return 0.
874 : *
875 : * NOTE! It is very important that the FASYNC flag always
876 : * match the state "is the filp on a fasync list".
877 : *
878 : */
879 175 : int fasync_remove_entry(struct file *filp, struct fasync_struct **fapp)
880 : {
881 175 : struct fasync_struct *fa, **fp;
882 175 : int result = 0;
883 :
884 175 : spin_lock(&filp->f_lock);
885 175 : spin_lock(&fasync_lock);
886 350 : for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
887 0 : if (fa->fa_file != filp)
888 0 : continue;
889 :
890 0 : write_lock_irq(&fa->fa_lock);
891 0 : fa->fa_file = NULL;
892 0 : write_unlock_irq(&fa->fa_lock);
893 :
894 0 : *fp = fa->fa_next;
895 0 : call_rcu(&fa->fa_rcu, fasync_free_rcu);
896 0 : filp->f_flags &= ~FASYNC;
897 0 : result = 1;
898 0 : break;
899 : }
900 175 : spin_unlock(&fasync_lock);
901 175 : spin_unlock(&filp->f_lock);
902 175 : return result;
903 : }
904 :
905 0 : struct fasync_struct *fasync_alloc(void)
906 : {
907 0 : return kmem_cache_alloc(fasync_cache, GFP_KERNEL);
908 : }
909 :
910 : /*
911 : * NOTE! This can be used only for unused fasync entries:
912 : * entries that actually got inserted on the fasync list
913 : * need to be released by rcu - see fasync_remove_entry.
914 : */
915 0 : void fasync_free(struct fasync_struct *new)
916 : {
917 0 : kmem_cache_free(fasync_cache, new);
918 0 : }
919 :
920 : /*
921 : * Insert a new entry into the fasync list. Return the pointer to the
922 : * old one if we didn't use the new one.
923 : *
924 : * NOTE! It is very important that the FASYNC flag always
925 : * match the state "is the filp on a fasync list".
926 : */
927 0 : struct fasync_struct *fasync_insert_entry(int fd, struct file *filp, struct fasync_struct **fapp, struct fasync_struct *new)
928 : {
929 0 : struct fasync_struct *fa, **fp;
930 :
931 0 : spin_lock(&filp->f_lock);
932 0 : spin_lock(&fasync_lock);
933 0 : for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
934 0 : if (fa->fa_file != filp)
935 0 : continue;
936 :
937 0 : write_lock_irq(&fa->fa_lock);
938 0 : fa->fa_fd = fd;
939 0 : write_unlock_irq(&fa->fa_lock);
940 0 : goto out;
941 : }
942 :
943 0 : rwlock_init(&new->fa_lock);
944 0 : new->magic = FASYNC_MAGIC;
945 0 : new->fa_file = filp;
946 0 : new->fa_fd = fd;
947 0 : new->fa_next = *fapp;
948 0 : rcu_assign_pointer(*fapp, new);
949 0 : filp->f_flags |= FASYNC;
950 :
951 0 : out:
952 0 : spin_unlock(&fasync_lock);
953 0 : spin_unlock(&filp->f_lock);
954 0 : return fa;
955 : }
956 :
957 : /*
958 : * Add a fasync entry. Return negative on error, positive if
959 : * added, and zero if did nothing but change an existing one.
960 : */
961 0 : static int fasync_add_entry(int fd, struct file *filp, struct fasync_struct **fapp)
962 : {
963 0 : struct fasync_struct *new;
964 :
965 0 : new = fasync_alloc();
966 0 : if (!new)
967 : return -ENOMEM;
968 :
969 : /*
970 : * fasync_insert_entry() returns the old (update) entry if
971 : * it existed.
972 : *
973 : * So free the (unused) new entry and return 0 to let the
974 : * caller know that we didn't add any new fasync entries.
975 : */
976 0 : if (fasync_insert_entry(fd, filp, fapp, new)) {
977 0 : fasync_free(new);
978 0 : return 0;
979 : }
980 :
981 : return 1;
982 : }
983 :
984 : /*
985 : * fasync_helper() is used by almost all character device drivers
986 : * to set up the fasync queue, and for regular files by the file
987 : * lease code. It returns negative on error, 0 if it did no changes
988 : * and positive if it added/deleted the entry.
989 : */
990 175 : int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)
991 : {
992 175 : if (!on)
993 175 : return fasync_remove_entry(filp, fapp);
994 0 : return fasync_add_entry(fd, filp, fapp);
995 : }
996 :
997 : EXPORT_SYMBOL(fasync_helper);
998 :
999 : /*
1000 : * rcu_read_lock() is held
1001 : */
1002 0 : static void kill_fasync_rcu(struct fasync_struct *fa, int sig, int band)
1003 : {
1004 0 : while (fa) {
1005 0 : struct fown_struct *fown;
1006 :
1007 0 : if (fa->magic != FASYNC_MAGIC) {
1008 0 : printk(KERN_ERR "kill_fasync: bad magic number in "
1009 : "fasync_struct!\n");
1010 0 : return;
1011 : }
1012 0 : read_lock(&fa->fa_lock);
1013 0 : if (fa->fa_file) {
1014 0 : fown = &fa->fa_file->f_owner;
1015 : /* Don't send SIGURG to processes which have not set a
1016 : queued signum: SIGURG has its own default signalling
1017 : mechanism. */
1018 0 : if (!(sig == SIGURG && fown->signum == 0))
1019 0 : send_sigio(fown, fa->fa_fd, band);
1020 : }
1021 0 : read_unlock(&fa->fa_lock);
1022 0 : fa = rcu_dereference(fa->fa_next);
1023 : }
1024 : }
1025 :
1026 1577 : void kill_fasync(struct fasync_struct **fp, int sig, int band)
1027 : {
1028 : /* First a quick test without locking: usually
1029 : * the list is empty.
1030 : */
1031 1577 : if (*fp) {
1032 0 : rcu_read_lock();
1033 0 : kill_fasync_rcu(rcu_dereference(*fp), sig, band);
1034 0 : rcu_read_unlock();
1035 : }
1036 1577 : }
1037 : EXPORT_SYMBOL(kill_fasync);
1038 :
1039 1 : static int __init fcntl_init(void)
1040 : {
1041 : /*
1042 : * Please add new bits here to ensure allocation uniqueness.
1043 : * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
1044 : * is defined as O_NONBLOCK on some platforms and not on others.
1045 : */
1046 1 : BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ !=
1047 : HWEIGHT32(
1048 : (VALID_OPEN_FLAGS & ~(O_NONBLOCK | O_NDELAY)) |
1049 : __FMODE_EXEC | __FMODE_NONOTIFY));
1050 :
1051 1 : fasync_cache = kmem_cache_create("fasync_cache",
1052 : sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL);
1053 1 : return 0;
1054 : }
1055 :
1056 : module_init(fcntl_init)
|