Messages in this thread | | | Date | Tue, 3 Jul 2018 05:11:22 -0700 | From | Matthew Wilcox <> | Subject | Re: [PATCH v2] x86/vdso: Change return type to vm_fault_t for fault handlers |
| |
On Tue, Jul 03, 2018 at 05:18:30PM +0530, Souptick Joarder wrote: > On Tue, Jul 3, 2018 at 4:47 PM, Matthew Wilcox <willy@infradead.org> wrote: > > On Mon, Jun 25, 2018 at 11:27:37PM +0530, Souptick Joarder wrote: > >> Use new return type vm_fault_t for both fault handler > >> vdso_fault() and vvar_fault(). Previously vm_insert_pfn() > >> returns err which has to mapped into VM_FAULT_* type. > >> The new function vmf_insert_pfn() will replace this > >> inefficiency by returning correct VM_FAULT_* type. > > > >> @@ -105,10 +105,10 @@ static int vvar_fault(const struct vm_special_mapping *sm, > >> * the page past the end of the vvar mapping. > >> */ > >> if (sym_offset == 0) > >> - return VM_FAULT_SIGBUS; > >> + return ret; > >> > >> if (sym_offset == image->sym_vvar_page) { > >> - ret = vm_insert_pfn(vma, vmf->address, > >> + ret = vmf_insert_pfn(vma, vmf->address, > >> __pa_symbol(&__vvar_page) >> PAGE_SHIFT); > >> } else if (sym_offset == image->sym_pvclock_page) { > >> struct pvclock_vsyscall_time_info *pvti = > >> @@ -124,14 +124,11 @@ static int vvar_fault(const struct vm_special_mapping *sm, > > > > Haven't you missed converting vm_insert_pfn_prot() at line 117? > > Did you test-compile this? > > > > I left it intentionally in this patch. When we will be replacing > vm_insert_foo() with new API vmf_insert_foo(), vm_insert_pfn_prot > need to be changed to return vm_fault_t type. > > I will change the return type of vm_insert_pfn_prot() in that patch.
What?! That's just broken. vm_insert_pfn_prot returns an errno, so this patch introduces a bug where sometimes 'ret' contains a vm_fault_t and sometimes contains an errno. That's exactly the kind of thing this patch series is supposed to be *preventing*, not introducing!
I'll send a replacement patch series to do this properly.
| |