Re: question about get_user

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I believe that you are having pid and passing that to your character driver.
How about using  find_task_by_id(pid) function in your virtual driver. it returns pointer to task_struct for particular pid.
e.g.
pid_t pid;
struct task_struct *my;
my = find_task_by_id(pid)
printf("%s",my->comm); //print or do whatever you want to do with it
 
 
Regards,
_-_Mayank Rana_-_


--- On Wed, 4/28/10, Manish Katiyar <mkatiyar@xxxxxxxxx> wrote:

From: Manish Katiyar <mkatiyar@xxxxxxxxx>
Subject: Re: question about get_user
To: "Yang Fangkai" <wolfgang.yang@xxxxxxxxx>
Cc: "nidhi mittal hada" <nidhimittal19@xxxxxxxxx>, "Kernelnewbies" <kernelnewbies@xxxxxxxxxxxx>
Date: Wednesday, April 28, 2010, 12:49 PM

On Wed, Apr 28, 2010 at 12:24 PM, Yang Fangkai <wolfgang.yang@xxxxxxxxx> 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.

Isn't it something similar to ptrace with PTRACE_PEEKTEXT, PTRACE_PEEKDATA

Thanks -
Manish
>  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
> <nidhimittal19@xxxxxxxxx> 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 <wolfgang.yang@xxxxxxxxx>
>> 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
>>> <nidhimittal19@xxxxxxxxx> 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 <wolfgang.yang@xxxxxxxxx>
>>> > 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 ecartis@xxxxxxxxxxxx
>>> >> 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
>>
>>
>>
>
> --
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
> Please read the FAQ at http://kernelnewbies.org/FAQ
>
>



--
Thanks -
Manish
==================================
[$\*.^ -- I miss being one of them
==================================

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux