diff options
author | Christoph Hellwig <hch@lst.de> | 2010-03-10 18:21:15 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-12 18:52:32 -0500 |
commit | a4679373cf4ee0e7792dc56205365732b725c2c1 (patch) | |
tree | 6cf8040f608ad46ae7c605284af1ca585fb50eaa /mm | |
parent | 5d0e52830e9ae09b872567f4aca3dfb5b5918079 (diff) |
Add generic sys_old_mmap()
Add a generic implementation of the old mmap() syscall, which expects its
argument in a memory block and switch all architectures over to use it.
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>
Reviewed-by: 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>
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Greg Ungerer <gerg@uclinux.org>
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/mmap.c | 24 | ||||
-rw-r--r-- | mm/nommu.c | 24 |
2 files changed, 48 insertions, 0 deletions
@@ -1088,6 +1088,30 @@ out: | |||
1088 | return retval; | 1088 | return retval; |
1089 | } | 1089 | } |
1090 | 1090 | ||
1091 | #ifdef __ARCH_WANT_SYS_OLD_MMAP | ||
1092 | struct mmap_arg_struct { | ||
1093 | unsigned long addr; | ||
1094 | unsigned long len; | ||
1095 | unsigned long prot; | ||
1096 | unsigned long flags; | ||
1097 | unsigned long fd; | ||
1098 | unsigned long offset; | ||
1099 | }; | ||
1100 | |||
1101 | SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg) | ||
1102 | { | ||
1103 | struct mmap_arg_struct a; | ||
1104 | |||
1105 | if (copy_from_user(&a, arg, sizeof(a))) | ||
1106 | return -EFAULT; | ||
1107 | if (a.offset & ~PAGE_MASK) | ||
1108 | return -EINVAL; | ||
1109 | |||
1110 | return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
1111 | a.offset >> PAGE_SHIFT); | ||
1112 | } | ||
1113 | #endif /* __ARCH_WANT_SYS_OLD_MMAP */ | ||
1114 | |||
1091 | /* | 1115 | /* |
1092 | * Some shared mappigns will want the pages marked read-only | 1116 | * Some shared mappigns will want the pages marked read-only |
1093 | * to track write events. If so, we'll downgrade vm_page_prot | 1117 | * to track write events. If so, we'll downgrade vm_page_prot |
diff --git a/mm/nommu.c b/mm/nommu.c index b9b5cceb1b68..605ace8982a8 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -1428,6 +1428,30 @@ out: | |||
1428 | return retval; | 1428 | return retval; |
1429 | } | 1429 | } |
1430 | 1430 | ||
1431 | #ifdef __ARCH_WANT_SYS_OLD_MMAP | ||
1432 | struct mmap_arg_struct { | ||
1433 | unsigned long addr; | ||
1434 | unsigned long len; | ||
1435 | unsigned long prot; | ||
1436 | unsigned long flags; | ||
1437 | unsigned long fd; | ||
1438 | unsigned long offset; | ||
1439 | }; | ||
1440 | |||
1441 | SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg) | ||
1442 | { | ||
1443 | struct mmap_arg_struct a; | ||
1444 | |||
1445 | if (copy_from_user(&a, arg, sizeof(a))) | ||
1446 | return -EFAULT; | ||
1447 | if (a.offset & ~PAGE_MASK) | ||
1448 | return -EINVAL; | ||
1449 | |||
1450 | return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
1451 | a.offset >> PAGE_SHIFT); | ||
1452 | } | ||
1453 | #endif /* __ARCH_WANT_SYS_OLD_MMAP */ | ||
1454 | |||
1431 | /* | 1455 | /* |
1432 | * split a vma into two pieces at address 'addr', a new vma is allocated either | 1456 | * split a vma into two pieces at address 'addr', a new vma is allocated either |
1433 | * for the first part or the tail. | 1457 | * for the first part or the tail. |