--- linux-2.6.16-rc4/fs/devpts/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/devpts/inode.c 2006-02-17 23:26:32 +0100 @@ -19,7 +19,20 @@ #include #include -#define DEVPTS_SUPER_MAGIC 0x1cd1 + +static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd) +{ + int ret = -EACCES; + + /* devpts is xid tagged */ + if (vx_check((xid_t)inode->i_tag, VX_IDENT)) + ret = generic_permission(inode, mask, NULL); + return ret; +} + +static struct inode_operations devpts_file_inode_operations = { + .permission = devpts_permission, +}; static struct vfsmount *devpts_mnt; static struct dentry *devpts_root; --- linux-2.6.16-rc4/fs/devpts/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/devpts/inode.c 2006-02-17 23:26:32 +0100 @@ -69,6 +82,25 @@ static int devpts_remount(struct super_b return 0; } +static int devpts_filter(struct dentry *de) +{ + /* devpts is xid tagged */ + return vx_check((xid_t)de->d_inode->i_tag, VX_IDENT); +} + +static int devpts_readdir(struct file * filp, void * dirent, filldir_t filldir) +{ + return dcache_readdir_filter(filp, dirent, filldir, devpts_filter); +} + +static struct file_operations devpts_dir_operations = { + .open = dcache_dir_open, + .release = dcache_dir_close, + .llseek = dcache_dir_lseek, + .read = generic_read_dir, + .readdir = devpts_readdir, +}; + static struct super_operations devpts_sops = { .statfs = simple_statfs, .remount_fs = devpts_remount,