that clearly shows that
the process you will call module from is not the one  .... whose address you
want to get value of ...


i think with using pid you will search list of processes maintained by
kernel
and then you need to traverse mm_struct of reqd process
then virtual memory address space of the process vm_areas

and then you will find what is the value present at a particular address
for a particular process


Nidhi

On Wed, Apr 28, 2010 at 12:24 PM, Yang Fangkai <[email protected]>wrote:

> Hi, Nidhi,
>
>       Thanks! Now I know what is the problem.
>
>       But in my project, I am developing a virtual char device driver
> such that user can read any process's memory contents by specifying
> its pid and virtual address. Therefore, a device /dev/gh is
> registered, and the user try to do something like:
>
> echo -n targetpid>/dev/gh & echo -n addr>/dev/gh
>
> Therefore, the target process can't be modified. The device driver
> will retrieve the value by pid and virtual address and return it to
> user at terminal. I don't know how to solve this problem with get_user
> under my scenario. Thank you!
>
> Fangkai
>
> On Wed, Apr 28, 2010 at 1:42 AM, nidhi mittal hada
> <[email protected]> wrote:
> > you should somehow call the kernel module from user space program ...
> > may be using ioctl ..
> > so that you are in same process context --- as the one you are sending
> > address from .
> >
> > write char dev driver with ioctl method defined
> > then call ioctl from user space
> >
> > ioctl(fd,<IOCTL_CMD>,addrees you want to send)
> >
> >
> > Now in kernel module
> >
> > get_user(kernel data variable, <user space address>);
> >
> > Nidhi
> >
> >
> >
> >
> >
> >
> >
> > On Wed, Apr 28, 2010 at 11:55 AM, Yang Fangkai <[email protected]>
> > wrote:
> >>
> >> Hi, Nidhi,
> >>
> >>        Thanks for your reply! Yes, you are right. I pass the address
> >> to the module from bash command echo, therefore when the address is
> >> referred, the current pid is bash's pid, instead of the simple program
> >> I wrote.
> >>
> >>         But how can I fix this problem?
> >>
> >>         Thank you!
> >>
> >> Fangkai
> >>
> >> On Wed, Apr 28, 2010 at 1:01 AM, nidhi mittal hada
> >> <[email protected]> wrote:
> >> >
> >> > in your kernel module try to print current->pid
> >> > is it same as the user space process id ?
> >> > i think when in kernel module you are not in the same process context
> >> > whihc
> >> > you want to refer ...
> >> >
> >> >
> >> > Nidhi
> >> >
> >> > On Wed, Apr 28, 2010 at 10:38 AM, Yang Fangkai <
> [email protected]>
> >> > wrote:
> >> >>
> >> >> Hi, all,
> >> >>
> >> >> I have a problem with get_user() macro. What I did is as follows:
> >> >>
> >> >> I run the following program
> >> >>
> >> >> int main()
> >> >> {
> >> >>       int a = 20;
> >> >>       printf("address of a: %p", &a);
> >> >>       sleep(200);
> >> >>       return 0;
> >> >> }
> >> >>
> >> >> When the program runs, it outputs the address of a, say, 0xbff91914.
> >> >>
> >> >> Then I pass this address to a module running in Kernel Mode that
> >> >> retrieves the contents at this address (at the time when I did this,
> I
> >> >> also made sure the process didn't terminate, because I put it to
> sleep
> >> >> for 200 seconds... ):
> >> >>
> >> >> The address is firstly sent as a string, and I cast them into pointer
> >> >> type.
> >> >>
> >> >> int * ptr = (int*)simple_strtol(buffer, NULL,16);
> >> >> printk("address: %p",ptr); // I use this line to make sure the cast
> is
> >> >> correct. When running, it does output bff91914
> >> >> int val = 0;
> >> >> int res;
> >> >> res= get_user(val, (int*) ptr);
> >> >>
> >> >> However, res is always not 0, meaning that get_user returns error. I
> >> >> am wondering what is the problem....
> >> >>
> >> >> Thank you!!
> >> >>
> >> >> --
> >> >> To unsubscribe from this list: send an email with
> >> >> "unsubscribe kernelnewbies" to [email protected]
> >> >> Please read the FAQ at http://kernelnewbies.org/FAQ
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks & Regards
> >> > Nidhi Mittal Hada
> >> > Scientific officer D
> >> > Computer Division
> >> > Bhabha Atomic Research Center
> >> > Mumbai
> >> >
> >> >
> >> >
> >
> >
> >
> > --
> > Thanks & Regards
> > Nidhi Mittal Hada
> > Scientific officer D
> > Computer Division
> > Bhabha Atomic Research Center
> > Mumbai
> >
> >
> >
>



-- 
Thanks & Regards
Nidhi Mittal Hada
Scientific officer D
Computer Division
Bhabha Atomic Research Center
Mumbai

Reply via email to