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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200811140052.10520.laurent.pinchart@skynet.be>
Date:	Fri, 14 Nov 2008 00:52:10 +0100
From:	Laurent Pinchart <laurent.pinchart@...net.be>
To:	"Hennerich, Michael" <Michael.Hennerich@...log.com>
Cc:	"Bryan Wu" <cooloney@...nel.org>, linux-uvc-devel@...ts.berlios.de,
	video4linux-list@...hat.com, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] Video/UVC: Port mainlined uvc video driver to NOMMU

Hi Michael,

On Monday 10 November 2008, Hennerich, Michael wrote:
> >On Thursday 06 November 2008, Bryan Wu wrote:
> > > @@ -1071,7 +1072,20 @@ static int uvc_v4l2_mmap(struct file *file,
> > > struct vm_area_struct *vma) addr += PAGE_SIZE;
> > >  		size -= PAGE_SIZE;
> > >  	}
> > > +#else
> > > +	if (i == video->queue.count ||
> > > +		PAGE_ALIGN(size) != video->queue.buf_size) {
> >
> > Just out of curiosity, why do you need to PAGE_ALIGN size for non-MMU
> > platforms ?
>
> Size and video->queue.buf_size is not the 100% same size (off by a few
> bytes < pagesize), I think it's because on NOMMU the kernel calls
> kmalloc() to allocate the buffer, not get_free_page().

That's right, but only for private mappings. It makes little sense to create a 
private mapping on a V4L2 device as the kernel will read() device data into 
the buffer when mapping the device (at least on NOMMU platforms). Only shared 
mappings make sense in this case.

> > > +		ret = -EINVAL;
> > > +		goto done;
> > > +	}
> > > +
> > > +	vma->vm_flags |= VM_IO | VM_MAYSHARE; /* documentation/nommu-mmap.txt
> >
> > VM_MAYSHARE is not documented anywhere in Documentation/ in Linux
> > 2.6.28-rc3. Why is it needed for non-MMU architectures only ?
>
> mmap on NOMMU is a bit tricky and very restricted.
> In case user does a MAP_SHARED with some combination of the PROT_###
> Flags the mmap fails. What's allowed and what's not is documented in
> documentation/nommu-mmap.txt
> Setting VM_MAYSHARE allows user MAP_PRIVATE mappings.

There's something I don't understand. I've had a quick look at NOMMU mmap 
(mm/nommu.c) and it seems neither MAP_SHARED nor MAP_PRIVATE can succeed with 
UVC devices.

The uvcvideo driver doesn't implements the read and get_unmapped_area file 
operations. validate_mmap_request will thus clear the BDI_CAP_MAP_DIRECT and 
BDI_CAP_MAP_COPY from the device mapping capabilities. As shared mappings 
require BDI_CAP_MAP_DIRECT and private mappings require BDI_CAP_MAP_COPY 
validate_mmap_request will return an error and mmap will fail.

I might be wrong in my analysis, but if mapping a UVC device is impossible on 
a NOMMU platform the patch doesn't make much sense. Feel free to prove me 
wrong and send me back to mm/ if you've been able to map a UVC device on a 
NOMMU platform :-)

Laurent Pinchart
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