aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/proc/inode.c')
-rw-r--r--fs/proc/inode.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
index 42305ddcbaa0..c1b72388e571 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -457,17 +457,30 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
457 return inode; 457 return inode;
458} 458}
459 459
460int proc_fill_super(struct super_block *s) 460int proc_fill_super(struct super_block *s, void *data, int silent)
461{ 461{
462 struct pid_namespace *ns = get_pid_ns(s->s_fs_info);
462 struct inode *root_inode; 463 struct inode *root_inode;
463 int ret; 464 int ret;
464 465
466 if (!proc_parse_options(data, ns))
467 return -EINVAL;
468
469 /* User space would break if executables or devices appear on proc */
470 s->s_iflags |= SB_I_USERNS_VISIBLE | SB_I_NOEXEC | SB_I_NODEV;
465 s->s_flags |= MS_NODIRATIME | MS_NOSUID | MS_NOEXEC; 471 s->s_flags |= MS_NODIRATIME | MS_NOSUID | MS_NOEXEC;
466 s->s_blocksize = 1024; 472 s->s_blocksize = 1024;
467 s->s_blocksize_bits = 10; 473 s->s_blocksize_bits = 10;
468 s->s_magic = PROC_SUPER_MAGIC; 474 s->s_magic = PROC_SUPER_MAGIC;
469 s->s_op = &proc_sops; 475 s->s_op = &proc_sops;
470 s->s_time_gran = 1; 476 s->s_time_gran = 1;
477
478 /*
479 * procfs isn't actually a stacking filesystem; however, there is
480 * too much magic going on inside it to permit stacking things on
481 * top of it
482 */
483 s->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH;
471 484
472 pde_get(&proc_root); 485 pde_get(&proc_root);
473 root_inode = proc_get_inode(s, &proc_root); 486 root_inode = proc_get_inode(s, &proc_root);