[uClinux-dev] Re: uClinux-dist-test-20050808 released for testing

Greg Ungerer gerg at snapgear.com
Wed Oct 12 23:12:20 EDT 2005


Hi Sonic,

Zhang, Sonic wrote:
> The change from MAP_SHARED to MAP_PRIVATE in kernel only affects memory
> mapping on a valid file descriptor.
> It is better to walk around it in kernel, because other applications
> except for the module operations may also do this mapping.
> 
> Your opinion?

I disagree. You are hiding a real problem with the kernel
change. MAP_SHARED still doesn't work the way it does
on VM linux. The change doesn't fix that. Now apps that
use it will silently not work as expected.

The insmod/mmap doesn't need to be MAP_SHARED, it isn't
actually trying to share the file with anyone else. It
is purely mapped for the subsequent call to the
init_module syscall. So it should rightly be a private
mapping anyway. (The latest module-init-tools don't
even use mmap for this, it does a loop read to malloced
memory to pull in the module file contents).

Regards
Greg





> -----Original Message-----
> From: Greg Ungerer [mailto:gerg at snapgear.com] 
> Sent: Wednesday, October 12, 2005 9:42 AM
> To: Robin Getz
> Cc: Matt Waddel; uclinux-dev at uclinux.org; sonicz at blackfin.uclinux.org
> Subject: Re: [uClinux-dev] Re: uClinux-dist-test-20050808 released for
> testing
> 
> Hi Robin,
> 
> Robin Getz wrote:
> 
>>According to Matt Waddel, Greg Ungerer wrote:
>>
>>
>>> > Has anybody tried loadable modules in the 20050906  > 2.6.x 
>>>release?
>>>
>>>The underlying mmap implementation for uClinux changed a couple of 
>>>2.6 kernels back. I suspect this stems from those changes. But I'll 
>>>need to dig deeper.
>>
>>
>>We ran into this as well. And Sonic dug into it, and got a temporary 
>>solution.
>>
>>According to the description in file Documentation/nommu-mmap.txt, the
> 
> 
>>mmap infrastructure for shared memory map in NOMMU architecture was 
>>changed in kernel 2.6.12.
>>
>>To provide shareable character device support, a driver must provide a
>>file->f_op->get_unmapped_area() operation. It should also provide 
>>file->backing
>>device information with capabilities set to indicate the permitted 
>>types of mapping on such devices.
>>
>>But most of the filesystem drivers don't implement the necessary 
>>callback function and configuration in kernel 2.6.12. System call to 
>>mmap with MAP_SHARED flag will fail for most uClinux architectures 
>>(including blackfin).
> 
> 
> I can't imagine many filesystems ever will actually do this...
> 
> 
> 
>>So, Sonic worked around this issue in our cvs by changing flag 
>>MAP_SHARED to MAP_PRIVATE. Then, modules work just as they were in 
>>older kernels.
>>
>>Quick and dirty hack:
> 
> 
> Or a cleaner way to do this is just change the call to mmap in
> busybox/modutils/insmod.c to:
> 
> diff -u -r1.7 insmod.c
> --- insmod.c    5 Aug 2005 01:08:49 -0000       1.7
> +++ insmod.c    12 Oct 2005 01:32:14 -0000
> @@ -4095,7 +4095,7 @@
> 
>          fstat(fd, &st);
>          len = st.st_size;
> -       map = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0);
> +       map = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
>          if (map == MAP_FAILED) {
>                  bb_perror_msg_and_die("cannot mmap `%s'", filename);
>          }
> 
> At least you are only effecting the mmap call that we know is a problem
> currently :-)
> 
> David (Howells) is it the case that the busybox/insmod should be using
> MAP_PRIVATE here?
> 
> Regards
> Greg
> 
> 
> ------------------------------------------------------------------------
> Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg at snapgear.com
> SnapGear -- a CyberGuard Company            PHONE:       +61 7 3435 2888
> 825 Stanley St,                             FAX:         +61 7 3891 3630
> Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com
> 

-- 
------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg at snapgear.com
SnapGear -- a CyberGuard Company            PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com



More information about the uClinux-dev mailing list