diff options
Diffstat (limited to 'arch/um/sys-x86_64/unmap.c')
-rw-r--r-- | arch/um/sys-x86_64/unmap.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/um/sys-x86_64/unmap.c b/arch/um/sys-x86_64/unmap.c index 57c9286a701b..f4a4bffd8a18 100644 --- a/arch/um/sys-x86_64/unmap.c +++ b/arch/um/sys-x86_64/unmap.c | |||
@@ -5,17 +5,20 @@ | |||
5 | 5 | ||
6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
7 | #include <asm/unistd.h> | 7 | #include <asm/unistd.h> |
8 | #include <sys/syscall.h> | ||
9 | 8 | ||
9 | static int errno; | ||
10 | |||
11 | static inline _syscall2(int,munmap,void *,start,size_t,len) | ||
12 | static inline _syscall6(void *,mmap,void *,addr,size_t,len,int,prot,int,flags,int,fd,off_t,offset) | ||
10 | int switcheroo(int fd, int prot, void *from, void *to, int size) | 13 | int switcheroo(int fd, int prot, void *from, void *to, int size) |
11 | { | 14 | { |
12 | if (syscall(__NR_munmap, to, size) < 0){ | 15 | if(munmap(to, size) < 0){ |
13 | return(-1); | 16 | return(-1); |
14 | } | 17 | } |
15 | if (syscall(__NR_mmap, to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ | 18 | if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ |
16 | return(-1); | 19 | return(-1); |
17 | } | 20 | } |
18 | if (syscall(__NR_munmap, from, size) < 0){ | 21 | if(munmap(from, size) < 0){ |
19 | return(-1); | 22 | return(-1); |
20 | } | 23 | } |
21 | return(0); | 24 | return(0); |