Subject: Re: copy_from_user problem

From: Arnd Bergmann <[email-masked]>
Date: Wed, 27 Feb 2008 13:40:02 +0100

On Wednesday 27 February 2008, Maynard Johnson wrote:
> > Sounds to me that your kernel module will try to copy_from_user() from
> > the user context of ... insmod :-)
> >   
> Yeah, that's probably the problem (along with my lack of understanding 
> how VM works  -- heh).  I guess I was just getting lucky with the 32-bit 
> test in that the 32-bit libc was being loaded for my insmod process at 
> the same virtual memory address as for my C test program.
> > You need to do your copy_from_user() from within the context of the
> > program you try to access the memory from !
> >   
> Can't do that in the "real" code I'm developing, so I guess I'll need to 
> use get_user_pages.  Hmmm . . . not quite as simple to use as 
> copy_from_user, and I don't see any doc on it.  But at least I've found 
> a couple examples in the kernel tree.

Are you sure that this has to run in kernel space? You may be able to
do the same thing with ptrace() from another user process, which is
normally a lot easier to do, especially if you're not familiar with all
the corner cases in powerpc linux memory management.

> > If you need to access another context than the current one, you then
> > need to use a different mechanism, such as get_user_pages(), though
> > beware that you can only do that for memory, not SPE local store or
> > register mappings.
> >   
> The "real" code I'm developing is targeted at POWER, not Cell.

Cell systems are compliant to the Power architecture and they run
the same software, so you should at least make sure you have error
handling in place to deal with an access of SPU local store pages
and don't cause random crashes.

	Arnd <><