diff options
author | Eric Paris <eparis@redhat.com> | 2008-07-03 19:47:13 -0400 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2008-07-14 01:02:05 -0400 |
commit | 2069f457848f846cb31149c9aa29b330a6b66d1b (patch) | |
tree | 199e7bb15e7d7b5cf008cd6fdb6cefc0d6af7f13 /fs/namespace.c | |
parent | 811f3799279e567aa354c649ce22688d949ac7a9 (diff) |
LSM/SELinux: show LSM mount options in /proc/mounts
This patch causes SELinux mount options to show up in /proc/mounts. As
with other code in the area seq_put errors are ignored. Other LSM's
will not have their mount options displayed until they fill in their own
security_sb_show_options() function.
Signed-off-by: Eric Paris <eparis@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 4fc302c2a0e0..4f6f7635b59c 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -750,7 +750,7 @@ struct proc_fs_info { | |||
750 | const char *str; | 750 | const char *str; |
751 | }; | 751 | }; |
752 | 752 | ||
753 | static void show_sb_opts(struct seq_file *m, struct super_block *sb) | 753 | static int show_sb_opts(struct seq_file *m, struct super_block *sb) |
754 | { | 754 | { |
755 | static const struct proc_fs_info fs_info[] = { | 755 | static const struct proc_fs_info fs_info[] = { |
756 | { MS_SYNCHRONOUS, ",sync" }, | 756 | { MS_SYNCHRONOUS, ",sync" }, |
@@ -764,6 +764,8 @@ static void show_sb_opts(struct seq_file *m, struct super_block *sb) | |||
764 | if (sb->s_flags & fs_infop->flag) | 764 | if (sb->s_flags & fs_infop->flag) |
765 | seq_puts(m, fs_infop->str); | 765 | seq_puts(m, fs_infop->str); |
766 | } | 766 | } |
767 | |||
768 | return security_sb_show_options(m, sb); | ||
767 | } | 769 | } |
768 | 770 | ||
769 | static void show_mnt_opts(struct seq_file *m, struct vfsmount *mnt) | 771 | static void show_mnt_opts(struct seq_file *m, struct vfsmount *mnt) |
@@ -806,11 +808,14 @@ static int show_vfsmnt(struct seq_file *m, void *v) | |||
806 | seq_putc(m, ' '); | 808 | seq_putc(m, ' '); |
807 | show_type(m, mnt->mnt_sb); | 809 | show_type(m, mnt->mnt_sb); |
808 | seq_puts(m, __mnt_is_readonly(mnt) ? " ro" : " rw"); | 810 | seq_puts(m, __mnt_is_readonly(mnt) ? " ro" : " rw"); |
809 | show_sb_opts(m, mnt->mnt_sb); | 811 | err = show_sb_opts(m, mnt->mnt_sb); |
812 | if (err) | ||
813 | goto out; | ||
810 | show_mnt_opts(m, mnt); | 814 | show_mnt_opts(m, mnt); |
811 | if (mnt->mnt_sb->s_op->show_options) | 815 | if (mnt->mnt_sb->s_op->show_options) |
812 | err = mnt->mnt_sb->s_op->show_options(m, mnt); | 816 | err = mnt->mnt_sb->s_op->show_options(m, mnt); |
813 | seq_puts(m, " 0 0\n"); | 817 | seq_puts(m, " 0 0\n"); |
818 | out: | ||
814 | return err; | 819 | return err; |
815 | } | 820 | } |
816 | 821 | ||
@@ -865,10 +870,13 @@ static int show_mountinfo(struct seq_file *m, void *v) | |||
865 | seq_putc(m, ' '); | 870 | seq_putc(m, ' '); |
866 | mangle(m, mnt->mnt_devname ? mnt->mnt_devname : "none"); | 871 | mangle(m, mnt->mnt_devname ? mnt->mnt_devname : "none"); |
867 | seq_puts(m, sb->s_flags & MS_RDONLY ? " ro" : " rw"); | 872 | seq_puts(m, sb->s_flags & MS_RDONLY ? " ro" : " rw"); |
868 | show_sb_opts(m, sb); | 873 | err = show_sb_opts(m, sb); |
874 | if (err) | ||
875 | goto out; | ||
869 | if (sb->s_op->show_options) | 876 | if (sb->s_op->show_options) |
870 | err = sb->s_op->show_options(m, mnt); | 877 | err = sb->s_op->show_options(m, mnt); |
871 | seq_putc(m, '\n'); | 878 | seq_putc(m, '\n'); |
879 | out: | ||
872 | return err; | 880 | return err; |
873 | } | 881 | } |
874 | 882 | ||