ovl: call secutiry hook in ovl_real_ioctl()
authorMiklos Szeredi <mszeredi@redhat.com>
Tue, 2 Jun 2020 20:20:26 +0000 (22:20 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 3 Jun 2020 07:45:18 +0000 (09:45 +0200)
Verify LSM permissions for underlying file, since vfs_ioctl() doesn't do
it.

[Stephen Rothwell] export security_file_ioctl

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/file.c
security/security.c

index 87c362f..1860e22 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/uio.h>
 #include <linux/uaccess.h>
 #include <linux/splice.h>
+#include <linux/security.h>
 #include <linux/mm.h>
 #include <linux/fs.h>
 #include "overlayfs.h"
@@ -520,7 +521,9 @@ static long ovl_real_ioctl(struct file *file, unsigned int cmd,
                return ret;
 
        old_cred = ovl_override_creds(file_inode(file)->i_sb);
-       ret = vfs_ioctl(real.file, cmd, arg);
+       ret = security_file_ioctl(real.file, cmd, arg);
+       if (!ret)
+               ret = vfs_ioctl(real.file, cmd, arg);
        revert_creds(old_cred);
 
        fdput(real);
index 7fed24b..a674141 100644 (file)
@@ -1459,6 +1459,7 @@ int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        return call_int_hook(file_ioctl, 0, file, cmd, arg);
 }
+EXPORT_SYMBOL_GPL(security_file_ioctl);
 
 static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
 {