security: make security_file_set_fowner, f_setown and __f_setown void return
authorJeff Layton <jlayton@primarydata.com>
Fri, 22 Aug 2014 15:27:32 +0000 (11:27 -0400)
committerJeff Layton <jlayton@primarydata.com>
Tue, 9 Sep 2014 20:01:36 +0000 (16:01 -0400)
security_file_set_fowner always returns 0, so make it f_setown and
__f_setown void return functions and fix up the error handling in the
callers.

Cc: linux-security-module@vger.kernel.org
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
12 files changed:
drivers/net/tun.c
drivers/tty/tty_io.c
fs/fcntl.c
fs/locks.c
fs/notify/dnotify/dnotify.c
include/linux/fs.h
include/linux/security.h
net/socket.c
security/capability.c
security/security.c
security/selinux/hooks.c
security/smack/smack_lsm.c

index acaaf6784179b04bf227de6fefb770f3e744a231..186ce541c65762f8ee1720aae7f573f145982406 100644 (file)
@@ -2152,9 +2152,7 @@ static int tun_chr_fasync(int fd, struct file *file, int on)
                goto out;
 
        if (on) {
-               ret = __f_setown(file, task_pid(current), PIDTYPE_PID, 0);
-               if (ret)
-                       goto out;
+               __f_setown(file, task_pid(current), PIDTYPE_PID, 0);
                tfile->flags |= TUN_FASYNC;
        } else
                tfile->flags &= ~TUN_FASYNC;
index 8fbad3410c7581038b195510b7636fa85cd135d4..aea3b66f7bf25729c79d4cb46fa837e9c810f7e1 100644 (file)
@@ -2163,8 +2163,9 @@ static int __tty_fasync(int fd, struct file *filp, int on)
                }
                get_pid(pid);
                spin_unlock_irqrestore(&tty->ctrl_lock, flags);
-               retval = __f_setown(filp, pid, type, 0);
+               __f_setown(filp, pid, type, 0);
                put_pid(pid);
+               retval = 0;
        }
 out:
        return retval;
index 22d1c3df61acfa61ae957ede4aedfa01a3e9ab7a..99d440a4a6ba259e5bd7ec6b167dbedb2637ac5d 100644 (file)
@@ -98,26 +98,19 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
        write_unlock_irq(&filp->f_owner.lock);
 }
 
-int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
+void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
                int force)
 {
-       int err;
-
-       err = security_file_set_fowner(filp);
-       if (err)
-               return err;
-
+       security_file_set_fowner(filp);
        f_modown(filp, pid, type, force);
-       return 0;
 }
 EXPORT_SYMBOL(__f_setown);
 
-int f_setown(struct file *filp, unsigned long arg, int force)
+void f_setown(struct file *filp, unsigned long arg, int force)
 {
        enum pid_type type;
        struct pid *pid;
        int who = arg;
-       int result;
        type = PIDTYPE_PID;
        if (who < 0) {
                type = PIDTYPE_PGID;
@@ -125,9 +118,8 @@ int f_setown(struct file *filp, unsigned long arg, int force)
        }
        rcu_read_lock();
        pid = find_vpid(who);
-       result = __f_setown(filp, pid, type, force);
+       __f_setown(filp, pid, type, force);
        rcu_read_unlock();
-       return result;
 }
 EXPORT_SYMBOL(f_setown);
 
@@ -181,7 +173,7 @@ static int f_setown_ex(struct file *filp, unsigned long arg)
        if (owner.pid && !pid)
                ret = -ESRCH;
        else
-               ret = __f_setown(filp, pid, type, 1);
+                __f_setown(filp, pid, type, 1);
        rcu_read_unlock();
 
        return ret;
@@ -302,7 +294,8 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
                force_successful_syscall_return();
                break;
        case F_SETOWN:
-               err = f_setown(filp, arg, 1);
+               f_setown(filp, arg, 1);
+               err = 0;
                break;
        case F_GETOWN_EX:
                err = f_getown_ex(filp, arg);
index 5200ffd2ba9b1277c454a92782d5cbc349ff53d2..f5f648e003ddd0517eec3672a4b9557b090643f0 100644 (file)
@@ -1776,7 +1776,7 @@ static int do_fcntl_add_lease(unsigned int fd, struct file *filp, long arg)
        if (!fasync_insert_entry(fd, filp, &ret->fl_fasync, new))
                new = NULL;
 
-       error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0);
+       __f_setown(filp, task_pid(current), PIDTYPE_PID, 0);
 out_unlock:
        spin_unlock(&inode->i_lock);
        if (fl)
index abc8cbcfe90e0fca9f67471740c0b41c9055b7c6..caaaf9dfe3534be9e29826e46058151b5536c48e 100644 (file)
@@ -346,13 +346,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
                goto out;
        }
 
-       error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0);
-       if (error) {
-               /* if we added, we must shoot */
-               if (dn_mark == new_dn_mark)
-                       destroy = 1;
-               goto out;
-       }
+       __f_setown(filp, task_pid(current), PIDTYPE_PID, 0);
 
        error = attach_dn(dn, dn_mark, id, fd, filp, mask);
        /* !error means that we attached the dn to the dn_mark, so don't free it */
