else if(!ARCH_IS_STACKGROW(address)) 
else if(is_user && !ARCH_IS_STACKGROW(address)) 
int handle_page_fault(unsigned long address, unsigned long ip, 		      int is_write, int is_user, int *code_out){	struct mm_struct *mm = current->mm;	struct vm_area_struct *vma;	pgd_t *pgd;	pud_t *pud;	pmd_t *pmd;	pte_t *pte;	unsigned long page;	int err = -EFAULT;	*code_out = SEGV_MAPERR;	down_read(&mm->mmap_sem);	vma = find_vma(mm, address);	if(!vma) 		goto out;	else if(vma->vm_start <= address) 		goto good_area;	else if(!(vma->vm_flags & VM_GROWSDOWN)) 		goto out;	else if(!ARCH_IS_STACKGROW(address))		goto out;	else if(expand_stack(vma, address)) 		goto out; good_area:	*code_out = SEGV_ACCERR;	if(is_write && !(vma->vm_flags & VM_WRITE)) 		goto out;	page = address & PAGE_MASK;	pgd = pgd_offset(mm, page);	pud = pud_offset(pgd, page);	pmd = pmd_offset(pud, page);	do { survive:		switch (handle_mm_fault(mm, vma, address, is_write)){		case VM_FAULT_MINOR:			current->min_flt++;			break;		case VM_FAULT_MAJOR:			current->maj_flt++;			break;		case VM_FAULT_SIGBUS:			err = -EACCES;			goto out;		case VM_FAULT_OOM:			err = -ENOMEM;			goto out_of_memory;		default:			BUG();		}		pgd = pgd_offset(mm, page);		pud = pud_offset(pgd, page);		pmd = pmd_offset(pud, page);		pte = pte_offset_kernel(pmd, page);	} while(!pte_present(*pte));	err = 0;	*pte = pte_mkyoung(*pte);	if(pte_write(*pte)) *pte = pte_mkdirty(*pte);	flush_tlb_page(vma, page); out:	up_read(&mm->mmap_sem);	return(err);/* * We ran out of memory, or some other thing happened to us that made * us unable to handle the page fault gracefully. */out_of_memory:	if (current->pid == 1) {		up_read(&mm->mmap_sem);		yield();		down_read(&mm->mmap_sem);		goto survive;	}	goto out;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/2d58cc9a437f3833d242e9d1617ec9b4044e26f3/trap_kern.c/buggy/arch/um/kernel/trap_kern.c