Linux Audio

Check our new training course

Buildroot integration, development and maintenance

Need a Buildroot system for your embedded project?
Loading...
v4.6
  1/*
  2 *  linux/fs/fcntl.c
  3 *
  4 *  Copyright (C) 1991, 1992  Linus Torvalds
  5 */
  6
  7#include <linux/syscalls.h>
  8#include <linux/init.h>
  9#include <linux/mm.h>
 10#include <linux/fs.h>
 11#include <linux/file.h>
 12#include <linux/fdtable.h>
 13#include <linux/capability.h>
 14#include <linux/dnotify.h>
 15#include <linux/slab.h>
 16#include <linux/module.h>
 17#include <linux/pipe_fs_i.h>
 18#include <linux/security.h>
 19#include <linux/ptrace.h>
 20#include <linux/signal.h>
 21#include <linux/rcupdate.h>
 22#include <linux/pid_namespace.h>
 23#include <linux/user_namespace.h>
 24#include <linux/shmem_fs.h>
 25
 26#include <asm/poll.h>
 27#include <asm/siginfo.h>
 28#include <asm/uaccess.h>
 29
 30#define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
 31
 32static int setfl(int fd, struct file * filp, unsigned long arg)
 33{
 34	struct inode * inode = file_inode(filp);
 35	int error = 0;
 36
 37	/*
 38	 * O_APPEND cannot be cleared if the file is marked as append-only
 39	 * and the file is open for write.
 40	 */
 41	if (((arg ^ filp->f_flags) & O_APPEND) && IS_APPEND(inode))
 42		return -EPERM;
 43
 44	/* O_NOATIME can only be set by the owner or superuser */
 45	if ((arg & O_NOATIME) && !(filp->f_flags & O_NOATIME))
 46		if (!inode_owner_or_capable(inode))
 47			return -EPERM;
 48
 49	/* required for strict SunOS emulation */
 50	if (O_NONBLOCK != O_NDELAY)
 51	       if (arg & O_NDELAY)
 52		   arg |= O_NONBLOCK;
 53
 54	/* Pipe packetized mode is controlled by O_DIRECT flag */
 55	if (!S_ISFIFO(filp->f_inode->i_mode) && (arg & O_DIRECT)) {
 56		if (!filp->f_mapping || !filp->f_mapping->a_ops ||
 57			!filp->f_mapping->a_ops->direct_IO)
 58				return -EINVAL;
 59	}
 60
 61	if (filp->f_op->check_flags)
 62		error = filp->f_op->check_flags(arg);
 63	if (error)
 64		return error;
 65
 66	/*
 67	 * ->fasync() is responsible for setting the FASYNC bit.
 68	 */
 69	if (((arg ^ filp->f_flags) & FASYNC) && filp->f_op->fasync) {
 70		error = filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0);
 71		if (error < 0)
 72			goto out;
 73		if (error > 0)
 74			error = 0;
 75	}
 76	spin_lock(&filp->f_lock);
 77	filp->f_flags = (arg & SETFL_MASK) | (filp->f_flags & ~SETFL_MASK);
 78	spin_unlock(&filp->f_lock);
 79
 80 out:
 81	return error;
 82}
 83
 84static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
 85                     int force)
 86{
 87	write_lock_irq(&filp->f_owner.lock);
 88	if (force || !filp->f_owner.pid) {
 89		put_pid(filp->f_owner.pid);
 90		filp->f_owner.pid = get_pid(pid);
 91		filp->f_owner.pid_type = type;
 92
 93		if (pid) {
 94			const struct cred *cred = current_cred();
 95			filp->f_owner.uid = cred->uid;
 96			filp->f_owner.euid = cred->euid;
 97		}
 98	}
 99	write_unlock_irq(&filp->f_owner.lock);
100}
101
102void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
103		int force)
104{
105	security_file_set_fowner(filp);
 
 
 
 
 
106	f_modown(filp, pid, type, force);
 
107}
108EXPORT_SYMBOL(__f_setown);
109
110void f_setown(struct file *filp, unsigned long arg, int force)
111{
112	enum pid_type type;
113	struct pid *pid;
114	int who = arg;
 
115	type = PIDTYPE_PID;
116	if (who < 0) {
117		type = PIDTYPE_PGID;
118		who = -who;
119	}
120	rcu_read_lock();
121	pid = find_vpid(who);
122	__f_setown(filp, pid, type, force);
123	rcu_read_unlock();
 
124}
125EXPORT_SYMBOL(f_setown);
126
127void f_delown(struct file *filp)
128{
129	f_modown(filp, NULL, PIDTYPE_PID, 1);
130}
131
132pid_t f_getown(struct file *filp)
133{
134	pid_t pid;
135	read_lock(&filp->f_owner.lock);
136	pid = pid_vnr(filp->f_owner.pid);
137	if (filp->f_owner.pid_type == PIDTYPE_PGID)
138		pid = -pid;
139	read_unlock(&filp->f_owner.lock);
140	return pid;
141}
142
143static int f_setown_ex(struct file *filp, unsigned long arg)
144{
145	struct f_owner_ex __user *owner_p = (void __user *)arg;
146	struct f_owner_ex owner;
147	struct pid *pid;
148	int type;
149	int ret;
150
151	ret = copy_from_user(&owner, owner_p, sizeof(owner));
152	if (ret)
153		return -EFAULT;
154
155	switch (owner.type) {
156	case F_OWNER_TID:
157		type = PIDTYPE_MAX;
158		break;
159
160	case F_OWNER_PID:
161		type = PIDTYPE_PID;
162		break;
163
164	case F_OWNER_PGRP:
165		type = PIDTYPE_PGID;
166		break;
167
168	default:
169		return -EINVAL;
170	}
171
172	rcu_read_lock();
173	pid = find_vpid(owner.pid);
174	if (owner.pid && !pid)
175		ret = -ESRCH;
176	else
177		 __f_setown(filp, pid, type, 1);
178	rcu_read_unlock();
179
180	return ret;
181}
182
183static int f_getown_ex(struct file *filp, unsigned long arg)
184{
185	struct f_owner_ex __user *owner_p = (void __user *)arg;
186	struct f_owner_ex owner;
187	int ret = 0;
188
189	read_lock(&filp->f_owner.lock);
190	owner.pid = pid_vnr(filp->f_owner.pid);
191	switch (filp->f_owner.pid_type) {
192	case PIDTYPE_MAX:
193		owner.type = F_OWNER_TID;
194		break;
195
196	case PIDTYPE_PID:
197		owner.type = F_OWNER_PID;
198		break;
199
200	case PIDTYPE_PGID:
201		owner.type = F_OWNER_PGRP;
202		break;
203
204	default:
205		WARN_ON(1);
206		ret = -EINVAL;
207		break;
208	}
209	read_unlock(&filp->f_owner.lock);
210
211	if (!ret) {
212		ret = copy_to_user(owner_p, &owner, sizeof(owner));
213		if (ret)
214			ret = -EFAULT;
215	}
216	return ret;
217}
218
219#ifdef CONFIG_CHECKPOINT_RESTORE
220static int f_getowner_uids(struct file *filp, unsigned long arg)
221{
222	struct user_namespace *user_ns = current_user_ns();
223	uid_t __user *dst = (void __user *)arg;
224	uid_t src[2];
225	int err;
226
227	read_lock(&filp->f_owner.lock);
228	src[0] = from_kuid(user_ns, filp->f_owner.uid);
229	src[1] = from_kuid(user_ns, filp->f_owner.euid);
230	read_unlock(&filp->f_owner.lock);
231
232	err  = put_user(src[0], &dst[0]);
233	err |= put_user(src[1], &dst[1]);
234
235	return err;
236}
237#else
238static int f_getowner_uids(struct file *filp, unsigned long arg)
239{
240	return -EINVAL;
241}
242#endif
243
244static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
245		struct file *filp)
246{
247	long err = -EINVAL;
248
249	switch (cmd) {
250	case F_DUPFD:
251		err = f_dupfd(arg, filp, 0);
252		break;
253	case F_DUPFD_CLOEXEC:
254		err = f_dupfd(arg, filp, O_CLOEXEC);
255		break;
256	case F_GETFD:
257		err = get_close_on_exec(fd) ? FD_CLOEXEC : 0;
258		break;
259	case F_SETFD:
260		err = 0;
261		set_close_on_exec(fd, arg & FD_CLOEXEC);
262		break;
263	case F_GETFL:
264		err = filp->f_flags;
265		break;
266	case F_SETFL:
267		err = setfl(fd, filp, arg);
268		break;
269#if BITS_PER_LONG != 32
270	/* 32-bit arches must use fcntl64() */
271	case F_OFD_GETLK:
272#endif
273	case F_GETLK:
274		err = fcntl_getlk(filp, cmd, (struct flock __user *) arg);
275		break;
276#if BITS_PER_LONG != 32
277	/* 32-bit arches must use fcntl64() */
278	case F_OFD_SETLK:
279	case F_OFD_SETLKW:
280#endif
281		/* Fallthrough */
282	case F_SETLK:
283	case F_SETLKW:
284		err = fcntl_setlk(fd, filp, cmd, (struct flock __user *) arg);
285		break;
286	case F_GETOWN:
287		/*
288		 * XXX If f_owner is a process group, the
289		 * negative return value will get converted
290		 * into an error.  Oops.  If we keep the
291		 * current syscall conventions, the only way
292		 * to fix this will be in libc.
293		 */
294		err = f_getown(filp);
295		force_successful_syscall_return();
296		break;
297	case F_SETOWN:
298		f_setown(filp, arg, 1);
299		err = 0;
300		break;
301	case F_GETOWN_EX:
302		err = f_getown_ex(filp, arg);
303		break;
304	case F_SETOWN_EX:
305		err = f_setown_ex(filp, arg);
306		break;
307	case F_GETOWNER_UIDS:
308		err = f_getowner_uids(filp, arg);
309		break;
310	case F_GETSIG:
311		err = filp->f_owner.signum;
312		break;
313	case F_SETSIG:
314		/* arg == 0 restores default behaviour. */
315		if (!valid_signal(arg)) {
316			break;
317		}
318		err = 0;
319		filp->f_owner.signum = arg;
320		break;
321	case F_GETLEASE:
322		err = fcntl_getlease(filp);
323		break;
324	case F_SETLEASE:
325		err = fcntl_setlease(fd, filp, arg);
326		break;
327	case F_NOTIFY:
328		err = fcntl_dirnotify(fd, filp, arg);
329		break;
330	case F_SETPIPE_SZ:
331	case F_GETPIPE_SZ:
332		err = pipe_fcntl(filp, cmd, arg);
333		break;
334	case F_ADD_SEALS:
335	case F_GET_SEALS:
336		err = shmem_fcntl(filp, cmd, arg);
337		break;
338	default:
339		break;
340	}
341	return err;
342}
343
344static int check_fcntl_cmd(unsigned cmd)
345{
346	switch (cmd) {
347	case F_DUPFD:
348	case F_DUPFD_CLOEXEC:
349	case F_GETFD:
350	case F_SETFD:
351	case F_GETFL:
352		return 1;
353	}
354	return 0;
355}
356
357SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
358{	
359	struct fd f = fdget_raw(fd);
360	long err = -EBADF;
361
362	if (!f.file)
363		goto out;
364
365	if (unlikely(f.file->f_mode & FMODE_PATH)) {
366		if (!check_fcntl_cmd(cmd))
367			goto out1;
368	}
369
370	err = security_file_fcntl(f.file, cmd, arg);
371	if (!err)
372		err = do_fcntl(fd, cmd, arg, f.file);
373
374out1:
375 	fdput(f);
376out:
377	return err;
378}
379
380#if BITS_PER_LONG == 32
381SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd,
382		unsigned long, arg)
383{	
384	struct fd f = fdget_raw(fd);
385	long err = -EBADF;
386
387	if (!f.file)
388		goto out;
389
390	if (unlikely(f.file->f_mode & FMODE_PATH)) {
391		if (!check_fcntl_cmd(cmd))
392			goto out1;
393	}
394
395	err = security_file_fcntl(f.file, cmd, arg);
396	if (err)
397		goto out1;
398	
399	switch (cmd) {
400	case F_GETLK64:
401	case F_OFD_GETLK:
402		err = fcntl_getlk64(f.file, cmd, (struct flock64 __user *) arg);
403		break;
404	case F_SETLK64:
405	case F_SETLKW64:
406	case F_OFD_SETLK:
407	case F_OFD_SETLKW:
408		err = fcntl_setlk64(fd, f.file, cmd,
409				(struct flock64 __user *) arg);
410		break;
411	default:
412		err = do_fcntl(fd, cmd, arg, f.file);
413		break;
414	}
415out1:
416	fdput(f);
417out:
418	return err;
419}
420#endif
421
422/* Table to convert sigio signal codes into poll band bitmaps */
423
424static const long band_table[NSIGPOLL] = {
425	POLLIN | POLLRDNORM,			/* POLL_IN */
426	POLLOUT | POLLWRNORM | POLLWRBAND,	/* POLL_OUT */
427	POLLIN | POLLRDNORM | POLLMSG,		/* POLL_MSG */
428	POLLERR,				/* POLL_ERR */
429	POLLPRI | POLLRDBAND,			/* POLL_PRI */
430	POLLHUP | POLLERR			/* POLL_HUP */
431};
432
433static inline int sigio_perm(struct task_struct *p,
434                             struct fown_struct *fown, int sig)
435{
436	const struct cred *cred;
437	int ret;
438
439	rcu_read_lock();
440	cred = __task_cred(p);
441	ret = ((uid_eq(fown->euid, GLOBAL_ROOT_UID) ||
442		uid_eq(fown->euid, cred->suid) || uid_eq(fown->euid, cred->uid) ||
443		uid_eq(fown->uid,  cred->suid) || uid_eq(fown->uid,  cred->uid)) &&
444	       !security_file_send_sigiotask(p, fown, sig));
445	rcu_read_unlock();
446	return ret;
447}
448
449static void send_sigio_to_task(struct task_struct *p,
450			       struct fown_struct *fown,
451			       int fd, int reason, int group)
452{
453	/*
454	 * F_SETSIG can change ->signum lockless in parallel, make
455	 * sure we read it once and use the same value throughout.
456	 */
457	int signum = ACCESS_ONCE(fown->signum);
458
459	if (!sigio_perm(p, fown, signum))
460		return;
461
462	switch (signum) {
463		siginfo_t si;
464		default:
465			/* Queue a rt signal with the appropriate fd as its
466			   value.  We use SI_SIGIO as the source, not 
467			   SI_KERNEL, since kernel signals always get 
468			   delivered even if we can't queue.  Failure to
469			   queue in this case _should_ be reported; we fall
470			   back to SIGIO in that case. --sct */
471			si.si_signo = signum;
472			si.si_errno = 0;
473		        si.si_code  = reason;
474			/* Make sure we are called with one of the POLL_*
475			   reasons, otherwise we could leak kernel stack into
476			   userspace.  */
477			BUG_ON((reason & __SI_MASK) != __SI_POLL);
478			if (reason - POLL_IN >= NSIGPOLL)
479				si.si_band  = ~0L;
480			else
481				si.si_band = band_table[reason - POLL_IN];
482			si.si_fd    = fd;
483			if (!do_send_sig_info(signum, &si, p, group))
484				break;
485		/* fall-through: fall back on the old plain SIGIO signal */
486		case 0:
487			do_send_sig_info(SIGIO, SEND_SIG_PRIV, p, group);
488	}
489}
490
491void send_sigio(struct fown_struct *fown, int fd, int band)
492{
493	struct task_struct *p;
494	enum pid_type type;
495	struct pid *pid;
496	int group = 1;
497	
498	read_lock(&fown->lock);
499
500	type = fown->pid_type;
501	if (type == PIDTYPE_MAX) {
502		group = 0;
503		type = PIDTYPE_PID;
504	}
505
506	pid = fown->pid;
507	if (!pid)
508		goto out_unlock_fown;
509	
510	read_lock(&tasklist_lock);
511	do_each_pid_task(pid, type, p) {
512		send_sigio_to_task(p, fown, fd, band, group);
513	} while_each_pid_task(pid, type, p);
514	read_unlock(&tasklist_lock);
515 out_unlock_fown:
516	read_unlock(&fown->lock);
517}
518
519static void send_sigurg_to_task(struct task_struct *p,
520				struct fown_struct *fown, int group)
521{
522	if (sigio_perm(p, fown, SIGURG))
523		do_send_sig_info(SIGURG, SEND_SIG_PRIV, p, group);
524}
525
526int send_sigurg(struct fown_struct *fown)
527{
528	struct task_struct *p;
529	enum pid_type type;
530	struct pid *pid;
531	int group = 1;
532	int ret = 0;
533	
534	read_lock(&fown->lock);
535
536	type = fown->pid_type;
537	if (type == PIDTYPE_MAX) {
538		group = 0;
539		type = PIDTYPE_PID;
540	}
541
542	pid = fown->pid;
543	if (!pid)
544		goto out_unlock_fown;
545
546	ret = 1;
547	
548	read_lock(&tasklist_lock);
549	do_each_pid_task(pid, type, p) {
550		send_sigurg_to_task(p, fown, group);
551	} while_each_pid_task(pid, type, p);
552	read_unlock(&tasklist_lock);
553 out_unlock_fown:
554	read_unlock(&fown->lock);
555	return ret;
556}
557
558static DEFINE_SPINLOCK(fasync_lock);
559static struct kmem_cache *fasync_cache __read_mostly;
560
561static void fasync_free_rcu(struct rcu_head *head)
562{
563	kmem_cache_free(fasync_cache,
564			container_of(head, struct fasync_struct, fa_rcu));
565}
566
567/*
568 * Remove a fasync entry. If successfully removed, return
569 * positive and clear the FASYNC flag. If no entry exists,
570 * do nothing and return 0.
571 *
572 * NOTE! It is very important that the FASYNC flag always
573 * match the state "is the filp on a fasync list".
574 *
575 */
576int fasync_remove_entry(struct file *filp, struct fasync_struct **fapp)
577{
578	struct fasync_struct *fa, **fp;
579	int result = 0;
580
581	spin_lock(&filp->f_lock);
582	spin_lock(&fasync_lock);
583	for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
584		if (fa->fa_file != filp)
585			continue;
586
587		spin_lock_irq(&fa->fa_lock);
588		fa->fa_file = NULL;
589		spin_unlock_irq(&fa->fa_lock);
590
591		*fp = fa->fa_next;
592		call_rcu(&fa->fa_rcu, fasync_free_rcu);
593		filp->f_flags &= ~FASYNC;
594		result = 1;
595		break;
596	}
597	spin_unlock(&fasync_lock);
598	spin_unlock(&filp->f_lock);
599	return result;
600}
601
602struct fasync_struct *fasync_alloc(void)
603{
604	return kmem_cache_alloc(fasync_cache, GFP_KERNEL);
605}
606
607/*
608 * NOTE! This can be used only for unused fasync entries:
609 * entries that actually got inserted on the fasync list
610 * need to be released by rcu - see fasync_remove_entry.
611 */
612void fasync_free(struct fasync_struct *new)
613{
614	kmem_cache_free(fasync_cache, new);
615}
616
617/*
618 * Insert a new entry into the fasync list.  Return the pointer to the
619 * old one if we didn't use the new one.
620 *
621 * NOTE! It is very important that the FASYNC flag always
622 * match the state "is the filp on a fasync list".
623 */
624struct fasync_struct *fasync_insert_entry(int fd, struct file *filp, struct fasync_struct **fapp, struct fasync_struct *new)
625{
626        struct fasync_struct *fa, **fp;
627
628	spin_lock(&filp->f_lock);
629	spin_lock(&fasync_lock);
630	for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
631		if (fa->fa_file != filp)
632			continue;
633
634		spin_lock_irq(&fa->fa_lock);
635		fa->fa_fd = fd;
636		spin_unlock_irq(&fa->fa_lock);
637		goto out;
638	}
639
640	spin_lock_init(&new->fa_lock);
641	new->magic = FASYNC_MAGIC;
642	new->fa_file = filp;
643	new->fa_fd = fd;
644	new->fa_next = *fapp;
645	rcu_assign_pointer(*fapp, new);
646	filp->f_flags |= FASYNC;
647
648out:
649	spin_unlock(&fasync_lock);
650	spin_unlock(&filp->f_lock);
651	return fa;
652}
653
654/*
655 * Add a fasync entry. Return negative on error, positive if
656 * added, and zero if did nothing but change an existing one.
657 */
658static int fasync_add_entry(int fd, struct file *filp, struct fasync_struct **fapp)
659{
660	struct fasync_struct *new;
661
662	new = fasync_alloc();
663	if (!new)
664		return -ENOMEM;
665
666	/*
667	 * fasync_insert_entry() returns the old (update) entry if
668	 * it existed.
669	 *
670	 * So free the (unused) new entry and return 0 to let the
671	 * caller know that we didn't add any new fasync entries.
672	 */
673	if (fasync_insert_entry(fd, filp, fapp, new)) {
674		fasync_free(new);
675		return 0;
676	}
677
678	return 1;
679}
680
681/*
682 * fasync_helper() is used by almost all character device drivers
683 * to set up the fasync queue, and for regular files by the file
684 * lease code. It returns negative on error, 0 if it did no changes
685 * and positive if it added/deleted the entry.
686 */
687int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)
688{
689	if (!on)
690		return fasync_remove_entry(filp, fapp);
691	return fasync_add_entry(fd, filp, fapp);
692}
693
694EXPORT_SYMBOL(fasync_helper);
695
696/*
697 * rcu_read_lock() is held
698 */
699static void kill_fasync_rcu(struct fasync_struct *fa, int sig, int band)
700{
701	while (fa) {
702		struct fown_struct *fown;
703		unsigned long flags;
704
705		if (fa->magic != FASYNC_MAGIC) {
706			printk(KERN_ERR "kill_fasync: bad magic number in "
707			       "fasync_struct!\n");
708			return;
709		}
710		spin_lock_irqsave(&fa->fa_lock, flags);
711		if (fa->fa_file) {
712			fown = &fa->fa_file->f_owner;
713			/* Don't send SIGURG to processes which have not set a
714			   queued signum: SIGURG has its own default signalling
715			   mechanism. */
716			if (!(sig == SIGURG && fown->signum == 0))
717				send_sigio(fown, fa->fa_fd, band);
718		}
719		spin_unlock_irqrestore(&fa->fa_lock, flags);
720		fa = rcu_dereference(fa->fa_next);
721	}
722}
723
724void kill_fasync(struct fasync_struct **fp, int sig, int band)
725{
726	/* First a quick test without locking: usually
727	 * the list is empty.
728	 */
729	if (*fp) {
730		rcu_read_lock();
731		kill_fasync_rcu(rcu_dereference(*fp), sig, band);
732		rcu_read_unlock();
733	}
734}
735EXPORT_SYMBOL(kill_fasync);
736
737static int __init fcntl_init(void)
738{
739	/*
740	 * Please add new bits here to ensure allocation uniqueness.
741	 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
742	 * is defined as O_NONBLOCK on some platforms and not on others.
743	 */
744	BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32(
745		O_RDONLY	| O_WRONLY	| O_RDWR	|
746		O_CREAT		| O_EXCL	| O_NOCTTY	|
747		O_TRUNC		| O_APPEND	| /* O_NONBLOCK	| */
748		__O_SYNC	| O_DSYNC	| FASYNC	|
749		O_DIRECT	| O_LARGEFILE	| O_DIRECTORY	|
750		O_NOFOLLOW	| O_NOATIME	| O_CLOEXEC	|
751		__FMODE_EXEC	| O_PATH	| __O_TMPFILE	|
752		__FMODE_NONOTIFY
753		));
754
755	fasync_cache = kmem_cache_create("fasync_cache",
756		sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL);
757	return 0;
758}
759
760module_init(fcntl_init)
v3.15
  1/*
  2 *  linux/fs/fcntl.c
  3 *
  4 *  Copyright (C) 1991, 1992  Linus Torvalds
  5 */
  6
  7#include <linux/syscalls.h>
  8#include <linux/init.h>
  9#include <linux/mm.h>
 10#include <linux/fs.h>
 11#include <linux/file.h>
 12#include <linux/fdtable.h>
 13#include <linux/capability.h>
 14#include <linux/dnotify.h>
 15#include <linux/slab.h>
 16#include <linux/module.h>
 17#include <linux/pipe_fs_i.h>
 18#include <linux/security.h>
 19#include <linux/ptrace.h>
 20#include <linux/signal.h>
 21#include <linux/rcupdate.h>
 22#include <linux/pid_namespace.h>
 23#include <linux/user_namespace.h>
 
 24
 25#include <asm/poll.h>
 26#include <asm/siginfo.h>
 27#include <asm/uaccess.h>
 28
 29#define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
 30
 31static int setfl(int fd, struct file * filp, unsigned long arg)
 32{
 33	struct inode * inode = file_inode(filp);
 34	int error = 0;
 35
 36	/*
 37	 * O_APPEND cannot be cleared if the file is marked as append-only
 38	 * and the file is open for write.
 39	 */
 40	if (((arg ^ filp->f_flags) & O_APPEND) && IS_APPEND(inode))
 41		return -EPERM;
 42
 43	/* O_NOATIME can only be set by the owner or superuser */
 44	if ((arg & O_NOATIME) && !(filp->f_flags & O_NOATIME))
 45		if (!inode_owner_or_capable(inode))
 46			return -EPERM;
 47
 48	/* required for strict SunOS emulation */
 49	if (O_NONBLOCK != O_NDELAY)
 50	       if (arg & O_NDELAY)
 51		   arg |= O_NONBLOCK;
 52
 53	if (arg & O_DIRECT) {
 
 54		if (!filp->f_mapping || !filp->f_mapping->a_ops ||
 55			!filp->f_mapping->a_ops->direct_IO)
 56				return -EINVAL;
 57	}
 58
 59	if (filp->f_op->check_flags)
 60		error = filp->f_op->check_flags(arg);
 61	if (error)
 62		return error;
 63
 64	/*
 65	 * ->fasync() is responsible for setting the FASYNC bit.
 66	 */
 67	if (((arg ^ filp->f_flags) & FASYNC) && filp->f_op->fasync) {
 68		error = filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0);
 69		if (error < 0)
 70			goto out;
 71		if (error > 0)
 72			error = 0;
 73	}
 74	spin_lock(&filp->f_lock);
 75	filp->f_flags = (arg & SETFL_MASK) | (filp->f_flags & ~SETFL_MASK);
 76	spin_unlock(&filp->f_lock);
 77
 78 out:
 79	return error;
 80}
 81
 82static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
 83                     int force)
 84{
 85	write_lock_irq(&filp->f_owner.lock);
 86	if (force || !filp->f_owner.pid) {
 87		put_pid(filp->f_owner.pid);
 88		filp->f_owner.pid = get_pid(pid);
 89		filp->f_owner.pid_type = type;
 90
 91		if (pid) {
 92			const struct cred *cred = current_cred();
 93			filp->f_owner.uid = cred->uid;
 94			filp->f_owner.euid = cred->euid;
 95		}
 96	}
 97	write_unlock_irq(&filp->f_owner.lock);
 98}
 99
