|
@@ -2918,13 +2918,8 @@ static struct dentry_operations anon_ops = {
|
|
|
.d_dname = simple_dname
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * shmem_file_setup - get an unlinked file living in tmpfs
|
|
|
- * @name: name for dentry (to be seen in /proc/<pid>/maps
|
|
|
- * @size: size to be set for the file
|
|
|
- * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
|
|
|
- */
|
|
|
-struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)
|
|
|
+static struct file *__shmem_file_setup(const char *name, loff_t size,
|
|
|
+ unsigned long flags, unsigned int i_flags)
|
|
|
{
|
|
|
struct file *res;
|
|
|
struct inode *inode;
|
|
@@ -2957,6 +2952,7 @@ struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags
|
|
|
if (!inode)
|
|
|
goto put_dentry;
|
|
|
|
|
|
+ inode->i_flags |= i_flags;
|
|
|
d_instantiate(path.dentry, inode);
|
|
|
inode->i_size = size;
|
|
|
clear_nlink(inode); /* It is unlinked */
|
|
@@ -2977,6 +2973,32 @@ put_memory:
|
|
|
shmem_unacct_size(flags, size);
|
|
|
return res;
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * shmem_kernel_file_setup - get an unlinked file living in tmpfs which must be
|
|
|
+ * kernel internal. There will be NO LSM permission checks against the
|
|
|
+ * underlying inode. So users of this interface must do LSM checks at a
|
|
|
+ * higher layer. The one user is the big_key implementation. LSM checks
|
|
|
+ * are provided at the key level rather than the inode level.
|
|
|
+ * @name: name for dentry (to be seen in /proc/<pid>/maps
|
|
|
+ * @size: size to be set for the file
|
|
|
+ * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
|
|
|
+ */
|
|
|
+struct file *shmem_kernel_file_setup(const char *name, loff_t size, unsigned long flags)
|
|
|
+{
|
|
|
+ return __shmem_file_setup(name, size, flags, S_PRIVATE);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * shmem_file_setup - get an unlinked file living in tmpfs
|
|
|
+ * @name: name for dentry (to be seen in /proc/<pid>/maps
|
|
|
+ * @size: size to be set for the file
|
|
|
+ * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
|
|
|
+ */
|
|
|
+struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)
|
|
|
+{
|
|
|
+ return __shmem_file_setup(name, size, flags, 0);
|
|
|
+}
|
|
|
EXPORT_SYMBOL_GPL(shmem_file_setup);
|
|
|
|
|
|
/**
|