lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20071209091058.9dffa72f.randy.dunlap@oracle.com> Date: Sun, 9 Dec 2007 09:10:58 -0800 From: Randy Dunlap <randy.dunlap@...cle.com> To: Andrew Morton <akpm@...ux-foundation.org> Cc: npiggin@...e.de, mchehab@...radead.org, v4l-dvb-maintainer@...uxtv.org, linux-kernel@...r.kernel.org, Ingo Molnar <mingo@...e.hu>, Andy Whitcroft <apw@...dowen.org> Subject: Re: [patch 07/18] v4l: nopage On Fri, 7 Dec 2007 16:31:42 -0800 Andrew Morton wrote: > On Wed, 05 Dec 2007 18:15:54 +1100 > npiggin@...e.de wrote: > > > +static int > > +videobuf_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) > > { > > struct page *page; > > > > - dprintk(3,"nopage: fault @ %08lx [vma %08lx-%08lx]\n", > > - vaddr,vma->vm_start,vma->vm_end); > > - if (vaddr > vma->vm_end) > > - return NOPAGE_SIGBUS; > > + dprintk(3,"fault: fault @ %08lx [vma %08lx-%08lx]\n", > > + (unsigned long)vmf->virtual_address,vma->vm_start,vma->vm_end); > > page = alloc_page(GFP_USER | __GFP_DMA32); > > if (!page) > > - return NOPAGE_OOM; > > + return VM_FAULT_OOM; > > clear_user_page(page_address(page), vaddr, page); > > This didn't compile on sparc64 because `vaddr' is undefined. > > > Let us see why: > > #define clear_user_page(page, vaddr, pg) clear_page(page) > #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) > > #define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \ > alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) > > root cause: lack of argument checking on x86 due to stupid macros. Hm, I would have said that the root cause was that Nick removed the vaddr parameter from the function parameters: -static struct page* -videobuf_vm_nopage(struct vm_area_struct *vma, unsigned long vaddr, - int *type) +static int +videobuf_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { Should the function now produce 'vaddr' internally? > Could someone *please* start a little project of extirpating this utter > brain damage? Convert those macros to typechecked static inlines on x86 > (at least) so this sort of thing (which happens again and again and again) > is lessened? Yep, unless someone else is already doing so... > macros are such miserable things. I wonder if we could get checkpatch to > help out here? --- ~Randy Features and documentation: http://lwn.net/Articles/260136/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists