vserver 2.0 rc7
[linux-2.6.git] / ipc / shm.c
index c3784f6..cb3ff1f 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
 #include <linux/shmem_fs.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
-#include <linux/vs_context.h>
+#include <linux/audit.h>
+#include <linux/ptrace.h>
 #include <linux/vs_limit.h>
+
 #include <asm/uaccess.h>
 
 #include "util.h"
@@ -612,6 +614,8 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
                        err = -EFAULT;
                        goto out;
                }
+               if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode)))
+                       return err;
                down(&shm_ids.sem);
                shp = shm_lock(shmid);
                err=-EINVAL;
@@ -780,6 +784,18 @@ out:
        return err;
 }
 
+asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg)
+{
+       unsigned long ret;
+       long err;
+
+       err = do_shmat(shmid, shmaddr, shmflg, &ret);
+       if (err)
+               return err;
+       force_successful_syscall_return();
+       return (long)ret;
+}
+
 /*
  * detach and kill segment if marked destroyed.
  * The work is done in shm_close.