VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / arch / mips / kernel / sysirix.c
index 1b10357..e82b61f 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/socket.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
+#include <linux/vs_cvirt.h>
 
 #include <asm/ptrace.h>
 #include <asm/page.h>
@@ -235,7 +236,7 @@ asmlinkage int irix_prctl(struct pt_regs *regs)
 #undef DEBUG_PROCGRPS
 
 extern unsigned long irix_mapelf(int fd, struct elf_phdr *user_phdrp, int cnt);
-extern int getrusage(struct task_struct *p, int who, struct rusage *ru);
+extern int getrusage(struct task_struct *p, int who, struct rusage __user *ru);
 extern char *prom_getenv(char *name);
 extern long prom_setenv(char *name, char *value);
 
@@ -577,7 +578,8 @@ asmlinkage int irix_brk(unsigned long brk)
        /*
         * Check if we have enough memory..
         */
-       if (security_vm_enough_memory((newbrk-oldbrk) >> PAGE_SHIFT)) {
+       if (security_vm_enough_memory((newbrk-oldbrk) >> PAGE_SHIFT) ||
+               !vx_vmpages_avail(mm, (newbrk-oldbrk) >> PAGE_SHIFT)) {
                ret = -ENOMEM;
                goto out;
        }
@@ -1639,7 +1641,7 @@ asmlinkage int irix_statvfs64(char *fname, struct irix_statvfs64 *buf)
 
        printk("[%s:%d] Wheee.. irix_statvfs(%s,%p)\n",
               current->comm, current->pid, fname, buf);
-       error = verify_area(VERIFY_WRITE, buf, sizeof(struct irix_statvfs));
+       error = verify_area(VERIFY_WRITE, buf, sizeof(struct irix_statvfs64));
        if(error)
                goto out;
        error = user_path_walk(fname, &nd);