On Fri, Oct 19, 2012 at 7:38 PM, Anuz Pratap Singh Tomar < chambilketha...@gmail.com> wrote:
> > > On Fri, Oct 19, 2012 at 2:46 PM, Fan Yang <lljyang...@gmail.com> wrote: > >> >> >> 2012/10/19 Arun KS <getaru...@gmail.com> >> > >> > Hi Fan, >> > >> > On Fri, Oct 19, 2012 at 6:50 PM, Fan Yang <lljyang...@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@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@kernelnewbies.org >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> >> > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@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
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies