X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fdevpts%2Finode.c;h=e4d168cab8e07138d5bab1c74407fa62cc21c512;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=db40284e77229dce8ad504d4defd15924ff857bc;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index db40284e7..e4d168cab 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -18,8 +18,35 @@ #include #include #include -#include -#include "xattr.h" +#include + +extern struct xattr_handler devpts_xattr_security_handler; + +static struct xattr_handler *devpts_xattr_handlers[] = { +#ifdef CONFIG_DEVPTS_FS_SECURITY + &devpts_xattr_security_handler, +#endif + NULL +}; + +static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd) +{ + int ret = -EACCES; + + if (vx_check(inode->i_xid, VX_IDENT)) + ret = generic_permission(inode, mask, NULL); + return ret; +} + +static struct inode_operations devpts_file_inode_operations = { +#ifdef CONFIG_DEVPTS_FS_XATTR + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .listxattr = generic_listxattr, + .removexattr = generic_removexattr, +#endif + .permission = devpts_permission, +}; static struct vfsmount *devpts_mnt; static struct dentry *devpts_root; @@ -145,6 +172,8 @@ devpts_fill_super(struct super_block *s, void *data, int silent) s->s_blocksize_bits = 10; s->s_magic = DEVPTS_SUPER_MAGIC; s->s_op = &devpts_sops; + s->s_xattr = devpts_xattr_handlers; + s->s_time_gran = 1; inode = new_inode(s); if (!inode) @@ -196,23 +225,6 @@ static struct dentry *get_node(int num) return lookup_one_len(s, root, sprintf(s, "%d", num)); } -static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd) -{ - int ret = -EACCES; - - if (vx_check(inode->i_xid, VX_IDENT)) - ret = vfs_permission(inode, mask); - return ret; -} - -static struct inode_operations devpts_file_inode_operations = { - .setxattr = devpts_setxattr, - .getxattr = devpts_getxattr, - .listxattr = devpts_listxattr, - .removexattr = devpts_removexattr, - .permission = devpts_permission, -}; - int devpts_pty_new(struct tty_struct *tty) { int number = tty->index; @@ -282,10 +294,7 @@ void devpts_pty_kill(int number) static int __init init_devpts_fs(void) { - int err = init_devpts_xattr(); - if (err) - return err; - err = register_filesystem(&devpts_fs_type); + int err = register_filesystem(&devpts_fs_type); if (!err) { devpts_mnt = kern_mount(&devpts_fs_type); if (IS_ERR(devpts_mnt)) @@ -298,7 +307,6 @@ static void __exit exit_devpts_fs(void) { unregister_filesystem(&devpts_fs_type); mntput(devpts_mnt); - exit_devpts_xattr(); } module_init(init_devpts_fs)