|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH RFC 18/41] selinux: use fc_init_pseudo() for selinuxfs
Initialize selinuxfs as a pseudo filesystem. This raises SB_I_PSEUDO and
SB_I_NOEXEC. selinuxfs never holds executables. SB_I_NOEXEC also
refuses PROT_EXEC mappings but the status and policy files are only
ever mapped for reading.
But selinuxfs needs device nodes. The kernel replaces file descriptors
with /sys/fs/selinux/null on exec via dentry_open() which doesn't care
about SB_I_NODEV. Android init however opens /sys/fs/selinux/null by
path as /dev/null doesn't exist yet at that point. So clear SB_I_NODEV
again in sel_fill_super().
Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>
---
security/selinux/selinuxfs.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index 310e19efff1d..d7ae853b6d68 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -18,6 +18,7 @@
#include <linux/vmalloc.h>
#include <linux/fs.h>
#include <linux/fs_context.h>
+#include <linux/pseudo_fs.h>
#include <linux/hex.h>
#include <linux/mount.h>
#include <linux/mutex.h>
@@ -1852,6 +1853,9 @@ static int sel_fill_super(struct super_block *sb, struct
fs_context *fc)
/* last one */ {"", NULL, 0}
};
+ /* Android init opens the null device below by path. */
+ sb->s_iflags &= ~SB_I_NODEV;
+
ret = selinux_fs_info_create(sb);
if (ret)
goto err;
@@ -1955,6 +1959,7 @@ static const struct fs_context_operations sel_context_ops
= {
static int sel_init_fs_context(struct fs_context *fc)
{
+ fc_init_pseudo(fc);
fc->ops = &sel_context_ops;
return 0;
}
--
2.53.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |