Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753508Ab3CCP24 (ORCPT ); Sun, 3 Mar 2013 10:28:56 -0500 Received: from hrndva-omtalb.mail.rr.com ([71.74.56.122]:10333 "EHLO hrndva-omtalb.mail.rr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753294Ab3CCP2y (ORCPT ); Sun, 3 Mar 2013 10:28:54 -0500 X-Authority-Analysis: v=2.0 cv=H5hZMpki c=1 sm=0 a=tLUlnkoJZcZI9ocdGARlSQ==:17 a=c11ml42nfjYA:10 a=wom5GMh1gUkA:10 a=vit7wZPmj8QA:10 a=Rj1_iGo3bfgA:10 a=kj9zAlcOel0A:10 a=hBqU3vQJAAAA:8 a=6_N-eGuD3TUA:10 a=PtDNVHqPAAAA:8 a=DfNHnWVPAAAA:8 a=MCt4PvFnAAAA:8 a=nVQ6uNACIxQ-H7peWoQA:9 a=CjuIK1q_8ugA:10 a=wYE_KDyynt4A:10 a=lBRciGGoxdUA:10 a=6A0Du4P8zTEA:10 a=tLUlnkoJZcZI9ocdGARlSQ==:117 X-Cloudmark-Score: 0 X-Authenticated-User: X-Originating-IP: 70.114.148.7 Date: Sun, 3 Mar 2013 09:29:34 -0600 From: "Serge E. Hallyn" To: "Eric W. Biederman" Cc: "Serge E. Hallyn" , Kees Cook , LKML , Serge Hallyn , Brad Spengler , Al Viro , Eric Paris , Rusty Russell , linux-fsdevel@vger.kernel.org Subject: Re: [RFC][PATCH] fs: Limit sys_mount to only loading filesystem modules. Message-ID: <20130303152933.GA14463@austin.hallyn.com> References: <20130303005700.GA32213@austin.hallyn.com> <20130303035608.GA2703@austin.hallyn.com> <87vc98x019.fsf_-_@xmission.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87vc98x019.fsf_-_@xmission.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 35022 Lines: 1037 Quoting Eric W. Biederman (ebiederm@xmission.com): > > Modify the request_module to prefix the file system type with "fs-" > and add aliases to all of the filesystems that can be built as modules > to match. > > A common practice is to build all of the kernel code and leave code > that is not commonly needed as modules, with the result that many > users are exposed to any bug anywhere in the kernel. > > Looking for filesystems with a fs- prefix limits the pool of possible > modules that can be loaded by mount to just filesystems trivially > making things safer with no real cost. > > Using aliases means user space can control the policy of which > filesystem modules are auto-loaded by editing /etc/modprobe.d/*.conf > with blacklist and alias directives. Allowing simple, safe, > well understood work-arounds to known problematic software. > > This also addresses a rare but unfortunate problem where the filesystem > name is not the same as it's module name and module auto-loading > would not work. While writing this patch I saw a handful of such > cases. The most significant being autofs that lives in the module > autofs4. > > Signed-off-by: "Eric W. Biederman" Acked-by: Serge Hallyn > --- > arch/ia64/kernel/perfmon.c | 1 + > arch/powerpc/platforms/cell/spufs/inode.c | 1 + > arch/s390/hypfs/inode.c | 1 + > drivers/firmware/efivars.c | 1 + > drivers/infiniband/hw/ipath/ipath_fs.c | 1 + > drivers/infiniband/hw/qib/qib_fs.c | 1 + > drivers/misc/ibmasm/ibmasmfs.c | 1 + > drivers/mtd/mtdchar.c | 1 + > drivers/oprofile/oprofilefs.c | 1 + > drivers/staging/ccg/f_fs.c | 1 + > drivers/usb/gadget/f_fs.c | 1 + > drivers/usb/gadget/inode.c | 1 + > drivers/xen/xenfs/super.c | 1 + > fs/9p/vfs_super.c | 1 + > fs/adfs/super.c | 1 + > fs/affs/super.c | 1 + > fs/afs/super.c | 1 + > fs/autofs4/init.c | 1 + > fs/befs/linuxvfs.c | 1 + > fs/bfs/inode.c | 1 + > fs/binfmt_misc.c | 1 + > fs/btrfs/super.c | 1 + > fs/ceph/super.c | 1 + > fs/coda/inode.c | 1 + > fs/configfs/mount.c | 1 + > fs/cramfs/inode.c | 1 + > fs/debugfs/inode.c | 1 + > fs/devpts/inode.c | 1 + > fs/ecryptfs/main.c | 1 + > fs/efs/super.c | 1 + > fs/exofs/super.c | 1 + > fs/ext2/super.c | 1 + > fs/ext3/super.c | 1 + > fs/ext4/super.c | 5 +++-- > fs/f2fs/super.c | 1 + > fs/fat/namei_msdos.c | 1 + > fs/fat/namei_vfat.c | 1 + > fs/filesystems.c | 2 +- > fs/freevxfs/vxfs_super.c | 2 +- > fs/fuse/control.c | 1 + > fs/fuse/inode.c | 2 ++ > fs/gfs2/ops_fstype.c | 4 +++- > fs/hfs/super.c | 1 + > fs/hfsplus/super.c | 1 + > fs/hppfs/hppfs.c | 1 + > fs/hugetlbfs/inode.c | 1 + > fs/isofs/inode.c | 3 +-- > fs/jffs2/super.c | 1 + > fs/jfs/super.c | 1 + > fs/logfs/super.c | 1 + > fs/minix/inode.c | 1 + > fs/ncpfs/inode.c | 1 + > fs/nfs/super.c | 3 ++- > fs/nfsd/nfsctl.c | 1 + > fs/nilfs2/super.c | 1 + > fs/ntfs/super.c | 1 + > fs/ocfs2/dlmfs/dlmfs.c | 1 + > fs/omfs/inode.c | 1 + > fs/openpromfs/inode.c | 1 + > fs/qnx4/inode.c | 1 + > fs/qnx6/inode.c | 1 + > fs/reiserfs/super.c | 1 + > fs/romfs/super.c | 1 + > fs/sysv/super.c | 3 ++- > fs/ubifs/super.c | 1 + > fs/ufs/super.c | 1 + > fs/xfs/xfs_super.c | 1 + > include/linux/fs.h | 2 ++ > net/sunrpc/rpc_pipe.c | 4 +--- > 69 files changed, 77 insertions(+), 12 deletions(-) > > diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c > index ea39eba..db6e866 100644 > --- a/arch/ia64/kernel/perfmon.c > +++ b/arch/ia64/kernel/perfmon.c > @@ -619,6 +619,7 @@ static struct file_system_type pfm_fs_type = { > .mount = pfmfs_mount, > .kill_sb = kill_anon_super, > }; > +MODULE_ALIAS_FS("pfmfs"); > > DEFINE_PER_CPU(unsigned long, pfm_syst_info); > DEFINE_PER_CPU(struct task_struct *, pmu_owner); > diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c > index dba1ce2..db6d080 100644 > --- a/arch/powerpc/platforms/cell/spufs/inode.c > +++ b/arch/powerpc/platforms/cell/spufs/inode.c > @@ -771,6 +771,7 @@ static struct file_system_type spufs_type = { > .mount = spufs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("spufs"); > > static int __init spufs_init(void) > { > diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c > index 06ea69b..50d9bde 100644 > --- a/arch/s390/hypfs/inode.c > +++ b/arch/s390/hypfs/inode.c > @@ -458,6 +458,7 @@ static struct file_system_type hypfs_type = { > .mount = hypfs_mount, > .kill_sb = hypfs_kill_super > }; > +MODULE_ALIAS_FS("s390_hypfs"); > > static const struct super_operations hypfs_s_ops = { > .statfs = simple_statfs, > diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c > index fed08b6..6881e2e 100644 > --- a/drivers/firmware/efivars.c > +++ b/drivers/firmware/efivars.c > @@ -1116,6 +1116,7 @@ static struct file_system_type efivarfs_type = { > .mount = efivarfs_mount, > .kill_sb = efivarfs_kill_sb, > }; > +MODULE_ALIAS_FS("efivarfs"); > > static const struct inode_operations efivarfs_dir_inode_operations = { > .lookup = simple_lookup, > diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c > index a4de9d5..2c082cd 100644 > --- a/drivers/infiniband/hw/ipath/ipath_fs.c > +++ b/drivers/infiniband/hw/ipath/ipath_fs.c > @@ -410,6 +410,7 @@ static struct file_system_type ipathfs_fs_type = { > .mount = ipathfs_mount, > .kill_sb = ipathfs_kill_super, > }; > +MODULE_ALIAS_FS("ipathfs"); > > int __init ipath_init_ipathfs(void) > { > diff --git a/drivers/infiniband/hw/qib/qib_fs.c b/drivers/infiniband/hw/qib/qib_fs.c > index 65a2a23..9566ceb 100644 > --- a/drivers/infiniband/hw/qib/qib_fs.c > +++ b/drivers/infiniband/hw/qib/qib_fs.c > @@ -604,6 +604,7 @@ static struct file_system_type qibfs_fs_type = { > .mount = qibfs_mount, > .kill_sb = qibfs_kill_super, > }; > +MODULE_ALIAS_FS("ipathfs"); > > int __init qib_init_qibfs(void) > { > diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c > index 6673e57..ce5b756 100644 > --- a/drivers/misc/ibmasm/ibmasmfs.c > +++ b/drivers/misc/ibmasm/ibmasmfs.c > @@ -110,6 +110,7 @@ static struct file_system_type ibmasmfs_type = { > .mount = ibmasmfs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("ibmasmfs"); > > static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent) > { > diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c > index 82c0616..92ab30a 100644 > --- a/drivers/mtd/mtdchar.c > +++ b/drivers/mtd/mtdchar.c > @@ -1238,6 +1238,7 @@ static struct file_system_type mtd_inodefs_type = { > .mount = mtd_inodefs_mount, > .kill_sb = kill_anon_super, > }; > +MODULE_ALIAS_FS("mtd_inodefs"); > > static int __init init_mtdchar(void) > { > diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c > index 849357c..55e3646 100644 > --- a/drivers/oprofile/oprofilefs.c > +++ b/drivers/oprofile/oprofilefs.c > @@ -266,6 +266,7 @@ static struct file_system_type oprofilefs_type = { > .mount = oprofilefs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("oprofilefs"); > > > int __init oprofilefs_register(void) > diff --git a/drivers/staging/ccg/f_fs.c b/drivers/staging/ccg/f_fs.c > index 8adc79d..f6373da 100644 > --- a/drivers/staging/ccg/f_fs.c > +++ b/drivers/staging/ccg/f_fs.c > @@ -1223,6 +1223,7 @@ static struct file_system_type ffs_fs_type = { > .mount = ffs_fs_mount, > .kill_sb = ffs_fs_kill_sb, > }; > +MODULE_ALIAS_FS("functionfs"); > > > /* Driver's main init/cleanup functions *************************************/ > diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c > index 38388d7..c377ff8 100644 > --- a/drivers/usb/gadget/f_fs.c > +++ b/drivers/usb/gadget/f_fs.c > @@ -1235,6 +1235,7 @@ static struct file_system_type ffs_fs_type = { > .mount = ffs_fs_mount, > .kill_sb = ffs_fs_kill_sb, > }; > +MODULE_ALIAS_FS("functionfs"); > > > /* Driver's main init/cleanup functions *************************************/ > diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c > index 8ac840f..e2b2e9c 100644 > --- a/drivers/usb/gadget/inode.c > +++ b/drivers/usb/gadget/inode.c > @@ -2105,6 +2105,7 @@ static struct file_system_type gadgetfs_type = { > .mount = gadgetfs_mount, > .kill_sb = gadgetfs_kill_sb, > }; > +MODULE_ALIAS_FS("gadgetfs"); > > /*----------------------------------------------------------------------*/ > > diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c > index 459b9ac..891d83f 100644 > --- a/drivers/xen/xenfs/super.c > +++ b/drivers/xen/xenfs/super.c > @@ -119,6 +119,7 @@ static struct file_system_type xenfs_type = { > .mount = xenfs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("xenfs"); > > static int __init xenfs_init(void) > { > diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c > index 137d503..17368f4 100644 > --- a/fs/9p/vfs_super.c > +++ b/fs/9p/vfs_super.c > @@ -365,3 +365,4 @@ struct file_system_type v9fs_fs_type = { > .owner = THIS_MODULE, > .fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT, > }; > +MODULE_ALIAS_FS("9p"); > diff --git a/fs/adfs/super.c b/fs/adfs/super.c > index d571229..0ff4bae 100644 > --- a/fs/adfs/super.c > +++ b/fs/adfs/super.c > @@ -524,6 +524,7 @@ static struct file_system_type adfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("adfs"); > > static int __init init_adfs_fs(void) > { > diff --git a/fs/affs/super.c b/fs/affs/super.c > index b84dc73..45161a8 100644 > --- a/fs/affs/super.c > +++ b/fs/affs/super.c > @@ -622,6 +622,7 @@ static struct file_system_type affs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("affs"); > > static int __init init_affs_fs(void) > { > diff --git a/fs/afs/super.c b/fs/afs/super.c > index 7c31ec3..c486155 100644 > --- a/fs/afs/super.c > +++ b/fs/afs/super.c > @@ -45,6 +45,7 @@ struct file_system_type afs_fs_type = { > .kill_sb = afs_kill_super, > .fs_flags = 0, > }; > +MODULE_ALIAS_FS("afs"); > > static const struct super_operations afs_super_ops = { > .statfs = afs_statfs, > diff --git a/fs/autofs4/init.c b/fs/autofs4/init.c > index cddc74b..b3db517 100644 > --- a/fs/autofs4/init.c > +++ b/fs/autofs4/init.c > @@ -26,6 +26,7 @@ static struct file_system_type autofs_fs_type = { > .mount = autofs_mount, > .kill_sb = autofs4_kill_sb, > }; > +MODULE_ALIAS_FS("autofs"); > > static int __init init_autofs4_fs(void) > { > diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c > index 2b3bda8..8613785 100644 > --- a/fs/befs/linuxvfs.c > +++ b/fs/befs/linuxvfs.c > @@ -951,6 +951,7 @@ static struct file_system_type befs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("befs"); > > static int __init > init_befs_fs(void) > diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c > index 737aaa3..5e376bb 100644 > --- a/fs/bfs/inode.c > +++ b/fs/bfs/inode.c > @@ -473,6 +473,7 @@ static struct file_system_type bfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("bfs"); > > static int __init init_bfs_fs(void) > { > diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c > index 0c8869f..65f91ec 100644 > --- a/fs/binfmt_misc.c > +++ b/fs/binfmt_misc.c > @@ -720,6 +720,7 @@ static struct file_system_type bm_fs_type = { > .mount = bm_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("binfmt_misc"); > > static int __init init_misc_binfmt(void) > { > diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c > index d8982e9..fe51afd 100644 > --- a/fs/btrfs/super.c > +++ b/fs/btrfs/super.c > @@ -1518,6 +1518,7 @@ static struct file_system_type btrfs_fs_type = { > .kill_sb = btrfs_kill_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("btrfs"); > > /* > * used by btrfsctl to scan devices when no FS is mounted > diff --git a/fs/ceph/super.c b/fs/ceph/super.c > index e86aa994..0a25c04 100644 > --- a/fs/ceph/super.c > +++ b/fs/ceph/super.c > @@ -947,6 +947,7 @@ static struct file_system_type ceph_fs_type = { > .kill_sb = ceph_kill_sb, > .fs_flags = FS_RENAME_DOES_D_MOVE, > }; > +MODULE_ALIAS_FS("ceph"); > > #define _STRINGIFY(x) #x > #define STRINGIFY(x) _STRINGIFY(x) > diff --git a/fs/coda/inode.c b/fs/coda/inode.c > index cf674e9..5075f81 100644 > --- a/fs/coda/inode.c > +++ b/fs/coda/inode.c > @@ -329,4 +329,5 @@ struct file_system_type coda_fs_type = { > .kill_sb = kill_anon_super, > .fs_flags = FS_BINARY_MOUNTDATA, > }; > +MODULE_ALIAS_FS("coda"); > > diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c > index aee0a7e..7f26c3c 100644 > --- a/fs/configfs/mount.c > +++ b/fs/configfs/mount.c > @@ -114,6 +114,7 @@ static struct file_system_type configfs_fs_type = { > .mount = configfs_do_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("configfs"); > > struct dentry *configfs_pin_fs(void) > { > diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c > index c6c3f91..3f79599 100644 > --- a/fs/cramfs/inode.c > +++ b/fs/cramfs/inode.c > @@ -573,6 +573,7 @@ static struct file_system_type cramfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("cramfs"); > > static int __init init_cramfs_fs(void) > { > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c > index 0c4f80b..4888cb3 100644 > --- a/fs/debugfs/inode.c > +++ b/fs/debugfs/inode.c > @@ -299,6 +299,7 @@ static struct file_system_type debug_fs_type = { > .mount = debug_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("debugfs"); > > static struct dentry *__create_file(const char *name, umode_t mode, > struct dentry *parent, void *data, > diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c > index f0f0faa..741626f 100644 > --- a/fs/devpts/inode.c > +++ b/fs/devpts/inode.c > @@ -380,6 +380,7 @@ static struct file_system_type devpts_fs_type = { > .kill_sb = devpts_kill_sb, > .fs_flags = FS_USERNS_MOUNT | FS_USERNS_DEV_MOUNT, > }; > +MODULE_ALIAS_FS("devpts"); > > struct vfsmount *devpts_mntget(struct file *filp) > { > diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c > index 4e0886c..e924cf4 100644 > --- a/fs/ecryptfs/main.c > +++ b/fs/ecryptfs/main.c > @@ -629,6 +629,7 @@ static struct file_system_type ecryptfs_fs_type = { > .kill_sb = ecryptfs_kill_block_super, > .fs_flags = 0 > }; > +MODULE_ALIAS_FS("ecryptfs"); > > /** > * inode_info_init_once > diff --git a/fs/efs/super.c b/fs/efs/super.c > index 2002431..c6f57a7 100644 > --- a/fs/efs/super.c > +++ b/fs/efs/super.c > @@ -33,6 +33,7 @@ static struct file_system_type efs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("efs"); > > static struct pt_types sgi_pt_types[] = { > {0x00, "SGI vh"}, > diff --git a/fs/exofs/super.c b/fs/exofs/super.c > index 5e59280..9d97633 100644 > --- a/fs/exofs/super.c > +++ b/fs/exofs/super.c > @@ -1010,6 +1010,7 @@ static struct file_system_type exofs_type = { > .mount = exofs_mount, > .kill_sb = generic_shutdown_super, > }; > +MODULE_ALIAS_FS("exofs"); > > static int __init init_exofs(void) > { > diff --git a/fs/ext2/super.c b/fs/ext2/super.c > index c25c56b..6438912 100644 > --- a/fs/ext2/super.c > +++ b/fs/ext2/super.c > @@ -1542,6 +1542,7 @@ static struct file_system_type ext2_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV | FS_USERNS_MOUNT, > }; > +MODULE_ALIAS_FS("ext2"); > > static int __init init_ext2_fs(void) > { > diff --git a/fs/ext3/super.c b/fs/ext3/super.c > index 4ba2683..d59852d 100644 > --- a/fs/ext3/super.c > +++ b/fs/ext3/super.c > @@ -3059,6 +3059,7 @@ static struct file_system_type ext3_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ext3"); > > static int __init init_ext3_fs(void) > { > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > index 3d4fb81..b3264ba 100644 > --- a/fs/ext4/super.c > +++ b/fs/ext4/super.c > @@ -92,6 +92,7 @@ static struct file_system_type ext2_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ext2"); > #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type) > #else > #define IS_EXT2_SB(sb) (0) > @@ -106,6 +107,7 @@ static struct file_system_type ext3_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ext3"); > #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type) > #else > #define IS_EXT3_SB(sb) (0) > @@ -5194,7 +5196,6 @@ static inline int ext2_feature_set_ok(struct super_block *sb) > return 0; > return 1; > } > -MODULE_ALIAS("ext2"); > #else > static inline void register_as_ext2(void) { } > static inline void unregister_as_ext2(void) { } > @@ -5227,7 +5228,6 @@ static inline int ext3_feature_set_ok(struct super_block *sb) > return 0; > return 1; > } > -MODULE_ALIAS("ext3"); > #else > static inline void register_as_ext3(void) { } > static inline void unregister_as_ext3(void) { } > @@ -5241,6 +5241,7 @@ static struct file_system_type ext4_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ext4"); > > static int __init ext4_init_feat_adverts(void) > { > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > index 37fad04..45ebdb6 100644 > --- a/fs/f2fs/super.c > +++ b/fs/f2fs/super.c > @@ -639,6 +639,7 @@ static struct file_system_type f2fs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("f2fs"); > > static int __init init_inodecache(void) > { > diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c > index e2cfda9..081b759 100644 > --- a/fs/fat/namei_msdos.c > +++ b/fs/fat/namei_msdos.c > @@ -668,6 +668,7 @@ static struct file_system_type msdos_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("msdos"); > > static int __init init_msdos_fs(void) > { > diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c > index ac959d6..2da9520 100644 > --- a/fs/fat/namei_vfat.c > +++ b/fs/fat/namei_vfat.c > @@ -1073,6 +1073,7 @@ static struct file_system_type vfat_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("vfat"); > > static int __init init_vfat_fs(void) > { > diff --git a/fs/filesystems.c b/fs/filesystems.c > index 71f9be2..490f48c 100644 > --- a/fs/filesystems.c > +++ b/fs/filesystems.c > @@ -274,7 +274,7 @@ struct file_system_type *get_fs_type(const char *name) > > fs = __get_fs_type(name, len); > if (!fs && capable(CAP_SYS_ADMIN) && > - (request_module("%.*s", len, name) == 0)) > + (request_module("fs-%.*s", len, name) == 0)) > fs = __get_fs_type(name, len); > > if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { > diff --git a/fs/freevxfs/vxfs_super.c b/fs/freevxfs/vxfs_super.c > index fed2c8a..4550743 100644 > --- a/fs/freevxfs/vxfs_super.c > +++ b/fs/freevxfs/vxfs_super.c > @@ -52,7 +52,6 @@ MODULE_AUTHOR("Christoph Hellwig"); > MODULE_DESCRIPTION("Veritas Filesystem (VxFS) driver"); > MODULE_LICENSE("Dual BSD/GPL"); > > -MODULE_ALIAS("vxfs"); /* makes mount -t vxfs autoload the module */ > > > static void vxfs_put_super(struct super_block *); > @@ -258,6 +257,7 @@ static struct file_system_type vxfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("vxfs"); /* makes mount -t vxfs autoload the module */ > > static int __init > vxfs_init(void) > diff --git a/fs/fuse/control.c b/fs/fuse/control.c > index 75a20c0..895cc91 100644 > --- a/fs/fuse/control.c > +++ b/fs/fuse/control.c > @@ -341,6 +341,7 @@ static struct file_system_type fuse_ctl_fs_type = { > .mount = fuse_ctl_mount, > .kill_sb = fuse_ctl_kill_sb, > }; > +MODULE_ALIAS_FS("fusectl"); > > int __init fuse_ctl_init(void) > { > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c > index d022569..6ab1666 100644 > --- a/fs/fuse/inode.c > +++ b/fs/fuse/inode.c > @@ -1127,6 +1127,7 @@ static struct file_system_type fuse_fs_type = { > .mount = fuse_mount, > .kill_sb = fuse_kill_sb_anon, > }; > +MODULE_ALIAS_FS("fuse"); > > #ifdef CONFIG_BLOCK > static struct dentry *fuse_mount_blk(struct file_system_type *fs_type, > @@ -1156,6 +1157,7 @@ static struct file_system_type fuseblk_fs_type = { > .kill_sb = fuse_kill_sb_blk, > .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, > }; > +MODULE_ALIAS_FS("fuseblk"); > > static inline int register_fuseblk(void) > { > diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c > index 1b612be..60ede2a 100644 > --- a/fs/gfs2/ops_fstype.c > +++ b/fs/gfs2/ops_fstype.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > > #include "gfs2.h" > #include "incore.h" > @@ -1425,6 +1426,7 @@ struct file_system_type gfs2_fs_type = { > .kill_sb = gfs2_kill_sb, > .owner = THIS_MODULE, > }; > +MODULE_ALIAS_FS("gfs2"); > > struct file_system_type gfs2meta_fs_type = { > .name = "gfs2meta", > @@ -1432,4 +1434,4 @@ struct file_system_type gfs2meta_fs_type = { > .mount = gfs2_mount_meta, > .owner = THIS_MODULE, > }; > - > +MODULE_ALIAS_FS("gfs2meta"); > diff --git a/fs/hfs/super.c b/fs/hfs/super.c > index e93ddaa..bbaaa8a 100644 > --- a/fs/hfs/super.c > +++ b/fs/hfs/super.c > @@ -466,6 +466,7 @@ static struct file_system_type hfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("hfs"); > > static void hfs_init_once(void *p) > { > diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c > index 796198d..d2e1718 100644 > --- a/fs/hfsplus/super.c > +++ b/fs/hfsplus/super.c > @@ -618,6 +618,7 @@ static struct file_system_type hfsplus_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("hfsplus"); > > static void hfsplus_init_once(void *p) > { > diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c > index 43b315f..3eefbcc 100644 > --- a/fs/hppfs/hppfs.c > +++ b/fs/hppfs/hppfs.c > @@ -748,6 +748,7 @@ static struct file_system_type hppfs_type = { > .kill_sb = kill_anon_super, > .fs_flags = 0, > }; > +MODULE_ALIAS_FS("hppfs"); > > static int __init init_hppfs(void) > { > diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c > index 78bde32..81d1cb4 100644 > --- a/fs/hugetlbfs/inode.c > +++ b/fs/hugetlbfs/inode.c > @@ -896,6 +896,7 @@ static struct file_system_type hugetlbfs_fs_type = { > .mount = hugetlbfs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("hugetlbfs"); > > static struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE]; > > diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c > index 67ce525..a67f16e 100644 > --- a/fs/isofs/inode.c > +++ b/fs/isofs/inode.c > @@ -1556,6 +1556,7 @@ static struct file_system_type iso9660_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("iso9660"); > > static int __init init_iso9660_fs(void) > { > @@ -1593,5 +1594,3 @@ static void __exit exit_iso9660_fs(void) > module_init(init_iso9660_fs) > module_exit(exit_iso9660_fs) > MODULE_LICENSE("GPL"); > -/* Actual filesystem name is iso9660, as requested in filesystems.c */ > -MODULE_ALIAS("iso9660"); > diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c > index d3d8799..0defb1c 100644 > --- a/fs/jffs2/super.c > +++ b/fs/jffs2/super.c > @@ -356,6 +356,7 @@ static struct file_system_type jffs2_fs_type = { > .mount = jffs2_mount, > .kill_sb = jffs2_kill_sb, > }; > +MODULE_ALIAS_FS("jffs2"); > > static int __init init_jffs2_fs(void) > { > diff --git a/fs/jfs/super.c b/fs/jfs/super.c > index 060ba63..2003e83 100644 > --- a/fs/jfs/super.c > +++ b/fs/jfs/super.c > @@ -833,6 +833,7 @@ static struct file_system_type jfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("jfs"); > > static void init_once(void *foo) > { > diff --git a/fs/logfs/super.c b/fs/logfs/super.c > index 345c24b..5436029 100644 > --- a/fs/logfs/super.c > +++ b/fs/logfs/super.c > @@ -608,6 +608,7 @@ static struct file_system_type logfs_fs_type = { > .fs_flags = FS_REQUIRES_DEV, > > }; > +MODULE_ALIAS_FS("logfs"); > > static int __init logfs_init(void) > { > diff --git a/fs/minix/inode.c b/fs/minix/inode.c > index 99541cc..df12249 100644 > --- a/fs/minix/inode.c > +++ b/fs/minix/inode.c > @@ -660,6 +660,7 @@ static struct file_system_type minix_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("minix"); > > static int __init init_minix_fs(void) > { > diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c > index e2be336..38b4fe1 100644 > --- a/fs/ncpfs/inode.c > +++ b/fs/ncpfs/inode.c > @@ -1051,6 +1051,7 @@ static struct file_system_type ncp_fs_type = { > .kill_sb = kill_anon_super, > .fs_flags = FS_BINARY_MOUNTDATA, > }; > +MODULE_ALIAS_FS("ncpfs"); > > static int __init init_ncp_fs(void) > { > diff --git a/fs/nfs/super.c b/fs/nfs/super.c > index befbae0..e11a863 100644 > --- a/fs/nfs/super.c > +++ b/fs/nfs/super.c > @@ -293,6 +293,7 @@ struct file_system_type nfs_fs_type = { > .kill_sb = nfs_kill_super, > .fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA, > }; > +MODULE_ALIAS_FS("nfs"); > EXPORT_SYMBOL_GPL(nfs_fs_type); > > struct file_system_type nfs_xdev_fs_type = { > @@ -332,6 +333,7 @@ struct file_system_type nfs4_fs_type = { > .kill_sb = nfs_kill_super, > .fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA, > }; > +MODULE_ALIAS_FS("nfs4"); > EXPORT_SYMBOL_GPL(nfs4_fs_type); > > static int __init register_nfs4_fs(void) > @@ -2716,6 +2718,5 @@ module_param(send_implementation_id, ushort, 0644); > MODULE_PARM_DESC(send_implementation_id, > "Send implementation ID with NFSv4.1 exchange_id"); > MODULE_PARM_DESC(nfs4_unique_id, "nfs_client_id4 uniquifier string"); > -MODULE_ALIAS("nfs4"); > > #endif /* CONFIG_NFS_V4 */ > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > index 7493428..939bfd9 100644 > --- a/fs/nfsd/nfsctl.c > +++ b/fs/nfsd/nfsctl.c > @@ -1052,6 +1052,7 @@ static struct file_system_type nfsd_fs_type = { > .mount = nfsd_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("nfsd"); > > #ifdef CONFIG_PROC_FS > static int create_proc_exports_entry(void) > diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c > index 3c991dc..c7d1f9f 100644 > --- a/fs/nilfs2/super.c > +++ b/fs/nilfs2/super.c > @@ -1361,6 +1361,7 @@ struct file_system_type nilfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("nilfs2"); > > static void nilfs_inode_init_once(void *obj) > { > diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c > index 4a8289f8..82650d5 100644 > --- a/fs/ntfs/super.c > +++ b/fs/ntfs/super.c > @@ -3079,6 +3079,7 @@ static struct file_system_type ntfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ntfs"); > > /* Stable names for the slab caches. */ > static const char ntfs_index_ctx_cache_name[] = "ntfs_index_ctx_cache"; > diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c > index 16b712d..9259d78 100644 > --- a/fs/ocfs2/dlmfs/dlmfs.c > +++ b/fs/ocfs2/dlmfs/dlmfs.c > @@ -640,6 +640,7 @@ static struct file_system_type dlmfs_fs_type = { > .mount = dlmfs_mount, > .kill_sb = kill_litter_super, > }; > +MODULE_ALIAS_FS("ocfs2_dlmfs"); > > static int __init init_dlmfs_fs(void) > { > diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c > index 25d715c..d8b0afd 100644 > --- a/fs/omfs/inode.c > +++ b/fs/omfs/inode.c > @@ -572,6 +572,7 @@ static struct file_system_type omfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("omfs"); > > static int __init init_omfs_fs(void) > { > diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c > index 2ad080f..66abc26 100644 > --- a/fs/openpromfs/inode.c > +++ b/fs/openpromfs/inode.c > @@ -432,6 +432,7 @@ static struct file_system_type openprom_fs_type = { > .mount = openprom_mount, > .kill_sb = kill_anon_super, > }; > +MODULE_ALIAS_FS("openpromfs"); > > static void op_inode_init_once(void *data) > { > diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c > index 43098bb..2e8caa6 100644 > --- a/fs/qnx4/inode.c > +++ b/fs/qnx4/inode.c > @@ -412,6 +412,7 @@ static struct file_system_type qnx4_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("qnx4"); > > static int __init init_qnx4_fs(void) > { > diff --git a/fs/qnx6/inode.c b/fs/qnx6/inode.c > index 57199a5..8d941ed 100644 > --- a/fs/qnx6/inode.c > +++ b/fs/qnx6/inode.c > @@ -672,6 +672,7 @@ static struct file_system_type qnx6_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("qnx6"); > > static int __init init_qnx6_fs(void) > { > diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c > index 418bdc3..194113b 100644 > --- a/fs/reiserfs/super.c > +++ b/fs/reiserfs/super.c > @@ -2434,6 +2434,7 @@ struct file_system_type reiserfs_fs_type = { > .kill_sb = reiserfs_kill_sb, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("reiserfs"); > > MODULE_DESCRIPTION("ReiserFS journaled filesystem"); > MODULE_AUTHOR("Hans Reiser "); > diff --git a/fs/romfs/super.c b/fs/romfs/super.c > index fd7c5f6..42e3d06 100644 > --- a/fs/romfs/super.c > +++ b/fs/romfs/super.c > @@ -599,6 +599,7 @@ static struct file_system_type romfs_fs_type = { > .kill_sb = romfs_kill_sb, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("romfs"); > > /* > * inode storage initialiser > diff --git a/fs/sysv/super.c b/fs/sysv/super.c > index a38e87b..a39938b 100644 > --- a/fs/sysv/super.c > +++ b/fs/sysv/super.c > @@ -545,6 +545,7 @@ static struct file_system_type sysv_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("sysv"); > > static struct file_system_type v7_fs_type = { > .owner = THIS_MODULE, > @@ -553,6 +554,7 @@ static struct file_system_type v7_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("v7"); > > static int __init init_sysv_fs(void) > { > @@ -586,5 +588,4 @@ static void __exit exit_sysv_fs(void) > > module_init(init_sysv_fs) > module_exit(exit_sysv_fs) > -MODULE_ALIAS("v7"); > MODULE_LICENSE("GPL"); > diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c > index ddc0f6a..ac838b8 100644 > --- a/fs/ubifs/super.c > +++ b/fs/ubifs/super.c > @@ -2174,6 +2174,7 @@ static struct file_system_type ubifs_fs_type = { > .mount = ubifs_mount, > .kill_sb = kill_ubifs_super, > }; > +MODULE_ALIAS_FS("ubifs"); > > /* > * Inode slab cache constructor. > diff --git a/fs/ufs/super.c b/fs/ufs/super.c > index dc8e3a8..329f2f5 100644 > --- a/fs/ufs/super.c > +++ b/fs/ufs/super.c > @@ -1500,6 +1500,7 @@ static struct file_system_type ufs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("ufs"); > > static int __init init_ufs_fs(void) > { > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index c407121..ea341ce 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -1561,6 +1561,7 @@ static struct file_system_type xfs_fs_type = { > .kill_sb = kill_block_super, > .fs_flags = FS_REQUIRES_DEV, > }; > +MODULE_ALIAS_FS("xfs"); > > STATIC int __init > xfs_init_zones(void) > diff --git a/include/linux/fs.h b/include/linux/fs.h > index d0a246d..f4b68f5 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -1829,6 +1829,8 @@ struct file_system_type { > struct lock_class_key i_mutex_dir_key; > }; > > +#define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME) > + > extern struct dentry *mount_ns(struct file_system_type *fs_type, int flags, > void *data, int (*fill_super)(struct super_block *, void *, int)); > extern struct dentry *mount_bdev(struct file_system_type *fs_type, > diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c > index fd10981..6e86b2c 100644 > --- a/net/sunrpc/rpc_pipe.c > +++ b/net/sunrpc/rpc_pipe.c > @@ -1174,6 +1174,7 @@ static struct file_system_type rpc_pipe_fs_type = { > .mount = rpc_mount, > .kill_sb = rpc_kill_sb, > }; > +MODULE_ALIAS_FS("rpc_pipefs"); > > static void > init_once(void *foo) > @@ -1218,6 +1219,3 @@ void unregister_rpc_pipefs(void) > kmem_cache_destroy(rpc_inode_cachep); > unregister_filesystem(&rpc_pipe_fs_type); > } > - > -/* Make 'mount -t rpc_pipefs ...' autoload this module. */ > -MODULE_ALIAS("rpc_pipefs"); > -- > 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/