where are the bug ?

Rohan Puri rohan.puri15 at gmail.com
Fri Oct 19 10:34:04 EDT 2012


On Fri, Oct 19, 2012 at 7:38 PM, Anuz Pratap Singh Tomar <
chambilkethakur at gmail.com> wrote:

>
>
> On Fri, Oct 19, 2012 at 2:46 PM, Fan Yang <lljyangfan at gmail.com> wrote:
>
>>
>>
>> 2012/10/19 Arun KS <getarunks at gmail.com>
>> >
>> > Hi Fan,
>> >
>> > On Fri, Oct 19, 2012 at 6:50 PM, Fan Yang <lljyangfan at gmail.com> wrote:
>> >>
>> >> HI ALL:
>> >>     I just run a module on my machine, but it  can't work. When the
>> module run the kernel will painc. I don't know where is wrong. This is my
>> code:
>> >>
>> >>  1 #include<linux/module.h>
>> >>   2 #include<linux/kernel.h>
>> >>   3 #include<linux/init.h>
>> >>   4 #include<linux/sched.h>
>> >>   5
>> >>   6 int input = 1;
>> >>   7 module_param (input, int, S_IRUGO);
>> >>   8
>> >>   9 static int __init printvma_init (void)
>> >>  10 {
>> >>  11     struct vm_area_struct *p, *start;
>> >>  12     int i;
>> >>  13     struct task_struct *thread;
>>
>> >>  14
>> >>  15     thread = current;
>> >>  16
>> >>  17     while (1)
>> >>  18     {
>> >>  19         if (thread->pid == input)
>> >>  20             break;
>> >>  21         thread = list_entry (thread->tasks.next, struct
>> task_struct, tasks);
>> >>  22     }
>> >>  23     p = thread->mm->mmap;
>> >>  24
>> >>  25     do{
>> >>  26         printk ("%lx\t%lx\t%s\n", p->vm_start,\
>> >>  27                 p->vm_end, p->vm_file->f_path.dentry->d_iname);
>> >>  28         p = p->vm_next;
>> >>  29     }while (p != NULL);
>> >>  30
>> >>  31     printk ("vm_file address is:%d\tf_path address is:%d\
>> >>  32             \tname is:%s",& p->vm_file->f_path,\
>> >>  33             p->vm_file->f_path.dentry->d_iname);
>> >>  34
>> >>  35     printk ("info from the kernel space:%s\n", thread->comm);
>> >>  36     return 0;
>> >>  37 }
>> >>  38
>> >>  39 static void __exit printvma_exit (void)
>> >>  40 {
>> >>  41     printk ("the module will leave the kernel space..\n");
>> >>  42 }
>> >>  43
>> >>  44 module_init (printvma_init);
>> >>  45 module_exit (printvma_exit);
>> >>  46 MODULE_LICENSE ("GPL");
>> >>
>> >>
>> >> what's wrong?
>> >
>> >
>> > It would be good if you paste your crash log here.
>> >
>> > Thanks,
>> > Arun
>> >>
>> >>
>> >> thanks
>> >>
>> >> _______________________________________________
>> >> Kernelnewbies mailing list
>> >> Kernelnewbies at kernelnewbies.org
>> >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>> >>
>> >
>> The module run in a virtual machine, I can't control the machine when it
>> crashed, so I just got a picture when the kernel panic.
>>
>> you can run the module under uml, it wont be hard to copy  the crash log
> from terminal in uml.
>
>>
>>
>>
>>
>> Thanks
>> Fan
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>
>>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
Hi Fan,

See the issue is thread->mm is NULL in your case. The simplest way to test
this in your case is by the following : -

Put these statements after the while loop

if(!thread->mm) { printk("thread->mm is NULL\n"); return 0; }

After this compile and load the module, you will see this statement printed
in dmesg command output.


General programming practice : -

Always make checks for NULL pointer in your code, before dereferencing your
code.

- Rohan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20121019/11aea0d2/attachment.html 


More information about the Kernelnewbies mailing list