diff options
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/mqueue.c | 1 | ||||
-rw-r--r-- | ipc/shm.c | 12 |
2 files changed, 8 insertions, 5 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 963a8709f5f..e5c4f609f22 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -1383,6 +1383,7 @@ static struct file_system_type mqueue_fs_type = { .name = "mqueue", .mount = mqueue_mount, .kill_sb = kill_litter_super, + .fs_flags = FS_USERNS_MOUNT, }; int mq_init_ns(struct ipc_namespace *ns) diff --git a/ipc/shm.c b/ipc/shm.c index de389e639e7..cb858df061d 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -967,11 +967,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, unsigned long flags; unsigned long prot; int acc_mode; - unsigned long user_addr; struct ipc_namespace *ns; struct shm_file_data *sfd; struct path path; fmode_t f_mode; + unsigned long populate = 0; err = -EINVAL; if (shmid < 0) @@ -1071,13 +1071,15 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, goto invalid; } - user_addr = do_mmap_pgoff(file, addr, size, prot, flags, 0); - *raddr = user_addr; + addr = do_mmap_pgoff(file, addr, size, prot, flags, 0, &populate); + *raddr = addr; err = 0; - if (IS_ERR_VALUE(user_addr)) - err = (long)user_addr; + if (IS_ERR_VALUE(addr)) + err = (long)addr; invalid: up_write(¤t->mm->mmap_sem); + if (populate) + mm_populate(addr, populate); out_fput: fput(file); |