Fwd: Re: [Suggestion] drivers/staging/tidspbridge: pr_err and pr_debug for uninitialized buffer (name buf not initialized).

2012-12-12 Thread Chen Gang
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).

2012-12-12 Thread Chen Gang
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