100int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
101		int force)
102{
103	int err;
104
105	err = security_file_set_fowner(filp);
106	if (err)
107		return err;
108
109	f_modown(filp, pid, type, force);
110	return 0;
111}
112EXPORT_SYMBOL(__f_setown);
113
114int f_setown(struct file *filp, unsigned long arg, int force)
115{
116	enum pid_type type;
117	struct pid *pid;
118	int who = arg;
119	int result;
120	type = PIDTYPE_PID;
121	if (who < 0) {
122		type = PIDTYPE_PGID;
123		who = -who;
124	}
125	rcu_read_lock();
126	pid = find_vpid(who);
127	result = __f_setown(filp, pid, type, force);
128	rcu_read_unlock();
129	return result;
130}
131EXPORT_SYMBOL(f_setown);
132
133void f_delown(struct file *filp)
134{
135	f_modown(filp, NULL, PIDTYPE_PID, 1);
136}
137
138pid_t f_getown(struct file *filp)
139{
140	pid_t pid;
141	read_lock(&filp->f_owner.lock);
142	pid = pid_vnr(filp->f_owner.pid);
143	if (filp->f_owner.pid_type == PIDTYPE_PGID)
144		pid = -pid;
145	read_unlock(&filp->f_owner.lock);
146	return pid;
147}
148
149static int f_setown_ex(struct file *filp, unsigned long arg)
150{
151	struct f_owner_ex __user *owner_p = (void __user *)arg;
152	struct f_owner_ex owner;
153	struct pid *pid;
154	int type;
155	int ret;
156
157	ret = copy_from_user(&owner, owner_p, sizeof(owner));
158	if (ret)
159		return -EFAULT;
160
161	switch (owner.type) {
162	case F_OWNER_TID:
163		type = PIDTYPE_MAX;
164		break;
165
166	case F_OWNER_PID:
167		type = PIDTYPE_PID;
168		break;
169
170	case F_OWNER_PGRP:
171		type = PIDTYPE_PGID;
172		break;
173
174	default:
175		return -EINVAL;
176	}
177
178	rcu_read_lock();
179	pid = find_vpid(owner.pid);
180	if (owner.pid && !pid)
181		ret = -ESRCH;
182	else
183		ret = __f_setown(filp, pid, type, 1);
184	rcu_read_unlock();
185
186	return ret;
187}
188
189static int f_getown_ex(struct file *filp, unsigned long arg)
190{
191	struct f_owner_ex __user *owner_p = (void __user *)arg;
192	struct f_owner_ex owner;
193	int ret = 0;
194
195	read_lock(&filp->f_owner.lock);
196	owner.pid = pid_vnr(filp->f_owner.pid);
197	switch (filp->f_owner.pid_type) {
198	case PIDTYPE_MAX:
199		owner.type = F_OWNER_TID;
200		break;
201
202	case PIDTYPE_PID:
203		owner.type = F_OWNER_PID;
204		break;
205
206	case PIDTYPE_PGID:
207		owner.type = F_OWNER_PGRP;
208		break;
209
210	default:
211		WARN_ON(1);
212		ret = -EINVAL;
213		break;
214	}
215	read_unlock(&filp->f_owner.lock);
216
217	if (!ret) {
218		ret = copy_to_user(owner_p, &owner, sizeof(owner));
219		if (ret)
220			ret = -EFAULT;
221	}
222	return ret;
223}
224
225#ifdef CONFIG_CHECKPOINT_RESTORE
226static int f_getowner_uids(struct file *filp, unsigned long arg)
227{
228	struct user_namespace *user_ns = current_user_ns();
229	uid_t __user *dst = (void __user *)arg;
230	uid_t src[2];
231	int err;
232
233	read_lock(&filp->f_owner.lock);
234	src[0] = from_kuid(user_ns, filp->f_owner.uid);
235	src[1] = from_kuid(user_ns, filp->f_owner.euid);
236	read_unlock(&filp->f_owner.lock);
237
238	err  = put_user(src[0], &dst[0]);
239	err |= put_user(src[1], &dst[1]);
240
241	return err;
242}
243#else
244static int f_getowner_uids(struct file *filp, unsigned long arg)
245{
246	return -EINVAL;
247}
248#endif
249
250static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
251		struct file *filp)
252{
253	long err = -EINVAL;
254
255	switch (cmd) {
256	case F_DUPFD:
257		err = f_dupfd(arg, filp, 0);
258		break;
259	case F_DUPFD_CLOEXEC:
260		err = f_dupfd(arg, filp, O_CLOEXEC);
261		break;
262	case F_GETFD:
263		err = get_close_on_exec(fd) ? FD_CLOEXEC : 0;
264		break;
265	case F_SETFD:
266		err = 0;
267		set_close_on_exec(fd, arg & FD_CLOEXEC);
268		break;
269	case F_GETFL:
270		err = filp->f_flags;
271		break;
272	case F_SETFL:
273		err = setfl(fd, filp, arg);
274		break;
275#if BITS_PER_LONG != 32
276	/* 32-bit arches must use fcntl64() */
277	case F_OFD_GETLK:
278#endif
279	case F_GETLK:
280		err = fcntl_getlk(filp, cmd, (struct flock __user *) arg);
281		break;
282#if BITS_PER_LONG != 32
283	/* 32-bit arches must use fcntl64() */
284	case F_OFD_SETLK:
285	case F_OFD_SETLKW:
286#endif
287		/* Fallthrough */
288	case F_SETLK:
289	case F_SETLKW:
290		err = fcntl_setlk(fd, filp, cmd, (struct flock __user *) arg);
291		break;
292	case F_GETOWN:
293		/*
294		 * XXX If f_owner is a process group, the
295		 * negative return value will get converted
296		 * into an error.  Oops.  If we keep the
297		 * current syscall conventions, the only way
298		 * to fix this will be in libc.
299		 */
300		err = f_getown(filp);
301		force_successful_syscall_return();
302		break;
303	case F_SETOWN:
304		err = f_setown(filp, arg, 1);
 
305		break;
306	case F_GETOWN_EX:
307		err = f_getown_ex(filp, arg);
308		break;
309	case F_SETOWN_EX:
310		err = f_setown_ex(filp, arg);
311		break;
312	case F_GETOWNER_UIDS:
313		err = f_getowner_uids(filp, arg);
314		break;
315	case F_GETSIG:
316		err = filp->f_owner.signum;
317		break;
318	case F_SETSIG:
319		/* arg == 0 restores default behaviour. */
320		if (!valid_signal(arg)) {
321			break;
322		}
323		err = 0;
324		filp->f_owner.signum = arg;
325		break;
326	case F_GETLEASE:
327		err = fcntl_getlease(filp);
328		break;
329	case F_SETLEASE:
330		err = fcntl_setlease(fd, filp, arg);
331		break;
332	case F_NOTIFY:
333		err = fcntl_dirnotify(fd, filp, arg);
334		break;
335	case F_SETPIPE_SZ:
336	case F_GETPIPE_SZ:
337		err = pipe_fcntl(filp, cmd, arg);
338		break;
 
 
 
 
339	default:
340		break;
341	}
342	return err;
343}
344
345static int check_fcntl_cmd(unsigned cmd)
346{
347	switch (cmd) {
348	case F_DUPFD:
349	case F_DUPFD_CLOEXEC:
350	case F_GETFD:
351	case F_SETFD:
352	case F_GETFL:
353		return 1;
354	}
355	return 0;
356}
357
358SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
359{	
360	struct fd f = fdget_raw(fd);
361	long err = -EBADF;
362
363	if (!f.file)
364		goto out;
365
366	if (unlikely(f.file->f_mode & FMODE_PATH)) {
367		if (!check_fcntl_cmd(cmd))
368			goto out1;
369	}
370
371	err = security_file_fcntl(f.file, cmd, arg);
372	if (!err)
373		err = do_fcntl(fd, cmd, arg, f.file);
374
375out1:
376 	fdput(f);
377out:
378	return err;
379}
380
381#if BITS_PER_LONG == 32
382SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd,
383		unsigned long, arg)
384{	
385	struct fd f = fdget_raw(fd);
386	long err = -EBADF;
387
388	if (!f.file)
389		goto out;
390
391	if (unlikely(f.file->f_mode & FMODE_PATH)) {
392		if (!check_fcntl_cmd(cmd))
393			goto out1;
394	}
395
396	err = security_file_fcntl(f.file, cmd, arg);
397	if (err)
398		goto out1;
399	
400	switch (cmd) {
401	case F_GETLK64:
402	case F_OFD_GETLK:
403		err = fcntl_getlk64(f.file, cmd, (struct flock64 __user *) arg);
404		break;
405	case F_SETLK64:
406	case F_SETLKW64:
407	case F_OFD_SETLK:
408	case F_OFD_SETLKW:
409		err = fcntl_setlk64(fd, f.file, cmd,
410				(struct flock64 __user *) arg);
411		break;
412	default:
413		err = do_fcntl(fd, cmd, arg, f.file);
414		break;
415	}
416out1:
417	fdput(f);
418out:
419	return err;
420}
421#endif
422
423/* Table to convert sigio signal codes into poll band bitmaps */
424
425static const long band_table[NSIGPOLL] = {
426	POLLIN | POLLRDNORM,			/* POLL_IN */
427	POLLOUT | POLLWRNORM | POLLWRBAND,	/* POLL_OUT */
428	POLLIN | POLLRDNORM | POLLMSG,		/* POLL_MSG */
429	POLLERR,				/* POLL_ERR */
430	POLLPRI | POLLRDBAND,			/* POLL_PRI */
431	POLLHUP | POLLERR			/* POLL_HUP */
432};
433
434static inline int sigio_perm(struct task_struct *p,
435                             struct fown_struct *fown, int sig)
436{
437	const struct cred *cred;
438	int ret;
439
440	rcu_read_lock();
441	cred = __task_cred(p);
442	ret = ((uid_eq(fown->euid, GLOBAL_ROOT_UID) ||
443		uid_eq(fown->euid, cred->suid) || uid_eq(fown->euid, cred->uid) ||
444		uid_eq(fown->uid,  cred->suid) || uid_eq(fown->uid,  cred->uid)) &&
445	       !security_file_send_sigiotask(p, fown, sig));
446	rcu_read_unlock();
447	return ret;
448}
449
450static void send_sigio_to_task(struct task_struct *p,
451			       struct fown_struct *fown,
452			       int fd, int reason, int group)
453{
454	/*
455	 * F_SETSIG can change ->signum lockless in parallel, make
456	 * sure we read it once and use the same value throughout.
457	 */
458	int signum = ACCESS_ONCE(fown->signum);
459
460	if (!sigio_perm(p, fown, signum))
461		return;
462
463	switch (signum) {
464		siginfo_t si;
465		default:
466			/* Queue a rt signal with the appropriate fd as its
467			   value.  We use SI_SIGIO as the source, not 
468			   SI_KERNEL, since kernel signals always get 
469			   delivered even if we can't queue.  Failure to
470			   queue in this case _should_ be reported; we fall
471			   back to SIGIO in that case. --sct */
472			si.si_signo = signum;
473			si.si_errno = 0;
474		        si.si_code  = reason;
475			/* Make sure we are called with one of the POLL_*
476			   reasons, otherwise we could leak kernel stack into
477			   userspace.  */
478			BUG_ON((reason & __SI_MASK) != __SI_POLL);
479			if (reason - POLL_IN >= NSIGPOLL)
480				si.si_band  = ~0L;
481			else
482				si.si_band = band_table[reason - POLL_IN];
483			si.si_fd    = fd;
484			if (!do_send_sig_info(signum, &si, p, group))
485				break;
486		/* fall-through: fall back on the old plain SIGIO signal */
487		case 0:
488			do_send_sig_info(SIGIO, SEND_SIG_PRIV, p, group);
489	}
490}
491
492void send_sigio(struct fown_struct *fown, int fd, int band)
493{
494	struct task_struct *p;
495	enum pid_type type;
496	struct pid *pid;
497	int group = 1;
498	
499	read_lock(&fown->lock);
500
501	type = fown->pid_type;
502	if (type == PIDTYPE_MAX) {
503		group = 0;
504		type = PIDTYPE_PID;
505	}
506
507	pid = fown->pid;
508	if (!pid)
509		goto out_unlock_fown;
510	
511	read_lock(&tasklist_lock);
512	do_each_pid_task(pid, type, p) {
513		send_sigio_to_task(p, fown, fd, band, group);
514	} while_each_pid_task(pid, type, p);
515	read_unlock(&tasklist_lock);
516 out_unlock_fown:
517	read_unlock(&fown->lock);
518}
519
520static void send_sigurg_to_task(struct task_struct *p,
521				struct fown_struct *fown, int group)
522{
523	if (sigio_perm(p, fown, SIGURG))
524		do_send_sig_info(SIGURG, SEND_SIG_PRIV, p, group);
525}
526
527int send_sigurg(struct fown_struct *fown)
528{
529	struct task_struct *p;
530	enum pid_type type;
531	struct pid *pid;
532	int group = 1;
533	int ret = 0;
534	
535	read_lock(&fown->lock);
536
537	type = fown->pid_type;
538	if (type == PIDTYPE_MAX) {
539		group = 0;
540		type = PIDTYPE_PID;
541	}
542
543	pid = fown->pid;
544	if (!pid)
545		goto out_unlock_fown;
546
547	ret = 1;
548	
549	read_lock(&tasklist_lock);
550	do_each_pid_task(pid, type, p) {
551		send_sigurg_to_task(p, fown, group);
552	} while_each_pid_task(pid, type, p);
553	read_unlock(&tasklist_lock);
554 out_unlock_fown:
555	read_unlock(&fown->lock);
556	return ret;
557}
558
559static DEFINE_SPINLOCK(fasync_lock);
560static struct kmem_cache *fasync_cache __read_mostly;
561
562static void fasync_free_rcu(struct rcu_head *head)
563{
564	kmem_cache_free(fasync_cache,
565			container_of(head, struct fasync_struct, fa_rcu));
566}
567
568/*
569 * Remove a fasync entry. If successfully removed, return
570 * positive and clear the FASYNC flag. If no entry exists,
571 * do nothing and return 0.
572 *
573 * NOTE! It is very important that the FASYNC flag always
574 * match the state "is the filp on a fasync list".
575 *
576 */
577int fasync_remove_entry(struct file *filp, struct fasync_struct **fapp)
578{
579	struct fasync_struct *fa, **fp;
580	int result = 0;
581
582	spin_lock(&filp->f_lock);
583	spin_lock(&fasync_lock);
584	for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
585		if (fa->fa_file != filp)
586			continue;
587
588		spin_lock_irq(&fa->fa_lock);
589		fa->fa_file = NULL;
590		spin_unlock_irq(&fa->fa_lock);
591
592		*fp = fa->fa_next;
593		call_rcu(&fa->fa_rcu, fasync_free_rcu);
594		filp->f_flags &= ~FASYNC;
595		result = 1;
596		break;
597	}
598	spin_unlock(&fasync_lock);
599	spin_unlock(&filp->f_lock);
600	return result;
601}
602
603struct fasync_struct *fasync_alloc(void)
604{
605	return kmem_cache_alloc(fasync_cache, GFP_KERNEL);
606}
607
608/*
609 * NOTE! This can be used only for unused fasync entries:
610 * entries that actually got inserted on the fasync list
611 * need to be released by rcu - see fasync_remove_entry.
612 */
613void fasync_free(struct fasync_struct *new)
614{
615	kmem_cache_free(fasync_cache, new);
616}
617
618/*
619 * Insert a new entry into the fasync list.  Return the pointer to the
620 * old one if we didn't use the new one.
621 *
622 * NOTE! It is very important that the FASYNC flag always
623 * match the state "is the filp on a fasync list".
624 */
625struct fasync_struct *fasync_insert_entry(int fd, struct file *filp, struct fasync_struct **fapp, struct fasync_struct *new)
626{
627        struct fasync_struct *fa, **fp;
628
629	spin_lock(&filp->f_lock);
630	spin_lock(&fasync_lock);
631	for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {
632		if (fa->fa_file != filp)
633			continue;
634
635		spin_lock_irq(&fa->fa_lock);
636		fa->fa_fd = fd;
637		spin_unlock_irq(&fa->fa_lock);
638		goto out;
639	}
640
641	spin_lock_init(&new->fa_lock);
642	new->magic = FASYNC_MAGIC;
643	new->fa_file = filp;
644	new->fa_fd = fd;
645	new->fa_next = *fapp;
646	rcu_assign_pointer(*fapp, new);
647	filp->f_flags |= FASYNC;
648
649out:
650	spin_unlock(&fasync_lock);
651	spin_unlock(&filp->f_lock);
652	return fa;
653}
654
655/*
656 * Add a fasync entry. Return negative on error, positive if
657 * added, and zero if did nothing but change an existing one.
658 */
659static int fasync_add_entry(int fd, struct file *filp, struct fasync_struct **fapp)
660{
661	struct fasync_struct *new;
662
663	new = fasync_alloc();
664	if (!new)
665		return -ENOMEM;
666
667	/*
668	 * fasync_insert_entry() returns the old (update) entry if
669	 * it existed.
670	 *
671	 * So free the (unused) new entry and return 0 to let the
672	 * caller know that we didn't add any new fasync entries.
673	 */
674	if (fasync_insert_entry(fd, filp, fapp, new)) {
675		fasync_free(new);
676		return 0;
677	}
678
679	return 1;
680}
681
682/*
683 * fasync_helper() is used by almost all character device drivers
684 * to set up the fasync queue, and for regular files by the file
685 * lease code. It returns negative on error, 0 if it did no changes
686 * and positive if it added/deleted the entry.
687 */
688int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)
689{
690	if (!on)
691		return fasync_remove_entry(filp, fapp);
692	return fasync_add_entry(fd, filp, fapp);
693}
694
695EXPORT_SYMBOL(fasync_helper);
696
697/*
698 * rcu_read_lock() is held
699 */
700static void kill_fasync_rcu(struct fasync_struct *fa, int sig, int band)
701{
702	while (fa) {
703		struct fown_struct *fown;
704		unsigned long flags;
705
706		if (fa->magic != FASYNC_MAGIC) {
707			printk(KERN_ERR "kill_fasync: bad magic number in "
708			       "fasync_struct!\n");
709			return;
710		}
711		spin_lock_irqsave(&fa->fa_lock, flags);
712		if (fa->fa_file) {
713			fown = &fa->fa_file->f_owner;
714			/* Don't send SIGURG to processes which have not set a
715			   queued signum: SIGURG has its own default signalling
716			   mechanism. */
717			if (!(sig == SIGURG && fown->signum == 0))
718				send_sigio(fown, fa->fa_fd, band);
719		}
720		spin_unlock_irqrestore(&fa->fa_lock, flags);
721		fa = rcu_dereference(fa->fa_next);
722	}
723}
724
725void kill_fasync(struct fasync_struct **fp, int sig, int band)
726{
727	/* First a quick test without locking: usually
728	 * the list is empty.
729	 */
730	if (*fp) {
731		rcu_read_lock();
732		kill_fasync_rcu(rcu_dereference(*fp), sig, band);
733		rcu_read_unlock();
734	}
735}
736EXPORT_SYMBOL(kill_fasync);
737
738static int __init fcntl_init(void)
739{
740	/*
741	 * Please add new bits here to ensure allocation uniqueness.
742	 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
743	 * is defined as O_NONBLOCK on some platforms and not on others.
744	 */
745	BUILD_BUG_ON(20 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32(
746		O_RDONLY	| O_WRONLY	| O_RDWR	|
747		O_CREAT		| O_EXCL	| O_NOCTTY	|
748		O_TRUNC		| O_APPEND	| /* O_NONBLOCK	| */
749		__O_SYNC	| O_DSYNC	| FASYNC	|
750		O_DIRECT	| O_LARGEFILE	| O_DIRECTORY	|
751		O_NOFOLLOW	| O_NOATIME	| O_CLOEXEC	|
752		__FMODE_EXEC	| O_PATH	| __O_TMPFILE
 
753		));
754
755	fasync_cache = kmem_cache_create("fasync_cache",
756		sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL);
757	return 0;
758}
759
760module_init(fcntl_init)