Enable this CONFIG_CC_STACKPROTECTOR and you will get crash. Stack overflow does'nt necessarily creates kernel panic ;) On Thu, Sep 13, 2012 at 5:00 PM, Denis Kirjanov <kirjanov@xxxxxxxxx> wrote: > At the moment of forking a new process do_fork() creates a new stack for the > task by using alloc_thread_info_node(): > > struct page *page = alloc_pages_node(node, THREADINFO_GFP, > THREAD_SIZE_ORDER); > > > On 9/13/12, Rajat Sharma <fs.rajat@xxxxxxxxx> wrote: >> "The kernel stack is part of task_struct of the running process" >> >> Please double check that, its not part of task_struct, rather on some >> architectures, kernel stack is extended by a thread_info structure at >> the end which keeps a link to task_struct of the process. >> >> -Rajat >> >> On Thu, Sep 13, 2012 at 1:59 PM, Arun KS <getarunks@xxxxxxxxx> wrote: >>> Hello Shubham, >>> >>> On Thu, Sep 13, 2012 at 12:15 PM, shubham sharma <shubham20006@xxxxxxxxx> >>> wrote: >>>> >>>> Hi, >>>> >>>> As far as i know, the size of stack allocated in the kernel space is >>>> 8Kb for each process. But in case i use more than 8Kb of memory from >>>> the stack then what will happen? I think that in that case the system >>>> would crash because i am accessing an illegal memory area. I wrote >>>> kernel module in which i defined an integer array whose size was 8000. >>>> But still it did not crash my system. Why? >>>> >>>> The module i wrote was as follows: >>>> >>>> #include <linux/kernel.h> >>>> #include <linux/module.h> >>>> >>>> int __init init_my_module(void) >>>> { >>>> int arr[8000]; >>>> printk("%s:%d\tmodule initilized\n", __func__, __LINE__); >>>> arr[1] = 1; >>>> arr[4000] = 1; >>>> arr[7999] = 1; >>> >>> Instead do a memset. >>> memset(arr, 0, 8192); >>> >>> If you do this the current calling process thread_info will be set to >>> zero. >>> This should cause a crash. >>> >>> Thanks, >>> Arun >>> >>> >>>> >>>> printk("%s:%d\tarr[1]:%d, arr[4000]:%d, arr[7999]:%d\n", >>>> __func__, >>>> __LINE__, arr[1], arr[4000], arr[7999]); >>>> return 0; >>>> } >>>> >>>> void __exit cleanup_my_module(void) >>>> { >>>> printk("exiting\n"); >>>> return; >>>> } >>>> >>>> module_init(init_my_module); >>>> module_exit(cleanup_my_module); >>>> >>>> MODULE_LICENSE("GPL"); >>>> >>>> _______________________________________________ >>>> Kernelnewbies mailing list >>>> Kernelnewbies@xxxxxxxxxxxxxxxxx >>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >>> >>> >>> >>> _______________________________________________ >>> Kernelnewbies mailing list >>> Kernelnewbies@xxxxxxxxxxxxxxxxx >>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >>> >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@xxxxxxxxxxxxxxxxx >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> > > > -- > Regards, > Denis > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies