in mm/proc.c [78:96]
int va_writable(struct pt_regs *regs, unsigned long addr)
{
struct mm_struct *mm = current->mm;
pte_t pte;
int ret = 0;
if (user_mode(regs)) {
/* user mode */
pte = va_present(mm, addr);
if (!pte && pte_write(pte))
ret = 1;
} else {
/* superuser mode */
pte = va_kernel_present(addr);
if (!pte && pte_kernel_write(pte))
ret = 1;
}
return ret;
}