diff options
Diffstat (limited to 'arch/mips/kernel/syscall.c')
| -rw-r--r-- | arch/mips/kernel/syscall.c | 120 | 
1 files changed, 0 insertions, 120 deletions
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 58beabf50b3..d02765708dd 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c @@ -10,12 +10,9 @@  #include <linux/capability.h>  #include <linux/errno.h>  #include <linux/linkage.h> -#include <linux/mm.h>  #include <linux/fs.h>  #include <linux/smp.h> -#include <linux/mman.h>  #include <linux/ptrace.h> -#include <linux/sched.h>  #include <linux/string.h>  #include <linux/syscalls.h>  #include <linux/file.h> @@ -25,11 +22,9 @@  #include <linux/msg.h>  #include <linux/shm.h>  #include <linux/compiler.h> -#include <linux/module.h>  #include <linux/ipc.h>  #include <linux/uaccess.h>  #include <linux/slab.h> -#include <linux/random.h>  #include <linux/elf.h>  #include <asm/asm.h> @@ -66,121 +61,6 @@ out:  	return res;  } -unsigned long shm_align_mask = PAGE_SIZE - 1;	/* Sane caches */ - -EXPORT_SYMBOL(shm_align_mask); - -#define COLOUR_ALIGN(addr,pgoff)				\ -	((((addr) + shm_align_mask) & ~shm_align_mask) +	\ -	 (((pgoff) << PAGE_SHIFT) & shm_align_mask)) - -unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, -	unsigned long len, unsigned long pgoff, unsigned long flags) -{ -	struct vm_area_struct * vmm; -	int do_color_align; -	unsigned long task_size; - -#ifdef CONFIG_32BIT -	task_size = TASK_SIZE; -#else /* Must be CONFIG_64BIT*/ -	task_size = test_thread_flag(TIF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE; -#endif - -	if (len > task_size) -		return -ENOMEM; - -	if (flags & MAP_FIXED) { -		/* Even MAP_FIXED mappings must reside within task_size.  */ -		if (task_size - len < addr) -			return -EINVAL; - -		/* -		 * We do not accept a shared mapping if it would violate -		 * cache aliasing constraints. -		 */ -		if ((flags & MAP_SHARED) && -		    ((addr - (pgoff << PAGE_SHIFT)) & shm_align_mask)) -			return -EINVAL; -		return addr; -	} - -	do_color_align = 0; -	if (filp || (flags & MAP_SHARED)) -		do_color_align = 1; -	if (addr) { -		if (do_color_align) -			addr = COLOUR_ALIGN(addr, pgoff); -		else -			addr = PAGE_ALIGN(addr); -		vmm = find_vma(current->mm, addr); -		if (task_size - len >= addr && -		    (!vmm || addr + len <= vmm->vm_start)) -			return addr; -	} -	addr = current->mm->mmap_base; -	if (do_color_align) -		addr = COLOUR_ALIGN(addr, pgoff); -	else -		addr = PAGE_ALIGN(addr); - -	for (vmm = find_vma(current->mm, addr); ; vmm = vmm->vm_next) { -		/* At this point:  (!vmm || addr < vmm->vm_end). */ -		if (task_size - len < addr) -			return -ENOMEM; -		if (!vmm || addr + len <= vmm->vm_start) -			return addr; -		addr = vmm->vm_end; -		if (do_color_align) -			addr = COLOUR_ALIGN(addr, pgoff); -	} -} - -void arch_pick_mmap_layout(struct mm_struct *mm) -{ -	unsigned long random_factor = 0UL; - -	if (current->flags & PF_RANDOMIZE) { -		random_factor = get_random_int(); -		random_factor = random_factor << PAGE_SHIFT; -		if (TASK_IS_32BIT_ADDR) -			random_factor &= 0xfffffful; -		else -			random_factor &= 0xffffffful; -	} - -	mm->mmap_base = TASK_UNMAPPED_BASE + random_factor; -	mm->get_unmapped_area = arch_get_unmapped_area; -	mm->unmap_area = arch_unmap_area; -} - -static inline unsigned long brk_rnd(void) -{ -	unsigned long rnd = get_random_int(); - -	rnd = rnd << PAGE_SHIFT; -	/* 8MB for 32bit, 256MB for 64bit */ -	if (TASK_IS_32BIT_ADDR) -		rnd = rnd & 0x7ffffful; -	else -		rnd = rnd & 0xffffffful; - -	return rnd; -} - -unsigned long arch_randomize_brk(struct mm_struct *mm) -{ -	unsigned long base = mm->brk; -	unsigned long ret; - -	ret = PAGE_ALIGN(base + brk_rnd()); - -	if (ret < mm->brk) -		return mm->brk; - -	return ret; -} -  SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len,  	unsigned long, prot, unsigned long, flags, unsigned long,  	fd, off_t, offset)  |