diff -urpPX nopatch linux-2.4.33/fs/proc/generic.c linux/fs/proc/generic.c --- linux-2.4.33/fs/proc/generic.c Wed Jan 19 17:10:11 2005 +++ linux/fs/proc/generic.c Sun Aug 13 20:59:16 2006 @@ -396,7 +402,9 @@ static int proc_register(struct proc_dir static void proc_kill_inodes(struct proc_dir_entry *de) { struct list_head *p; - struct super_block *sb = proc_mnt->mnt_sb; + struct super_block *sb = proc_super; + + if (!sb) return; /* * Actually it's a partial revoke(). diff -urpPX nopatch linux-2.4.33/fs/proc/inode.c linux/fs/proc/inode.c --- linux-2.4.33/fs/proc/inode.c Fri Nov 28 21:26:21 2003 +++ linux/fs/proc/inode.c Wed Aug 16 04:54:57 2006 @@ -73,8 +74,6 @@ static void proc_delete_inode(struct ino } } -struct vfsmount *proc_mnt; - static void proc_read_inode(struct inode * inode) { inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; @@ -176,12 +179,15 @@ out_fail: goto out; } +struct super_block *proc_super = NULL; + struct super_block *proc_read_super(struct super_block *s,void *data, int silent) { struct inode * root_inode; struct task_struct *p; + s->s_flags |= MS_NOSUID | MS_NOEXEC | MS_NODEV; s->s_blocksize = 1024; s->s_blocksize_bits = 10; s->s_magic = PROC_SUPER_MAGIC; @@ -201,6 +207,10 @@ struct super_block *proc_read_super(stru if (!s->s_root) goto out_no_root; parse_options(data, &root_inode->i_uid, &root_inode->i_gid); + if (!proc_super) { + s->s_count++; + proc_super = s; + } return s; out_no_root: diff -urpPX nopatch linux-2.4.33/fs/proc/root.c linux/fs/proc/root.c --- linux-2.4.33/fs/proc/root.c Wed Nov 17 14:54:21 2004 +++ linux/fs/proc/root.c Sat Aug 12 08:51:47 2006 @@ -30,12 +31,6 @@ void __init proc_root_init(void) int err = register_filesystem(&proc_fs_type); if (err) return; - proc_mnt = kern_mount(&proc_fs_type); - err = PTR_ERR(proc_mnt); - if (IS_ERR(proc_mnt)) { - unregister_filesystem(&proc_fs_type); - return; - } proc_misc_init(); proc_net = proc_mkdir("net", 0); proc_net_stat = proc_mkdir("net/stat", NULL); diff -urpPX nopatch linux-2.4.33/include/linux/proc_fs.h linux/include/linux/proc_fs.h --- linux-2.4.33/include/linux/proc_fs.h Sat Aug 12 08:48:39 2006 +++ linux/include/linux/proc_fs.h Sat Aug 12 08:51:47 2006 @@ -96,7 +96,7 @@ extern struct proc_dir_entry *create_pro struct proc_dir_entry *parent); extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); -extern struct vfsmount *proc_mnt; +extern struct super_block *proc_super; extern struct super_block *proc_read_super(struct super_block *,void *,int); extern struct inode * proc_get_inode(struct super_block *, int, struct proc_dir_entry *);