>>> +int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) >>> +{ >>> + int ret; >>> + unsigned long addr; >>> + struct mm_struct *mm = current->mm; >>> + >>> + down_write(&mm->mmap_sem); >>> + >>> + addr = vdso_addr(mm->start_stack); >>> + >>> + addr = get_unmapped_area(NULL, addr, PAGE_SIZE, 0, 0); >>> + if (IS_ERR_VALUE(addr)) { >>> + ret = addr; >>> + goto up_fail; >>> + } >>> + >>> + ret = install_special_mapping(mm, addr, PAGE_SIZE, >>> + VM_READ|VM_EXEC| >>> + VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| >>> + VM_ALWAYSDUMP, >>> + &vdso_page); >>> + >>> + if (ret) >>> + goto up_fail; >>> + >>> + mm->context.vdso = (void *)addr; >>> + >>> +up_fail: >> >> It seems that this is an unexpected condition that probably indicates >> a failure of the expected state of the process at this point. Perhaps >> a pr_err() or pr_warning() would be appropriate? >> >>> + up_write(&mm->mmap_sem); >>> + return ret; >>> +} > > Really it should always succeed. Something is seriously wrong if you > cannot map that page and we should probably panic(). It seems like it may be recoverable, so perhaps BUG() is better. > David Daney David VomLehn