@ -456,8 +456,8 @@ static void r4k_flush_data_cache_page(unsigned long addr)
|
||||
}
|
||||
|
||||
struct flush_icache_range_args {
|
||||
unsigned long start;
|
||||
unsigned long end;
|
||||
unsigned long __user start;
|
||||
unsigned long __user end;
|
||||
};
|
||||
|
||||
static inline void local_r4k_flush_icache_range(void *args)
|
||||
@ -519,7 +519,8 @@ static inline void local_r4k_flush_icache_range(void *args)
|
||||
}
|
||||
}
|
||||
|
||||
static void r4k_flush_icache_range(unsigned long start, unsigned long end)
|
||||
static void r4k_flush_icache_range(unsigned long __user start,
|
||||
unsigned long __user end)
|
||||
{
|
||||
struct flush_icache_range_args args;
|
||||
|
||||
|
@ -24,7 +24,8 @@ void (*flush_cache_mm)(struct mm_struct *mm);
|
||||
void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start,
|
||||
unsigned long end);
|
||||
void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn);
|
||||
void (*flush_icache_range)(unsigned long start, unsigned long end);
|
||||
void (*flush_icache_range)(unsigned long __user start,
|
||||
unsigned long __user end);
|
||||
void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page);
|
||||
|
||||
/* MIPS specific cache operations */
|
||||
@ -49,10 +50,10 @@ EXPORT_SYMBOL(_dma_cache_inv);
|
||||
* We could optimize the case where the cache argument is not BCACHE but
|
||||
* that seems very atypical use ...
|
||||
*/
|
||||
asmlinkage int sys_cacheflush(unsigned long addr, unsigned long int bytes,
|
||||
unsigned int cache)
|
||||
asmlinkage int sys_cacheflush(unsigned long __user addr,
|
||||
unsigned long bytes, unsigned int cache)
|
||||
{
|
||||
if (!access_ok(VERIFY_WRITE, (void *) addr, bytes))
|
||||
if (!access_ok(VERIFY_WRITE, (void __user *) addr, bytes))
|
||||
return -EFAULT;
|
||||
|
||||
flush_icache_range(addr, addr + bytes);
|
||||
|
@ -141,7 +141,7 @@ bad_area_nosemaphore:
|
||||
info.si_signo = SIGSEGV;
|
||||
info.si_errno = 0;
|
||||
/* info.si_code has been set above */
|
||||
info.si_addr = (void *) address;
|
||||
info.si_addr = (void __user *) address;
|
||||
force_sig_info(SIGSEGV, &info, tsk);
|
||||
return;
|
||||
}
|
||||
@ -197,7 +197,7 @@ do_sigbus:
|
||||
info.si_signo = SIGBUS;
|
||||
info.si_errno = 0;
|
||||
info.si_code = BUS_ADRERR;
|
||||
info.si_addr = (void *) address;
|
||||
info.si_addr = (void __user *) address;
|
||||
force_sig_info(SIGBUS, &info, tsk);
|
||||
|
||||
return;
|
||||
|
Reference in New Issue
Block a user