Message ID | 1440089550-4671-2-git-send-email-seth.forshee@canonical.com |
---|---|
State | New |
Headers | show |
On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote: > From: "Eric W. Biederman" <ebiederm@xmission.com> > > This allows for better documentation in the code and > it allows for a simpler and fully correct version of > fs_fully_visible to be written. > > The mount points converted and their filesystems are: > /sys/hypervisor/s390/ s390_hypfs > /sys/kernel/config/ configfs > /sys/kernel/debug/ debugfs > /sys/firmware/efi/efivars/ efivarfs > /sys/fs/fuse/connections/ fusectl > /sys/fs/pstore/ pstore > /sys/kernel/tracing/ tracefs > /sys/fs/cgroup/ cgroup > /sys/kernel/security/ securityfs > /sys/fs/selinux/ selinuxfs > /sys/fs/smackfs/ smackfs > > Cc: stable@vger.kernel.org > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> > (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49) > BugLink: http://bugs.launchpad.net/bugs/1487125 > Signed-off-by: Seth Forshee <seth.forshee@canonical.com> > --- > arch/s390/hypfs/inode.c | 12 ++++-------- > drivers/firmware/efi/efi.c | 6 ++---- > fs/configfs/mount.c | 10 ++++------ > fs/debugfs/inode.c | 11 ++++------- > fs/fuse/inode.c | 9 +++------ > fs/pstore/inode.c | 12 ++++-------- > kernel/cgroup.c | 10 ++++------ > security/inode.c | 10 ++++------ > security/selinux/selinuxfs.c | 11 +++++------ > security/smack/smackfs.c | 8 ++++---- > 10 files changed, 38 insertions(+), 61 deletions(-) > > diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c > index c952b98..e86bbf1 100644 > --- a/arch/s390/hypfs/inode.c > +++ b/arch/s390/hypfs/inode.c > @@ -461,8 +461,6 @@ static const struct super_operations hypfs_s_ops = { > .show_options = hypfs_show_options, > }; > > -static struct kobject *s390_kobj; > - > static int __init hypfs_init(void) > { > int rc; > @@ -482,18 +480,16 @@ static int __init hypfs_init(void) > rc = -ENODATA; > goto fail_hypfs_vm_exit; > } > - s390_kobj = kobject_create_and_add("s390", hypervisor_kobj); > - if (!s390_kobj) { > - rc = -ENOMEM; > + rc = sysfs_create_mount_point(hypervisor_kobj, "s390"); > + if (rc) > goto fail_hypfs_sprp_exit; > - } > rc = register_filesystem(&hypfs_type); > if (rc) > goto fail_filesystem; > return 0; > > fail_filesystem: > - kobject_put(s390_kobj); > + sysfs_remove_mount_point(hypervisor_kobj, "s390"); > fail_hypfs_sprp_exit: > hypfs_sprp_exit(); > fail_hypfs_vm_exit: > @@ -509,7 +505,7 @@ fail_dbfs_exit: > static void __exit hypfs_exit(void) > { > unregister_filesystem(&hypfs_type); > - kobject_put(s390_kobj); > + sysfs_remove_mount_point(hypervisor_kobj, "s390"); > hypfs_sprp_exit(); > hypfs_vm_exit(); > hypfs_diag_exit(); > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index dc79346..583ef8d 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -41,7 +41,6 @@ struct efi __read_mostly efi = { > EXPORT_SYMBOL(efi); > > static struct kobject *efi_kobj; > -static struct kobject *efivars_kobj; > > /* > * Let's not leave out systab information that snuck into > @@ -174,10 +173,9 @@ static int __init efisubsys_init(void) > goto err_remove_group; > > /* and the standard mountpoint for efivarfs */ > - efivars_kobj = kobject_create_and_add("efivars", efi_kobj); > - if (!efivars_kobj) { > + error = sysfs_create_mount_point(efi_kobj, "efivars"); > + if (error) { > pr_err("efivars: Subsystem registration failed.\n"); > - error = -ENOMEM; > goto err_remove_group; > } > > diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c > index f6c2858..e9aa820 100644 > --- a/fs/configfs/mount.c > +++ b/fs/configfs/mount.c > @@ -129,8 +129,6 @@ void configfs_release_fs(void) > } > > > -static struct kobject *config_kobj; > - > static int __init configfs_init(void) > { > int err = -ENOMEM; > @@ -141,8 +139,8 @@ static int __init configfs_init(void) > if (!configfs_dir_cachep) > goto out; > > - config_kobj = kobject_create_and_add("config", kernel_kobj); > - if (!config_kobj) > + err = sysfs_create_mount_point(kernel_kobj, "config"); > + if (err) > goto out2; > > err = configfs_inode_init(); > @@ -158,7 +156,7 @@ out4: > pr_err("Unable to register filesystem!\n"); > configfs_inode_exit(); > out3: > - kobject_put(config_kobj); > + sysfs_remove_mount_point(kernel_kobj, "config"); > out2: > kmem_cache_destroy(configfs_dir_cachep); > configfs_dir_cachep = NULL; > @@ -169,7 +167,7 @@ out: > static void __exit configfs_exit(void) > { > unregister_filesystem(&configfs_fs_type); > - kobject_put(config_kobj); > + sysfs_remove_mount_point(kernel_kobj, "config"); > kmem_cache_destroy(configfs_dir_cachep); > configfs_dir_cachep = NULL; > configfs_inode_exit(); > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c > index 0c6ba4e..75c865b 100644 > --- a/fs/debugfs/inode.c > +++ b/fs/debugfs/inode.c > @@ -668,20 +668,17 @@ bool debugfs_initialized(void) > } > EXPORT_SYMBOL_GPL(debugfs_initialized); > > - > -static struct kobject *debug_kobj; > - > static int __init debugfs_init(void) > { > int retval; > > - debug_kobj = kobject_create_and_add("debug", kernel_kobj); > - if (!debug_kobj) > - return -EINVAL; > + retval = sysfs_create_mount_point(kernel_kobj, "debug"); > + if (retval) > + return retval; > > retval = register_filesystem(&debug_fs_type); > if (retval) > - kobject_put(debug_kobj); > + sysfs_remove_mount_point(kernel_kobj, "debug"); > else > debugfs_registered = true; > > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c > index 9e3f6cf..6abafb1 100644 > --- a/fs/fuse/inode.c > +++ b/fs/fuse/inode.c > @@ -1261,7 +1261,6 @@ static void fuse_fs_cleanup(void) > } > > static struct kobject *fuse_kobj; > -static struct kobject *connections_kobj; > > static int fuse_sysfs_init(void) > { > @@ -1273,11 +1272,9 @@ static int fuse_sysfs_init(void) > goto out_err; > } > > - connections_kobj = kobject_create_and_add("connections", fuse_kobj); > - if (!connections_kobj) { > - err = -ENOMEM; > + err = sysfs_create_mount_point(fuse_kobj, "connections"); > + if (err) > goto out_fuse_unregister; > - } > > return 0; > > @@ -1289,7 +1286,7 @@ static int fuse_sysfs_init(void) > > static void fuse_sysfs_cleanup(void) > { > - kobject_put(connections_kobj); > + sysfs_remove_mount_point(fuse_kobj, "connections"); > kobject_put(fuse_kobj); > } > > diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c > index fafb7a0..3b172f6 100644 > --- a/fs/pstore/inode.c > +++ b/fs/pstore/inode.c > @@ -430,22 +430,18 @@ static struct file_system_type pstore_fs_type = { > .kill_sb = pstore_kill_sb, > }; > > -static struct kobject *pstore_kobj; > - > static int __init init_pstore_fs(void) > { > - int err = 0; > + int err; > > /* Create a convenient mount point for people to access pstore */ > - pstore_kobj = kobject_create_and_add("pstore", fs_kobj); > - if (!pstore_kobj) { > - err = -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "pstore"); > + if (err) > goto out; > - } > > err = register_filesystem(&pstore_fs_type); > if (err < 0) > - kobject_put(pstore_kobj); > + sysfs_remove_mount_point(fs_kobj, "pstore"); > > out: > return err; > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index 0a46b2a..44fadfb 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -1848,8 +1848,6 @@ static struct file_system_type cgroup_fs_type = { > .kill_sb = cgroup_kill_sb, > }; > > -static struct kobject *cgroup_kobj; > - > /** > * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy > * @task: target task > @@ -4822,13 +4820,13 @@ int __init cgroup_init(void) > } > } > > - cgroup_kobj = kobject_create_and_add("cgroup", fs_kobj); > - if (!cgroup_kobj) > - return -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "cgroup"); > + if (err) > + return err; > > err = register_filesystem(&cgroup_fs_type); > if (err < 0) { > - kobject_put(cgroup_kobj); > + sysfs_remove_mount_point(fs_kobj, "cgroup"); > return err; > } > > diff --git a/security/inode.c b/security/inode.c > index 43ce6e1..617c7ce 100644 > --- a/security/inode.c > +++ b/security/inode.c > @@ -215,19 +215,17 @@ void securityfs_remove(struct dentry *dentry) > } > EXPORT_SYMBOL_GPL(securityfs_remove); > > -static struct kobject *security_kobj; > - > static int __init securityfs_init(void) > { > int retval; > > - security_kobj = kobject_create_and_add("security", kernel_kobj); > - if (!security_kobj) > - return -EINVAL; > + retval = sysfs_create_mount_point(kernel_kobj, "security"); > + if (retval) > + return retval; > > retval = register_filesystem(&fs_type); > if (retval) > - kobject_put(security_kobj); > + sysfs_remove_mount_point(kernel_kobj, "security"); > return retval; > } > > diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c > index 138949a..181fcd3 100644 > --- a/security/selinux/selinuxfs.c > +++ b/security/selinux/selinuxfs.c > @@ -1899,7 +1899,6 @@ static struct file_system_type sel_fs_type = { > }; > > struct vfsmount *selinuxfs_mount; > -static struct kobject *selinuxfs_kobj; > > static int __init init_sel_fs(void) > { > @@ -1908,13 +1907,13 @@ static int __init init_sel_fs(void) > if (!selinux_enabled) > return 0; > > - selinuxfs_kobj = kobject_create_and_add("selinux", fs_kobj); > - if (!selinuxfs_kobj) > - return -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "selinux"); > + if (err) > + return err; > > err = register_filesystem(&sel_fs_type); > if (err) { > - kobject_put(selinuxfs_kobj); > + sysfs_remove_mount_point(fs_kobj, "selinux"); > return err; > } > > @@ -1933,7 +1932,7 @@ __initcall(init_sel_fs); > #ifdef CONFIG_SECURITY_SELINUX_DISABLE > void exit_sel_fs(void) > { > - kobject_put(selinuxfs_kobj); > + sysfs_remove_mount_point(fs_kobj, "selinux"); > kern_unmount(selinuxfs_mount); > unregister_filesystem(&sel_fs_type); > } > diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c > index 32b2488..8608fd7 100644 > --- a/security/smack/smackfs.c > +++ b/security/smack/smackfs.c > @@ -2136,16 +2136,16 @@ static const struct file_operations smk_revoke_subj_ops = { > .llseek = generic_file_llseek, > }; > > -static struct kset *smackfs_kset; > /** > * smk_init_sysfs - initialize /sys/fs/smackfs > * > */ > static int smk_init_sysfs(void) > { > - smackfs_kset = kset_create_and_add("smackfs", NULL, fs_kobj); > - if (!smackfs_kset) > - return -ENOMEM; > + int err; > + err = sysfs_create_mount_point(fs_kobj, "smackfs"); > + if (err) > + return err; > return 0; > } > > -- > 2.5.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team This has been tested by Seth to address the issue.
Based on it being cc stable and in other releases and tested
On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote: > From: "Eric W. Biederman" <ebiederm@xmission.com> > > This allows for better documentation in the code and > it allows for a simpler and fully correct version of > fs_fully_visible to be written. > > The mount points converted and their filesystems are: > /sys/hypervisor/s390/ s390_hypfs > /sys/kernel/config/ configfs > /sys/kernel/debug/ debugfs > /sys/firmware/efi/efivars/ efivarfs > /sys/fs/fuse/connections/ fusectl > /sys/fs/pstore/ pstore > /sys/kernel/tracing/ tracefs > /sys/fs/cgroup/ cgroup > /sys/kernel/security/ securityfs > /sys/fs/selinux/ selinuxfs > /sys/fs/smackfs/ smackfs > > Cc: stable@vger.kernel.org > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> > (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49) Just a minor comment: looks like the SHA1 should be f9bb48825a6b5d02f4cabcc78967c75db903dcdc instead. And thanks Seth, I'll queue this for the 3.16 stable as well. Cheers, -- Luís > BugLink: http://bugs.launchpad.net/bugs/1487125 > Signed-off-by: Seth Forshee <seth.forshee@canonical.com> > --- > arch/s390/hypfs/inode.c | 12 ++++-------- > drivers/firmware/efi/efi.c | 6 ++---- > fs/configfs/mount.c | 10 ++++------ > fs/debugfs/inode.c | 11 ++++------- > fs/fuse/inode.c | 9 +++------ > fs/pstore/inode.c | 12 ++++-------- > kernel/cgroup.c | 10 ++++------ > security/inode.c | 10 ++++------ > security/selinux/selinuxfs.c | 11 +++++------ > security/smack/smackfs.c | 8 ++++---- > 10 files changed, 38 insertions(+), 61 deletions(-) > > diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c > index c952b98..e86bbf1 100644 > --- a/arch/s390/hypfs/inode.c > +++ b/arch/s390/hypfs/inode.c > @@ -461,8 +461,6 @@ static const struct super_operations hypfs_s_ops = { > .show_options = hypfs_show_options, > }; > > -static struct kobject *s390_kobj; > - > static int __init hypfs_init(void) > { > int rc; > @@ -482,18 +480,16 @@ static int __init hypfs_init(void) > rc = -ENODATA; > goto fail_hypfs_vm_exit; > } > - s390_kobj = kobject_create_and_add("s390", hypervisor_kobj); > - if (!s390_kobj) { > - rc = -ENOMEM; > + rc = sysfs_create_mount_point(hypervisor_kobj, "s390"); > + if (rc) > goto fail_hypfs_sprp_exit; > - } > rc = register_filesystem(&hypfs_type); > if (rc) > goto fail_filesystem; > return 0; > > fail_filesystem: > - kobject_put(s390_kobj); > + sysfs_remove_mount_point(hypervisor_kobj, "s390"); > fail_hypfs_sprp_exit: > hypfs_sprp_exit(); > fail_hypfs_vm_exit: > @@ -509,7 +505,7 @@ fail_dbfs_exit: > static void __exit hypfs_exit(void) > { > unregister_filesystem(&hypfs_type); > - kobject_put(s390_kobj); > + sysfs_remove_mount_point(hypervisor_kobj, "s390"); > hypfs_sprp_exit(); > hypfs_vm_exit(); > hypfs_diag_exit(); > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index dc79346..583ef8d 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -41,7 +41,6 @@ struct efi __read_mostly efi = { > EXPORT_SYMBOL(efi); > > static struct kobject *efi_kobj; > -static struct kobject *efivars_kobj; > > /* > * Let's not leave out systab information that snuck into > @@ -174,10 +173,9 @@ static int __init efisubsys_init(void) > goto err_remove_group; > > /* and the standard mountpoint for efivarfs */ > - efivars_kobj = kobject_create_and_add("efivars", efi_kobj); > - if (!efivars_kobj) { > + error = sysfs_create_mount_point(efi_kobj, "efivars"); > + if (error) { > pr_err("efivars: Subsystem registration failed.\n"); > - error = -ENOMEM; > goto err_remove_group; > } > > diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c > index f6c2858..e9aa820 100644 > --- a/fs/configfs/mount.c > +++ b/fs/configfs/mount.c > @@ -129,8 +129,6 @@ void configfs_release_fs(void) > } > > > -static struct kobject *config_kobj; > - > static int __init configfs_init(void) > { > int err = -ENOMEM; > @@ -141,8 +139,8 @@ static int __init configfs_init(void) > if (!configfs_dir_cachep) > goto out; > > - config_kobj = kobject_create_and_add("config", kernel_kobj); > - if (!config_kobj) > + err = sysfs_create_mount_point(kernel_kobj, "config"); > + if (err) > goto out2; > > err = configfs_inode_init(); > @@ -158,7 +156,7 @@ out4: > pr_err("Unable to register filesystem!\n"); > configfs_inode_exit(); > out3: > - kobject_put(config_kobj); > + sysfs_remove_mount_point(kernel_kobj, "config"); > out2: > kmem_cache_destroy(configfs_dir_cachep); > configfs_dir_cachep = NULL; > @@ -169,7 +167,7 @@ out: > static void __exit configfs_exit(void) > { > unregister_filesystem(&configfs_fs_type); > - kobject_put(config_kobj); > + sysfs_remove_mount_point(kernel_kobj, "config"); > kmem_cache_destroy(configfs_dir_cachep); > configfs_dir_cachep = NULL; > configfs_inode_exit(); > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c > index 0c6ba4e..75c865b 100644 > --- a/fs/debugfs/inode.c > +++ b/fs/debugfs/inode.c > @@ -668,20 +668,17 @@ bool debugfs_initialized(void) > } > EXPORT_SYMBOL_GPL(debugfs_initialized); > > - > -static struct kobject *debug_kobj; > - > static int __init debugfs_init(void) > { > int retval; > > - debug_kobj = kobject_create_and_add("debug", kernel_kobj); > - if (!debug_kobj) > - return -EINVAL; > + retval = sysfs_create_mount_point(kernel_kobj, "debug"); > + if (retval) > + return retval; > > retval = register_filesystem(&debug_fs_type); > if (retval) > - kobject_put(debug_kobj); > + sysfs_remove_mount_point(kernel_kobj, "debug"); > else > debugfs_registered = true; > > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c > index 9e3f6cf..6abafb1 100644 > --- a/fs/fuse/inode.c > +++ b/fs/fuse/inode.c > @@ -1261,7 +1261,6 @@ static void fuse_fs_cleanup(void) > } > > static struct kobject *fuse_kobj; > -static struct kobject *connections_kobj; > > static int fuse_sysfs_init(void) > { > @@ -1273,11 +1272,9 @@ static int fuse_sysfs_init(void) > goto out_err; > } > > - connections_kobj = kobject_create_and_add("connections", fuse_kobj); > - if (!connections_kobj) { > - err = -ENOMEM; > + err = sysfs_create_mount_point(fuse_kobj, "connections"); > + if (err) > goto out_fuse_unregister; > - } > > return 0; > > @@ -1289,7 +1286,7 @@ static int fuse_sysfs_init(void) > > static void fuse_sysfs_cleanup(void) > { > - kobject_put(connections_kobj); > + sysfs_remove_mount_point(fuse_kobj, "connections"); > kobject_put(fuse_kobj); > } > > diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c > index fafb7a0..3b172f6 100644 > --- a/fs/pstore/inode.c > +++ b/fs/pstore/inode.c > @@ -430,22 +430,18 @@ static struct file_system_type pstore_fs_type = { > .kill_sb = pstore_kill_sb, > }; > > -static struct kobject *pstore_kobj; > - > static int __init init_pstore_fs(void) > { > - int err = 0; > + int err; > > /* Create a convenient mount point for people to access pstore */ > - pstore_kobj = kobject_create_and_add("pstore", fs_kobj); > - if (!pstore_kobj) { > - err = -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "pstore"); > + if (err) > goto out; > - } > > err = register_filesystem(&pstore_fs_type); > if (err < 0) > - kobject_put(pstore_kobj); > + sysfs_remove_mount_point(fs_kobj, "pstore"); > > out: > return err; > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index 0a46b2a..44fadfb 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -1848,8 +1848,6 @@ static struct file_system_type cgroup_fs_type = { > .kill_sb = cgroup_kill_sb, > }; > > -static struct kobject *cgroup_kobj; > - > /** > * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy > * @task: target task > @@ -4822,13 +4820,13 @@ int __init cgroup_init(void) > } > } > > - cgroup_kobj = kobject_create_and_add("cgroup", fs_kobj); > - if (!cgroup_kobj) > - return -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "cgroup"); > + if (err) > + return err; > > err = register_filesystem(&cgroup_fs_type); > if (err < 0) { > - kobject_put(cgroup_kobj); > + sysfs_remove_mount_point(fs_kobj, "cgroup"); > return err; > } > > diff --git a/security/inode.c b/security/inode.c > index 43ce6e1..617c7ce 100644 > --- a/security/inode.c > +++ b/security/inode.c > @@ -215,19 +215,17 @@ void securityfs_remove(struct dentry *dentry) > } > EXPORT_SYMBOL_GPL(securityfs_remove); > > -static struct kobject *security_kobj; > - > static int __init securityfs_init(void) > { > int retval; > > - security_kobj = kobject_create_and_add("security", kernel_kobj); > - if (!security_kobj) > - return -EINVAL; > + retval = sysfs_create_mount_point(kernel_kobj, "security"); > + if (retval) > + return retval; > > retval = register_filesystem(&fs_type); > if (retval) > - kobject_put(security_kobj); > + sysfs_remove_mount_point(kernel_kobj, "security"); > return retval; > } > > diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c > index 138949a..181fcd3 100644 > --- a/security/selinux/selinuxfs.c > +++ b/security/selinux/selinuxfs.c > @@ -1899,7 +1899,6 @@ static struct file_system_type sel_fs_type = { > }; > > struct vfsmount *selinuxfs_mount; > -static struct kobject *selinuxfs_kobj; > > static int __init init_sel_fs(void) > { > @@ -1908,13 +1907,13 @@ static int __init init_sel_fs(void) > if (!selinux_enabled) > return 0; > > - selinuxfs_kobj = kobject_create_and_add("selinux", fs_kobj); > - if (!selinuxfs_kobj) > - return -ENOMEM; > + err = sysfs_create_mount_point(fs_kobj, "selinux"); > + if (err) > + return err; > > err = register_filesystem(&sel_fs_type); > if (err) { > - kobject_put(selinuxfs_kobj); > + sysfs_remove_mount_point(fs_kobj, "selinux"); > return err; > } > > @@ -1933,7 +1932,7 @@ __initcall(init_sel_fs); > #ifdef CONFIG_SECURITY_SELINUX_DISABLE > void exit_sel_fs(void) > { > - kobject_put(selinuxfs_kobj); > + sysfs_remove_mount_point(fs_kobj, "selinux"); > kern_unmount(selinuxfs_mount); > unregister_filesystem(&sel_fs_type); > } > diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c > index 32b2488..8608fd7 100644 > --- a/security/smack/smackfs.c > +++ b/security/smack/smackfs.c > @@ -2136,16 +2136,16 @@ static const struct file_operations smk_revoke_subj_ops = { > .llseek = generic_file_llseek, > }; > > -static struct kset *smackfs_kset; > /** > * smk_init_sysfs - initialize /sys/fs/smackfs > * > */ > static int smk_init_sysfs(void) > { > - smackfs_kset = kset_create_and_add("smackfs", NULL, fs_kobj); > - if (!smackfs_kset) > - return -ENOMEM; > + int err; > + err = sysfs_create_mount_point(fs_kobj, "smackfs"); > + if (err) > + return err; > return 0; > } > > -- > 2.5.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
On Thu, Aug 20, 2015 at 06:21:13PM +0100, Luis Henriques wrote: > On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote: > > From: "Eric W. Biederman" <ebiederm@xmission.com> > > > > This allows for better documentation in the code and > > it allows for a simpler and fully correct version of > > fs_fully_visible to be written. > > > > The mount points converted and their filesystems are: > > /sys/hypervisor/s390/ s390_hypfs > > /sys/kernel/config/ configfs > > /sys/kernel/debug/ debugfs > > /sys/firmware/efi/efivars/ efivarfs > > /sys/fs/fuse/connections/ fusectl > > /sys/fs/pstore/ pstore > > /sys/kernel/tracing/ tracefs > > /sys/fs/cgroup/ cgroup > > /sys/kernel/security/ securityfs > > /sys/fs/selinux/ selinuxfs > > /sys/fs/smackfs/ smackfs > > > > Cc: stable@vger.kernel.org > > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> > > (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49) > > Just a minor comment: looks like the SHA1 should be > f9bb48825a6b5d02f4cabcc78967c75db903dcdc instead. Yes, that's the right one. Sorry, copied the wrong hash (should have let git do it for me but I forgot initially and didn't want to redo the backport).
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c index c952b98..e86bbf1 100644 --- a/arch/s390/hypfs/inode.c +++ b/arch/s390/hypfs/inode.c @@ -461,8 +461,6 @@ static const struct super_operations hypfs_s_ops = { .show_options = hypfs_show_options, }; -static struct kobject *s390_kobj; - static int __init hypfs_init(void) { int rc; @@ -482,18 +480,16 @@ static int __init hypfs_init(void) rc = -ENODATA; goto fail_hypfs_vm_exit; } - s390_kobj = kobject_create_and_add("s390", hypervisor_kobj); - if (!s390_kobj) { - rc = -ENOMEM; + rc = sysfs_create_mount_point(hypervisor_kobj, "s390"); + if (rc) goto fail_hypfs_sprp_exit; - } rc = register_filesystem(&hypfs_type); if (rc) goto fail_filesystem; return 0; fail_filesystem: - kobject_put(s390_kobj); + sysfs_remove_mount_point(hypervisor_kobj, "s390"); fail_hypfs_sprp_exit: hypfs_sprp_exit(); fail_hypfs_vm_exit: @@ -509,7 +505,7 @@ fail_dbfs_exit: static void __exit hypfs_exit(void) { unregister_filesystem(&hypfs_type); - kobject_put(s390_kobj); + sysfs_remove_mount_point(hypervisor_kobj, "s390"); hypfs_sprp_exit(); hypfs_vm_exit(); hypfs_diag_exit(); diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index dc79346..583ef8d 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -41,7 +41,6 @@ struct efi __read_mostly efi = { EXPORT_SYMBOL(efi); static struct kobject *efi_kobj; -static struct kobject *efivars_kobj; /* * Let's not leave out systab information that snuck into @@ -174,10 +173,9 @@ static int __init efisubsys_init(void) goto err_remove_group; /* and the standard mountpoint for efivarfs */ - efivars_kobj = kobject_create_and_add("efivars", efi_kobj); - if (!efivars_kobj) { + error = sysfs_create_mount_point(efi_kobj, "efivars"); + if (error) { pr_err("efivars: Subsystem registration failed.\n"); - error = -ENOMEM; goto err_remove_group; } diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c index f6c2858..e9aa820 100644 --- a/fs/configfs/mount.c +++ b/fs/configfs/mount.c @@ -129,8 +129,6 @@ void configfs_release_fs(void) } -static struct kobject *config_kobj; - static int __init configfs_init(void) { int err = -ENOMEM; @@ -141,8 +139,8 @@ static int __init configfs_init(void) if (!configfs_dir_cachep) goto out; - config_kobj = kobject_create_and_add("config", kernel_kobj); - if (!config_kobj) + err = sysfs_create_mount_point(kernel_kobj, "config"); + if (err) goto out2; err = configfs_inode_init(); @@ -158,7 +156,7 @@ out4: pr_err("Unable to register filesystem!\n"); configfs_inode_exit(); out3: - kobject_put(config_kobj); + sysfs_remove_mount_point(kernel_kobj, "config"); out2: kmem_cache_destroy(configfs_dir_cachep); configfs_dir_cachep = NULL; @@ -169,7 +167,7 @@ out: static void __exit configfs_exit(void) { unregister_filesystem(&configfs_fs_type); - kobject_put(config_kobj); + sysfs_remove_mount_point(kernel_kobj, "config"); kmem_cache_destroy(configfs_dir_cachep); configfs_dir_cachep = NULL; configfs_inode_exit(); diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c index 0c6ba4e..75c865b 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c @@ -668,20 +668,17 @@ bool debugfs_initialized(void) } EXPORT_SYMBOL_GPL(debugfs_initialized); - -static struct kobject *debug_kobj; - static int __init debugfs_init(void) { int retval; - debug_kobj = kobject_create_and_add("debug", kernel_kobj); - if (!debug_kobj) - return -EINVAL; + retval = sysfs_create_mount_point(kernel_kobj, "debug"); + if (retval) + return retval; retval = register_filesystem(&debug_fs_type); if (retval) - kobject_put(debug_kobj); + sysfs_remove_mount_point(kernel_kobj, "debug"); else debugfs_registered = true; diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 9e3f6cf..6abafb1 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1261,7 +1261,6 @@ static void fuse_fs_cleanup(void) } static struct kobject *fuse_kobj; -static struct kobject *connections_kobj; static int fuse_sysfs_init(void) { @@ -1273,11 +1272,9 @@ static int fuse_sysfs_init(void) goto out_err; } - connections_kobj = kobject_create_and_add("connections", fuse_kobj); - if (!connections_kobj) { - err = -ENOMEM; + err = sysfs_create_mount_point(fuse_kobj, "connections"); + if (err) goto out_fuse_unregister; - } return 0; @@ -1289,7 +1286,7 @@ static int fuse_sysfs_init(void) static void fuse_sysfs_cleanup(void) { - kobject_put(connections_kobj); + sysfs_remove_mount_point(fuse_kobj, "connections"); kobject_put(fuse_kobj); } diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c index fafb7a0..3b172f6 100644 --- a/fs/pstore/inode.c +++ b/fs/pstore/inode.c @@ -430,22 +430,18 @@ static struct file_system_type pstore_fs_type = { .kill_sb = pstore_kill_sb, }; -static struct kobject *pstore_kobj; - static int __init init_pstore_fs(void) { - int err = 0; + int err; /* Create a convenient mount point for people to access pstore */ - pstore_kobj = kobject_create_and_add("pstore", fs_kobj); - if (!pstore_kobj) { - err = -ENOMEM; + err = sysfs_create_mount_point(fs_kobj, "pstore"); + if (err) goto out; - } err = register_filesystem(&pstore_fs_type); if (err < 0) - kobject_put(pstore_kobj); + sysfs_remove_mount_point(fs_kobj, "pstore"); out: return err; diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 0a46b2a..44fadfb 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -1848,8 +1848,6 @@ static struct file_system_type cgroup_fs_type = { .kill_sb = cgroup_kill_sb, }; -static struct kobject *cgroup_kobj; - /** * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy * @task: target task @@ -4822,13 +4820,13 @@ int __init cgroup_init(void) } } - cgroup_kobj = kobject_create_and_add("cgroup", fs_kobj); - if (!cgroup_kobj) - return -ENOMEM; + err = sysfs_create_mount_point(fs_kobj, "cgroup"); + if (err) + return err; err = register_filesystem(&cgroup_fs_type); if (err < 0) { - kobject_put(cgroup_kobj); + sysfs_remove_mount_point(fs_kobj, "cgroup"); return err; } diff --git a/security/inode.c b/security/inode.c index 43ce6e1..617c7ce 100644 --- a/security/inode.c +++ b/security/inode.c @@ -215,19 +215,17 @@ void securityfs_remove(struct dentry *dentry) } EXPORT_SYMBOL_GPL(securityfs_remove); -static struct kobject *security_kobj; - static int __init securityfs_init(void) { int retval; - security_kobj = kobject_create_and_add("security", kernel_kobj); - if (!security_kobj) - return -EINVAL; + retval = sysfs_create_mount_point(kernel_kobj, "security"); + if (retval) + return retval; retval = register_filesystem(&fs_type); if (retval) - kobject_put(security_kobj); + sysfs_remove_mount_point(kernel_kobj, "security"); return retval; } diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 138949a..181fcd3 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -1899,7 +1899,6 @@ static struct file_system_type sel_fs_type = { }; struct vfsmount *selinuxfs_mount; -static struct kobject *selinuxfs_kobj; static int __init init_sel_fs(void) { @@ -1908,13 +1907,13 @@ static int __init init_sel_fs(void) if (!selinux_enabled) return 0; - selinuxfs_kobj = kobject_create_and_add("selinux", fs_kobj); - if (!selinuxfs_kobj) - return -ENOMEM; + err = sysfs_create_mount_point(fs_kobj, "selinux"); + if (err) + return err; err = register_filesystem(&sel_fs_type); if (err) { - kobject_put(selinuxfs_kobj); + sysfs_remove_mount_point(fs_kobj, "selinux"); return err; } @@ -1933,7 +1932,7 @@ __initcall(init_sel_fs); #ifdef CONFIG_SECURITY_SELINUX_DISABLE void exit_sel_fs(void) { - kobject_put(selinuxfs_kobj); + sysfs_remove_mount_point(fs_kobj, "selinux"); kern_unmount(selinuxfs_mount); unregister_filesystem(&sel_fs_type); } diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 32b2488..8608fd7 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -2136,16 +2136,16 @@ static const struct file_operations smk_revoke_subj_ops = { .llseek = generic_file_llseek, }; -static struct kset *smackfs_kset; /** * smk_init_sysfs - initialize /sys/fs/smackfs * */ static int smk_init_sysfs(void) { - smackfs_kset = kset_create_and_add("smackfs", NULL, fs_kobj); - if (!smackfs_kset) - return -ENOMEM; + int err; + err = sysfs_create_mount_point(fs_kobj, "smackfs"); + if (err) + return err; return 0; }