index 435e3d9ec5cf18fe12504291c48307e1ef8c44ef..96528f73dda4dafeea357bacb310a34218dacb09 100644 (file)
@@ -1139,8 +1139,8 @@ extern void fasync_free(struct fasync_struct *);
 /* can be called from interrupts */
 extern void kill_fasync(struct fasync_struct **, int, int);
 
-extern int __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
-extern int f_setown(struct file *filp, unsigned long arg, int force);
+extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
+extern void f_setown(struct file *filp, unsigned long arg, int force);
 extern void f_delown(struct file *filp);
 extern pid_t f_getown(struct file *filp);
 extern int send_sigurg(struct fown_struct *fown);
index 623f90e5f38de3f2fcc0a751a25eb10a97f21cd5..b10e7af95d3b7e4ea1a8e5b2167dee2216075a81 100644 (file)
@@ -1559,7 +1559,7 @@ struct security_operations {
        int (*file_lock) (struct file *file, unsigned int cmd);
        int (*file_fcntl) (struct file *file, unsigned int cmd,
                           unsigned long arg);
-       int (*file_set_fowner) (struct file *file);
+       void (*file_set_fowner) (struct file *file);
        int (*file_send_sigiotask) (struct task_struct *tsk,
                                    struct fown_struct *fown, int sig);
        int (*file_receive) (struct file *file);
@@ -1834,7 +1834,7 @@ int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
                           unsigned long prot);
 int security_file_lock(struct file *file, unsigned int cmd);
 int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg);
-int security_file_set_fowner(struct file *file);
+void security_file_set_fowner(struct file *file);
 int security_file_send_sigiotask(struct task_struct *tsk,
                                 struct fown_struct *fown, int sig);
 int security_file_receive(struct file *file);
@@ -2312,9 +2312,9 @@ static inline int security_file_fcntl(struct file *file, unsigned int cmd,
        return 0;
 }
 
-static inline int security_file_set_fowner(struct file *file)
+static inline void security_file_set_fowner(struct file *file)
 {
-       return 0;
+       return;
 }
 
 static inline int security_file_send_sigiotask(struct task_struct *tsk,
index 95ee7d8682e7447f45f5ddb0ddbde5fff196c84e..769c9671847ee63e7a2a6d16f370c1bdc4349d41 100644 (file)
@@ -1069,7 +1069,8 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
                        err = -EFAULT;
                        if (get_user(pid, (int __user *)argp))
                                break;
-                       err = f_setown(sock->file, pid, 1);
+                       f_setown(sock->file, pid, 1);
+                       err = 0;
                        break;
                case FIOGETOWN:
                case SIOCGPGRP:
index a74fde6a7468cda37e0eacee7fb7608aabfdce52..d68c57a62bcf72694b7705292ac3a61592dc67af 100644 (file)
@@ -343,9 +343,9 @@ static int cap_file_fcntl(struct file *file, unsigned int cmd,
        return 0;
 }
 
-static int cap_file_set_fowner(struct file *file)
+static void cap_file_set_fowner(struct file *file)
 {
-       return 0;
+       return;
 }
 
 static int cap_file_send_sigiotask(struct task_struct *tsk,
index e41b1a8d7644a674d8e9c02ae09fc3562d6a8d84..fd301c177d043a71d44023df665f7f2a4c3d8b66 100644 (file)
@@ -775,7 +775,7 @@ int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
        return security_ops->file_fcntl(file, cmd, arg);
 }
 
-int security_file_set_fowner(struct file *file)
+void security_file_set_fowner(struct file *file)
 {
        return security_ops->file_set_fowner(file);
 }
index b0e940497e23bb47a0460e57a65952f2b4dc7e03..ada0d0bf3463cb67f3cfceeb510ef7f162a9a2ea 100644 (file)
@@ -3346,14 +3346,12 @@ static int selinux_file_fcntl(struct file *file, unsigned int cmd,
        return err;
 }
 
-static int selinux_file_set_fowner(struct file *file)
+static void selinux_file_set_fowner(struct file *file)
 {
        struct file_security_struct *fsec;
 
        fsec = file->f_security;
        fsec->fown_sid = current_sid();
-
-       return 0;
 }
 
 static int selinux_file_send_sigiotask(struct task_struct *tsk,
index e6ab307ce86e2fc1d1d04d35d2869fe1385ea724..69e5635d89e55f2e7d7007b0b7253ef3ef659eb6 100644 (file)
@@ -1390,12 +1390,11 @@ static int smack_mmap_file(struct file *file,
  * Returns 0
  * Further research may be required on this one.
  */
-static int smack_file_set_fowner(struct file *file)
+static void smack_file_set_fowner(struct file *file)
 {
        struct smack_known *skp = smk_of_current();
 
        file->f_security = skp->smk_known;
-       return 0;
 }
 
 /**