From dae3270c6e25062b9085da0756b68fafedc9bb2c Mon Sep 17 00:00:00 2001 From: bellard Date: Wed, 14 Nov 2007 10:51:00 +0000 Subject: suppressed page_unprotect_range() - fixed access_ok() git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3641 c046a42c-6fe2-441c-8c8c-71466251a162 --- linux-user/qemu.h | 7 +++++-- linux-user/syscall.c | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'linux-user') diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 581ee27fa8..5917cb51aa 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -207,8 +207,11 @@ int target_msync(abi_ulong start, abi_ulong len, int flags); #define VERIFY_READ 0 #define VERIFY_WRITE 1 /* implies read access */ -#define access_ok(type,addr,size) \ - (page_check_range((target_ulong)addr,size,(type==VERIFY_READ)?PAGE_READ:PAGE_WRITE)==0) +static inline int access_ok(int type, abi_ulong addr, abi_ulong size) +{ + return page_check_range((target_ulong)addr, size, + (type == VERIFY_READ) ? PAGE_READ : (PAGE_READ | PAGE_WRITE)) == 0; +} /* NOTE __get_user and __put_user use host pointers and don't check access. */ /* These are usually used to access struct data members once the diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 6c8f689ae2..1e4ad96b30 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2773,7 +2773,6 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, ret = 0; /* avoid warning */ break; case TARGET_NR_read: - page_unprotect_range(arg2, arg3); if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) goto efault; ret = get_errno(read(arg1, p, arg3)); @@ -4537,7 +4536,6 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, break; #ifdef TARGET_NR_pread case TARGET_NR_pread: - page_unprotect_range(arg2, arg3); if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) goto efault; ret = get_errno(pread(arg1, p, arg3, arg4)); -- cgit v1.2.3