User Tools

Site Tools


mywiki:linux:linuxstack

This is an old revision of the document!


Linux Stack Overflow and Buffer Over

kernel Stack

exception/hard IRQ/soft IRQ stack

 hardware stack: hardirt_stack array
 softIRQ stack: softirt_stack array

kernel Stack OverFlow

Tools

checkstack.pl

$(CROSS_COMPILE)objdump -d vmlinux | scripts/checkstack.pl [arch]

$ mips-openwrt-linux-objdump -d vmlinux > vmlinux.S

$ cat vmlinux.S| scripts/checkstack.pl mips

0x803feed4 match [vmlinux]:				3184
0x803fedc8 mangle_http_header.constprop.2 [vmlinux]:	2096
0x80045da8 mtsched_proc_write [vmlinux]:		1088
0x801119c0 do_sys_poll [vmlinux]:			952
0x802fa7ac pce_rule_write [vmlinux]:			848
0x8033daec of_get_dma_window [vmlinux]:			832
0x80110c78 do_select [vmlinux]:				752
0x802ed918 GSW_MulticastRouterPortRemove [vmlinux]:	664
0x802edd68 GSW_MulticastSnoopCfgSet [vmlinux]:		664
0x802f1cb4 GSW_PortRedirectSet [vmlinux]:		664
0x802ed610 GSW_MulticastRouterPortAdd [vmlinux]:	656
0x802f3908 GSW_8021X_EAPOL_RuleSet [vmlinux]:		632
0x802e6b30 GSW_STP_BPDU_RuleSet [vmlinux]:		624
0x8023a820 test_pcomp [vmlinux]:			600
0x8022a7d8 semctl_main [vmlinux]:			584
0x8023ade4 test_comp [vmlinux]:				584
0x8022b4e0 SyS_semtimedop [vmlinux]:			520
0x80038ff8 dma_build_device_chan_tbl [vmlinux]:		504
0x801298ac default_file_splice_read [vmlinux]:		496
0x8023b690 __test_skcipher [vmlinux]:			496
0x80163cd0 elf_kcore_store_hdr [vmlinux]:		464
0x801a5110 nlmsvc_mark_resources [vmlinux]:		432
0x802e2120 proc_write_directpath [vmlinux]:		432
0x80412190 copy_to_user_tmpl.part.33 [vmlinux]:		432
0x802a80bc loop_get_status_old [vmlinux]:		408
0x80197de0 nfs_dns_parse [vmlinux]:			400
0x802a7d58 loop_set_status_old [vmlinux]:		400
0x800d50b4 shmem_file_splice_read [vmlinux]:		368
0x80129268 __generic_file_splice_read [vmlinux]:	368
0x80129c08 vmsplice_to_pipe [vmlinux]:			368
0x801aabc8 autofs4_notify_daemon [vmlinux]:		368
0x8034c8b8 skb_splice_bits [vmlinux]:			352
0x800c2c3c show_free_areas [vmlinux]:			344
0x8037053c dev_seq_printf_stats [vmlinux]:		344
0x803b0e8c do_ip_setsockopt.isra.17 [vmlinux]:		344
0x80592c94 init_posix_timers [vmlinux]:			344
0x801111ac core_sys_select [vmlinux]:			336
0x8030adb4 tmu_proc_tmu_cascade_write [vmlinux]:	336
0x803b0214 do_ip_getsockopt.constprop.18 [vmlinux]:	328
0x80122c88 setxattr [vmlinux]:				320
0x80147660 elf_core_dump [vmlinux]:			320
0x8023d1c0 test_hash [vmlinux]:				320
0x803d8df0 __udp4_lib_mcast_deliver.isra.55 [vmlinux]:	320
0x800895e4 sched_domain_debug_one.constprop.66 [vmlinux]:312
0x8015f668 show_stat [vmlinux]:				312
0x801ac09c autofs4_expire_run [vmlinux]:		312
0x8027d7f4 store_mode [vmlinux]:			312
0x802b9aa4 mtdchar_ioctl [vmlinux]:			312
0x80122880 getxattr [vmlinux]:				304
0x8015f304 meminfo_proc_show [vmlinux]:			304
0x8019e460 exportfs_decode_fh [vmlinux]:		304
0x803696b8 rtnl_newlink [vmlinux]:			304
0x80396de0 conntrack_pptp_help [vmlinux]:		304

stack_size

Below are some results for static analysis of function stack depth in the Linux kernel, using 'stack_size'. (stack_size is a custom tool written by Tim Bird, before he found out about checkstack.pl.) https://lkml.org/lkml/2011/10/18/479

$ ./stack_size vmlinux-arm

============ RESULTS ===============
number of functions     = 14371
max function stack depth= 736
function with max depth = nlmclnt_reclaim

Function Name                    Stack Depth
=====================            ===========
__generic_file_splice_read        352
do_select                         376
loop_set_status_old               392
snd_ctl_elem_add_user             408
extract_buf                       432
default_file_splice_read          472
sys_semtimedop                    520
semctl_main.clone.7               560
do_sys_poll                       568
nlmclnt_reclaim                   736

CONFIG_DEBUG_STACK_USAGE / CONFIG_DEBUG_STACKOVERFLOW

# dmesg | grep greatest

                                                
kworker/u:0 used greatest stack depth: 10564 bytes left                         
busybox used greatest stack depth: 9512 bytes left                              
busybox used greatest stack depth: 9504 bytes left                              
grep used greatest stack depth: 9372 bytes left                                 
init used greatest stack depth: 9028 bytes left

#echo t >/proc/sysrq-trigger #dmesg | grep -v [[]

 task                PC stack   pid father
init            S 802af8b0   932     1      0 0x00000000
kthreadd        S 802af8b0  2496     2      0 0x00000000
ksoftirqd/0     S 802af8b0  2840     3      2 0x00000000
kworker/0:0     S 802af8b0  2776     4      2 0x00000000
kworker/u:0     S 802af8b0  2548     5      2 0x00000000
migration/0     S 802af8b0  2704     6      2 0x00000000
migration/1     S 802af8b0  2704     7      2 0x00000000
kworker/1:0     S 802af8b0  2560     8      2 0x00000000
ksoftirqd/1     S 802af8b0  3024     9      2 0x00000000
khelper         S 802af8b0  2824    10      2 0x00000000
sync_supers     S 802af8b0  2872    11      2 0x00000000
bdi-default     S 802af8b0  2584    12      2 0x00000000
kblockd         S 802af8b0  2824    13      2 0x00000000
khubd           S 802af8b0  2744    14      2 0x00000000
mywiki/linux/linuxstack.1413858200.txt.gz · Last modified: (external edit)