2012/10/19 Rohan Puri <rohan.pur...@gmail.com> > > > 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 > Hi Rohan,
I don't think the thread->mm is NULL, because when I print the several vm_area_struct of the thread->mm it work well, but if put the code in the loop to print all the vma, it crashed. Thinks Fan
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies