mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Add generic implementations of the old and really old uname system calls. Note that sh only implements sys_olduname but not sys_oldolduname, but I'm not going to bother with another ifdef for that special case. m32r implemented an old uname but never wired it up, so kill it, too. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Hirokazu Takata <takata@linux-m32r.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: James Morris <jmorris@namei.org> Cc: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
 | 
						|
 * Licensed under the GPL
 | 
						|
 */
 | 
						|
 | 
						|
#include "linux/file.h"
 | 
						|
#include "linux/fs.h"
 | 
						|
#include "linux/mm.h"
 | 
						|
#include "linux/sched.h"
 | 
						|
#include "linux/utsname.h"
 | 
						|
#include "linux/syscalls.h"
 | 
						|
#include "asm/current.h"
 | 
						|
#include "asm/mman.h"
 | 
						|
#include "asm/uaccess.h"
 | 
						|
#include "asm/unistd.h"
 | 
						|
#include "internal.h"
 | 
						|
 | 
						|
long sys_fork(void)
 | 
						|
{
 | 
						|
	long ret;
 | 
						|
 | 
						|
	current->thread.forking = 1;
 | 
						|
	ret = do_fork(SIGCHLD, UPT_SP(¤t->thread.regs.regs),
 | 
						|
		      ¤t->thread.regs, 0, NULL, NULL);
 | 
						|
	current->thread.forking = 0;
 | 
						|
	return ret;
 | 
						|
}
 | 
						|
 | 
						|
long sys_vfork(void)
 | 
						|
{
 | 
						|
	long ret;
 | 
						|
 | 
						|
	current->thread.forking = 1;
 | 
						|
	ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD,
 | 
						|
		      UPT_SP(¤t->thread.regs.regs),
 | 
						|
		      ¤t->thread.regs, 0, NULL, NULL);
 | 
						|
	current->thread.forking = 0;
 | 
						|
	return ret;
 | 
						|
}
 | 
						|
 | 
						|
long old_mmap(unsigned long addr, unsigned long len,
 | 
						|
	      unsigned long prot, unsigned long flags,
 | 
						|
	      unsigned long fd, unsigned long offset)
 | 
						|
{
 | 
						|
	long err = -EINVAL;
 | 
						|
	if (offset & ~PAGE_MASK)
 | 
						|
		goto out;
 | 
						|
 | 
						|
	err = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
 | 
						|
 out:
 | 
						|
	return err;
 | 
						|
}
 | 
						|
 | 
						|
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
 | 
						|
{
 | 
						|
	mm_segment_t fs;
 | 
						|
	int ret;
 | 
						|
 | 
						|
	fs = get_fs();
 | 
						|
	set_fs(KERNEL_DS);
 | 
						|
	ret = um_execve((char *)filename, (char __user *__user *)argv,
 | 
						|
			(char __user *__user *) envp);
 | 
						|
	set_fs(fs);
 | 
						|
 | 
						|
	return ret;
 | 
						|
}
 |