Fwd: Re: [Suggestion] drivers/staging/tidspbridge: pr_err and pr_debug for uninitialized buffer (name buf not initialized).
Hello Greg Kroah-Hartman: excuse me, I have to forward this mail to you. I have sent it to Omar Ramirez Luna , but failed. (get mail delivery failed ) thanks. gchen 原始消息 主题: Re: [Suggestion] drivers/staging/tidspbridge: pr_err and pr_debug for uninitialized buffer (name buf not initialized). 日期: Wed, 12 Dec 2012 18:02:44 +0800 发件人: Chen Gang 收件人: omar.rami...@ti.com 抄送: linux-kernel@vger.kernel.org 于 2012年12月12日 17:48, Chen Gang 写道: > Hello Omar Ramirez Luna: > > in drivers/staging/tidspbridge/core/io_sm.c: > it is for function dump_dsp_stack. > "char name[256]" is not initialized. (line 1898) > name is as out buf for node_find_addr (line 2021..2024, 2066..2071, > 2098..2103) > if node_find_addr fails, pr_err may cause issue (name may not be > initialized) oh sorry, pr_err no issue (it is my fault). > > in drivers/staging/tidspbridge/rmgr/node.c: > function node_find_addr can be called by dump_dsp_stack. > param sym_name is as out buf which may be not initialized. > so pr_debug may cause issue (print sym_name). > > in drivers/staging/tidspbridge/rmgr/nldr.c: > function nldr_find_addr can be called by node_find_addr > param sym_name is as out buf which may be not initialized. > so pr_debug may cause issue (print sym_name). > but they are still have issue (pr_debug). I find by code review, please help check whether this suggestion is valid. thanks. > please help checking, thanks. > > gchen. > > > in drivers/staging/tidspbridge/rmgr/nldr.c: > > 1798 int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr, > 1799 u32 offset_range, void *offset_output, char > *sym_name) > 1800 { > 1801 int status = 0; > 1802 bool status1 = false; > 1803 s32 i = 0; > 1804 struct lib_node root = { NULL, 0, NULL }; > 1805 pr_debug("%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n", __func__, (u32) > nldr_node, > 1806 sym_addr, offset_range, (u32) offset_output, > sym_name); > 1807 > ... > > > in drivers/staging/tidspbridge/rmgr/node.c: > > 3009 int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr, > 3010 u32 offset_range, void *sym_addr_output, char *sym_name) > 3011 { > 3012 struct node_object *node_obj; > 3013 int status = -ENOENT; > 3014 > 3015 pr_debug("%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n", __func__, > 3016 (unsigned int) node_mgr, > 3017 sym_addr, offset_range, > 3018 (unsigned int) sym_addr_output, sym_name); > 3019 > 3020 list_for_each_entry(node_obj, _mgr->node_list, list_elem) { > 3021 status = nldr_find_addr(node_obj->nldr_node_obj, > sym_addr, > 3022 offset_range, sym_addr_output, sym_name); > 3023 if (!status) > 3024 break; > 3025 } > 3026 > 3027 return status; > 3028 } > > > > > in drivers/staging/tidspbridge/core/io_sm.c: > > 1892 int dump_dsp_stack(struct bridge_dev_context *bridge_context) > 1893 { > 1894 int status = 0; > 1895 struct cod_manager *code_mgr; > 1896 struct node_mgr *node_mgr; > 1897 u32 trace_begin; > 1898 char name[256]; > 1899 struct { > 1900 u32 head[2]; > 1901 u32 size; > 1902 } mmu_fault_dbg_info; > 1903 u32 *buffer; > 1904 u32 *buffer_beg; > 1905 u32 *buffer_end; > 1906 u32 exc_type; > 1907 u32 dyn_ext_base; > 1908 u32 i; > 1909 u32 offset_output; > 1910 u32 total_size; > 1911 u32 poll_cnt; > 1912 const char *dsp_regs[] = {"EFR", "IERR", "ITSR", "NTSR", > 1913 "IRP", "NRP", "AMR", "SSR", > 1914 "ILC", "RILC", "IER", "CSR"}; > 1915 const char *exec_ctxt[] = {"Task", "SWI", "HWI", "Unknown"}; > 1916 struct bridge_drv_interface *intf_fxns; > 1917 struct dev_object *dev_object = bridge_context->dev_obj; > 1918 > 1919 status = dev_get_cod_mgr(dev_object, _mgr); > 1920 if (!code_mgr) { > 1921 pr_debug("%s: Failed on dev_get_cod_mgr.\n", __func__); > 1922 status = -EFAULT; > 1923 } > 1924 > 1925 if (!status) { > 1926 status = dev_get_node_manager(dev_object, _mgr); > 1927 if (!node_mgr) { > 1928 pr_debug("%s: Failed on dev_get_node_manager.\n", > 1929 > __func__); > 1930 status = -EFAULT; > 1931 } > 1932 } > 1933 > 1934 if (!status) { > 1935 /* Look for SYS_PUTCBEG/SYS_PUTCEND: */ > 1936 status = > 1937 cod_get_sym_value(code_mgr,
Fwd: Re: [Suggestion] drivers/staging/tidspbridge: pr_err and pr_debug for uninitialized buffer (name buf not initialized).
Hello Greg Kroah-Hartman: excuse me, I have to forward this mail to you. I have sent it to Omar Ramirez Luna omar.rami...@ti.com, but failed. (get mail delivery failed ) thanks. gchen 原始消息 主题: Re: [Suggestion] drivers/staging/tidspbridge: pr_err and pr_debug for uninitialized buffer (name buf not initialized). 日期: Wed, 12 Dec 2012 18:02:44 +0800 发件人: Chen Gang gang.c...@asianux.com 收件人: omar.rami...@ti.com 抄送: linux-kernel@vger.kernel.org linux-kernel@vger.kernel.org 于 2012年12月12日 17:48, Chen Gang 写道: Hello Omar Ramirez Luna: in drivers/staging/tidspbridge/core/io_sm.c: it is for function dump_dsp_stack. char name[256] is not initialized. (line 1898) name is as out buf for node_find_addr (line 2021..2024, 2066..2071, 2098..2103) if node_find_addr fails, pr_err may cause issue (name may not be initialized) oh sorry, pr_err no issue (it is my fault). in drivers/staging/tidspbridge/rmgr/node.c: function node_find_addr can be called by dump_dsp_stack. param sym_name is as out buf which may be not initialized. so pr_debug may cause issue (print sym_name). in drivers/staging/tidspbridge/rmgr/nldr.c: function nldr_find_addr can be called by node_find_addr param sym_name is as out buf which may be not initialized. so pr_debug may cause issue (print sym_name). but they are still have issue (pr_debug). I find by code review, please help check whether this suggestion is valid. thanks. please help checking, thanks. gchen. in drivers/staging/tidspbridge/rmgr/nldr.c: 1798 int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr, 1799 u32 offset_range, void *offset_output, char *sym_name) 1800 { 1801 int status = 0; 1802 bool status1 = false; 1803 s32 i = 0; 1804 struct lib_node root = { NULL, 0, NULL }; 1805 pr_debug(%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n, __func__, (u32) nldr_node, 1806 sym_addr, offset_range, (u32) offset_output, sym_name); 1807 ... in drivers/staging/tidspbridge/rmgr/node.c: 3009 int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr, 3010 u32 offset_range, void *sym_addr_output, char *sym_name) 3011 { 3012 struct node_object *node_obj; 3013 int status = -ENOENT; 3014 3015 pr_debug(%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n, __func__, 3016 (unsigned int) node_mgr, 3017 sym_addr, offset_range, 3018 (unsigned int) sym_addr_output, sym_name); 3019 3020 list_for_each_entry(node_obj, node_mgr-node_list, list_elem) { 3021 status = nldr_find_addr(node_obj-nldr_node_obj, sym_addr, 3022 offset_range, sym_addr_output, sym_name); 3023 if (!status) 3024 break; 3025 } 3026 3027 return status; 3028 } in drivers/staging/tidspbridge/core/io_sm.c: 1892 int dump_dsp_stack(struct bridge_dev_context *bridge_context) 1893 { 1894 int status = 0; 1895 struct cod_manager *code_mgr; 1896 struct node_mgr *node_mgr; 1897 u32 trace_begin; 1898 char name[256]; 1899 struct { 1900 u32 head[2]; 1901 u32 size; 1902 } mmu_fault_dbg_info; 1903 u32 *buffer; 1904 u32 *buffer_beg; 1905 u32 *buffer_end; 1906 u32 exc_type; 1907 u32 dyn_ext_base; 1908 u32 i; 1909 u32 offset_output; 1910 u32 total_size; 1911 u32 poll_cnt; 1912 const char *dsp_regs[] = {EFR, IERR, ITSR, NTSR, 1913 IRP, NRP, AMR, SSR, 1914 ILC, RILC, IER, CSR}; 1915 const char *exec_ctxt[] = {Task, SWI, HWI, Unknown}; 1916 struct bridge_drv_interface *intf_fxns; 1917 struct dev_object *dev_object = bridge_context-dev_obj; 1918 1919 status = dev_get_cod_mgr(dev_object, code_mgr); 1920 if (!code_mgr) { 1921 pr_debug(%s: Failed on dev_get_cod_mgr.\n, __func__); 1922 status = -EFAULT; 1923 } 1924 1925 if (!status) { 1926 status = dev_get_node_manager(dev_object, node_mgr); 1927 if (!node_mgr) { 1928 pr_debug(%s: Failed on dev_get_node_manager.\n, 1929 __func__); 1930 status = -EFAULT; 1931 } 1932 } 1933 1934 if (!status) { 1935 /* Look for SYS_PUTCBEG/SYS_PUTCEND: */ 1936 status = 1937 cod_get_sym_value(code_mgr, COD_TRACEBEG, trace_begin); 1938 pr_debug(%s: trace_begin Value