aboutsummaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2006-01-12 17:47:08 -0500
committerSteve French <sfrench@us.ibm.com>2006-01-12 17:47:08 -0500
commit94bc2be31a01a3055ec94176e595dfe208e92d3b (patch)
treeebfbe81c6718a6390bfa1b99c6d228237d818576 /ipc
parentc32a0b689cb9cc160cfcd19735bbf50bb70c6ef4 (diff)
parent58cba4650a7a414eabd2b40cc9d8e45fcdf192d9 (diff)
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'ipc')
-rw-r--r--ipc/mqueue.c9
-rw-r--r--ipc/msg.c1
-rw-r--r--ipc/sem.c1
-rw-r--r--ipc/shm.c41
-rw-r--r--ipc/util.c1
5 files changed, 32 insertions, 21 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index c8943b53d8e6..4e776f9c80e7 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -11,6 +11,7 @@
11 * This file is released under the GPL. 11 * This file is released under the GPL.
12 */ 12 */
13 13
14#include <linux/capability.h>
14#include <linux/init.h> 15#include <linux/init.h>
15#include <linux/pagemap.h> 16#include <linux/pagemap.h>
16#include <linux/file.h> 17#include <linux/file.h>
@@ -660,7 +661,7 @@ asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode,
660 if (fd < 0) 661 if (fd < 0)
661 goto out_putname; 662 goto out_putname;
662 663
663 down(&mqueue_mnt->mnt_root->d_inode->i_sem); 664 mutex_lock(&mqueue_mnt->mnt_root->d_inode->i_mutex);
664 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); 665 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name));
665 if (IS_ERR(dentry)) { 666 if (IS_ERR(dentry)) {
666 error = PTR_ERR(dentry); 667 error = PTR_ERR(dentry);
@@ -697,7 +698,7 @@ out_putfd:
697out_err: 698out_err:
698 fd = error; 699 fd = error;
699out_upsem: 700out_upsem:
700 up(&mqueue_mnt->mnt_root->d_inode->i_sem); 701 mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_mutex);
701out_putname: 702out_putname:
702 putname(name); 703 putname(name);
703 return fd; 704 return fd;
@@ -714,7 +715,7 @@ asmlinkage long sys_mq_unlink(const char __user *u_name)
714 if (IS_ERR(name)) 715 if (IS_ERR(name))
715 return PTR_ERR(name); 716 return PTR_ERR(name);
716 717
717 down(&mqueue_mnt->mnt_root->d_inode->i_sem); 718 mutex_lock(&mqueue_mnt->mnt_root->d_inode->i_mutex);
718 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); 719 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name));
719 if (IS_ERR(dentry)) { 720 if (IS_ERR(dentry)) {
720 err = PTR_ERR(dentry); 721 err = PTR_ERR(dentry);
@@ -735,7 +736,7 @@ out_err:
735 dput(dentry); 736 dput(dentry);
736 737
737out_unlock: 738out_unlock:
738 up(&mqueue_mnt->mnt_root->d_inode->i_sem); 739 mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_mutex);
739 putname(name); 740 putname(name);
740 if (inode) 741 if (inode)
741 iput(inode); 742 iput(inode);
diff --git a/ipc/msg.c b/ipc/msg.c
index d035bd2aba96..a91b64763b86 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -15,6 +15,7 @@
15 * (c) 1999 Manfred Spraul <manfreds@colorfullife.com> 15 * (c) 1999 Manfred Spraul <manfreds@colorfullife.com>
16 */ 16 */
17 17
18#include <linux/capability.h>
18#include <linux/config.h> 19#include <linux/config.h>
19#include <linux/slab.h> 20#include <linux/slab.h>
20#include <linux/msg.h> 21#include <linux/msg.h>
diff --git a/ipc/sem.c b/ipc/sem.c
index cb5bb2a5df96..46bb8a678dec 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -73,6 +73,7 @@
73#include <linux/security.h> 73#include <linux/security.h>
74#include <linux/syscalls.h> 74#include <linux/syscalls.h>
75#include <linux/audit.h> 75#include <linux/audit.h>
76#include <linux/capability.h>
76#include <linux/seq_file.h> 77#include <linux/seq_file.h>
77#include <asm/uaccess.h> 78#include <asm/uaccess.h>
78#include "util.h" 79#include "util.h"
diff --git a/ipc/shm.c b/ipc/shm.c
index 587d836d80d9..4c28d2d8e305 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -27,6 +27,7 @@
27#include <linux/security.h> 27#include <linux/security.h>
28#include <linux/syscalls.h> 28#include <linux/syscalls.h>
29#include <linux/audit.h> 29#include <linux/audit.h>
30#include <linux/capability.h>
30#include <linux/ptrace.h> 31#include <linux/ptrace.h>
31#include <linux/seq_file.h> 32#include <linux/seq_file.h>
32 33
@@ -34,8 +35,6 @@
34 35
35#include "util.h" 36#include "util.h"
36 37
37#define shm_flags shm_perm.mode
38
39static struct file_operations shm_file_operations; 38static struct file_operations shm_file_operations;
40static struct vm_operations_struct shm_vm_ops; 39static struct vm_operations_struct shm_vm_ops;
41 40
@@ -148,7 +147,7 @@ static void shm_close (struct vm_area_struct *shmd)
148 shp->shm_dtim = get_seconds(); 147 shp->shm_dtim = get_seconds();
149 shp->shm_nattch--; 148 shp->shm_nattch--;
150 if(shp->shm_nattch == 0 && 149 if(shp->shm_nattch == 0 &&
151 shp->shm_flags & SHM_DEST) 150 shp->shm_perm.mode & SHM_DEST)
152 shm_destroy (shp); 151 shm_destroy (shp);
153 else 152 else
154 shm_unlock(shp); 153 shm_unlock(shp);
@@ -157,14 +156,22 @@ static void shm_close (struct vm_area_struct *shmd)
157 156
158static int shm_mmap(struct file * file, struct vm_area_struct * vma) 157static int shm_mmap(struct file * file, struct vm_area_struct * vma)
159{ 158{
160 file_accessed(file); 159 int ret;
161 vma->vm_ops = &shm_vm_ops; 160
162 shm_inc(file->f_dentry->d_inode->i_ino); 161 ret = shmem_mmap(file, vma);
163 return 0; 162 if (ret == 0) {
163 vma->vm_ops = &shm_vm_ops;
164 shm_inc(file->f_dentry->d_inode->i_ino);
165 }
166
167 return ret;
164} 168}
165 169
166static struct file_operations shm_file_operations = { 170static struct file_operations shm_file_operations = {
167 .mmap = shm_mmap 171 .mmap = shm_mmap,
172#ifndef CONFIG_MMU
173 .get_unmapped_area = shmem_get_unmapped_area,
174#endif
168}; 175};
169 176
170static struct vm_operations_struct shm_vm_ops = { 177static struct vm_operations_struct shm_vm_ops = {
@@ -197,7 +204,7 @@ static int newseg (key_t key, int shmflg, size_t size)
197 return -ENOMEM; 204 return -ENOMEM;
198 205
199 shp->shm_perm.key = key; 206 shp->shm_perm.key = key;
200 shp->shm_flags = (shmflg & S_IRWXUGO); 207 shp->shm_perm.mode = (shmflg & S_IRWXUGO);
201 shp->mlock_user = NULL; 208 shp->mlock_user = NULL;
202 209
203 shp->shm_perm.security = NULL; 210 shp->shm_perm.security = NULL;
@@ -337,7 +344,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __
337 344
338 out->uid = tbuf.shm_perm.uid; 345 out->uid = tbuf.shm_perm.uid;
339 out->gid = tbuf.shm_perm.gid; 346 out->gid = tbuf.shm_perm.gid;
340 out->mode = tbuf.shm_flags; 347 out->mode = tbuf.shm_perm.mode;
341 348
342 return 0; 349 return 0;
343 } 350 }
@@ -350,7 +357,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __
350 357
351 out->uid = tbuf_old.shm_perm.uid; 358 out->uid = tbuf_old.shm_perm.uid;
352 out->gid = tbuf_old.shm_perm.gid; 359 out->gid = tbuf_old.shm_perm.gid;
353 out->mode = tbuf_old.shm_flags; 360 out->mode = tbuf_old.shm_perm.mode;
354 361
355 return 0; 362 return 0;
356 } 363 }
@@ -552,13 +559,13 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
552 if (!is_file_hugepages(shp->shm_file)) { 559 if (!is_file_hugepages(shp->shm_file)) {
553 err = shmem_lock(shp->shm_file, 1, user); 560 err = shmem_lock(shp->shm_file, 1, user);
554 if (!err) { 561 if (!err) {
555 shp->shm_flags |= SHM_LOCKED; 562 shp->shm_perm.mode |= SHM_LOCKED;
556 shp->mlock_user = user; 563 shp->mlock_user = user;
557 } 564 }
558 } 565 }
559 } else if (!is_file_hugepages(shp->shm_file)) { 566 } else if (!is_file_hugepages(shp->shm_file)) {
560 shmem_lock(shp->shm_file, 0, shp->mlock_user); 567 shmem_lock(shp->shm_file, 0, shp->mlock_user);
561 shp->shm_flags &= ~SHM_LOCKED; 568 shp->shm_perm.mode &= ~SHM_LOCKED;
562 shp->mlock_user = NULL; 569 shp->mlock_user = NULL;
563 } 570 }
564 shm_unlock(shp); 571 shm_unlock(shp);
@@ -597,7 +604,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
597 goto out_unlock_up; 604 goto out_unlock_up;
598 605
599 if (shp->shm_nattch){ 606 if (shp->shm_nattch){
600 shp->shm_flags |= SHM_DEST; 607 shp->shm_perm.mode |= SHM_DEST;
601 /* Do not find it any more */ 608 /* Do not find it any more */
602 shp->shm_perm.key = IPC_PRIVATE; 609 shp->shm_perm.key = IPC_PRIVATE;
603 shm_unlock(shp); 610 shm_unlock(shp);
@@ -636,7 +643,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
636 643
637 shp->shm_perm.uid = setbuf.uid; 644 shp->shm_perm.uid = setbuf.uid;
638 shp->shm_perm.gid = setbuf.gid; 645 shp->shm_perm.gid = setbuf.gid;
639 shp->shm_flags = (shp->shm_flags & ~S_IRWXUGO) 646 shp->shm_perm.mode = (shp->shm_perm.mode & ~S_IRWXUGO)
640 | (setbuf.mode & S_IRWXUGO); 647 | (setbuf.mode & S_IRWXUGO);
641 shp->shm_ctim = get_seconds(); 648 shp->shm_ctim = get_seconds();
642 break; 649 break;
@@ -769,7 +776,7 @@ invalid:
769 BUG(); 776 BUG();
770 shp->shm_nattch--; 777 shp->shm_nattch--;
771 if(shp->shm_nattch == 0 && 778 if(shp->shm_nattch == 0 &&
772 shp->shm_flags & SHM_DEST) 779 shp->shm_perm.mode & SHM_DEST)
773 shm_destroy (shp); 780 shm_destroy (shp);
774 else 781 else
775 shm_unlock(shp); 782 shm_unlock(shp);
@@ -894,7 +901,7 @@ static int sysvipc_shm_proc_show(struct seq_file *s, void *it)
894 return seq_printf(s, format, 901 return seq_printf(s, format,
895 shp->shm_perm.key, 902 shp->shm_perm.key,
896 shp->id, 903 shp->id,
897 shp->shm_flags, 904 shp->shm_perm.mode,
898 shp->shm_segsz, 905 shp->shm_segsz,
899 shp->shm_cprid, 906 shp->shm_cprid,
900 shp->shm_lprid, 907 shp->shm_lprid,
diff --git a/ipc/util.c b/ipc/util.c
index 23f1cec150c1..38b9a0af3bd8 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -20,6 +20,7 @@
20#include <linux/smp_lock.h> 20#include <linux/smp_lock.h>
21#include <linux/vmalloc.h> 21#include <linux/vmalloc.h>
22#include <linux/slab.h> 22#include <linux/slab.h>
23#include <linux/capability.h>
23#include <linux/highuid.h> 24#include <linux/highuid.h>
24#include <linux/security.h> 25#include <linux/security.h>
25#include <linux/rcupdate.h> 26#include <linux/rcupdate.h>