lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date: Sun, 24 Dec 2023 04:49:20 +0800
From: kernel test robot <lkp@...el.com>
To: "Steven Rostedt (VMware)" <rostedt@...dmis.org>
Cc: oe-kbuild-all@...ts.linux.dev, linux-kernel@...r.kernel.org,
	"Joel Fernandes (Google)" <joel@...lfernandes.org>
Subject: kernel/trace/ftrace.c:118:59: sparse: sparse: incorrect type in
 initializer (different address spaces)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   5254c0cbc92d2a08e75443bdb914f1c4839cdf5a
commit: 3306fc4aff464f9c08c8899695a218f4b1125d4a ftrace: Create new ftrace_internal.h header
date:   5 years ago
config: x86_64-randconfig-122-20231101 (https://download.01.org/0day-ci/archive/20231224/202312240458.GlrZCjdn-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231224/202312240458.GlrZCjdn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312240458.GlrZCjdn-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> kernel/trace/ftrace.c:118:59: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct ftrace_ops [noderef] __rcu *[addressable] [toplevel] ftrace_ops_list @@     got struct ftrace_ops * @@
   kernel/trace/ftrace.c:118:59: sparse:     expected struct ftrace_ops [noderef] __rcu *[addressable] [toplevel] ftrace_ops_list
   kernel/trace/ftrace.c:118:59: sparse:     got struct ftrace_ops *
>> kernel/trace/ftrace.c:212:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct ftrace_ops *ops @@     got struct ftrace_ops [noderef] __rcu *[addressable] [toplevel] ftrace_ops_list @@
   kernel/trace/ftrace.c:212:49: sparse:     expected struct ftrace_ops *ops
   kernel/trace/ftrace.c:212:49: sparse:     got struct ftrace_ops [noderef] __rcu *[addressable] [toplevel] ftrace_ops_list
   kernel/trace/ftrace.c:295:23: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct ftrace_ops [noderef] __rcu * @@     got struct ftrace_ops * @@
   kernel/trace/ftrace.c:295:23: sparse:     expected struct ftrace_ops [noderef] __rcu *
   kernel/trace/ftrace.c:295:23: sparse:     got struct ftrace_ops *
   kernel/trace/ftrace.c:299:16: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct ftrace_ops **p @@     got struct ftrace_ops [noderef] __rcu **list @@
   kernel/trace/ftrace.c:299:16: sparse:     expected struct ftrace_ops **p
   kernel/trace/ftrace.c:299:16: sparse:     got struct ftrace_ops [noderef] __rcu **list
   kernel/trace/ftrace.c:299:50: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct ftrace_ops **p @@     got struct ftrace_ops [noderef] __rcu ** @@
   kernel/trace/ftrace.c:299:50: sparse:     expected struct ftrace_ops **p
   kernel/trace/ftrace.c:299:50: sparse:     got struct ftrace_ops [noderef] __rcu **
   kernel/trace/ftrace.c:306:12: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct ftrace_ops * @@     got struct ftrace_ops [noderef] __rcu *next @@
   kernel/trace/ftrace.c:306:12: sparse:     expected struct ftrace_ops *
   kernel/trace/ftrace.c:306:12: sparse:     got struct ftrace_ops [noderef] __rcu *next
   kernel/trace/ftrace.c:592:5: sparse: sparse: symbol 'ftrace_profile_pages_init' was not declared. Should it be static?
   kernel/trace/ftrace.c:210:20: sparse: sparse: dereference of noderef expression
   kernel/trace/ftrace.c:210:20: sparse: sparse: dereference of noderef expression
   kernel/trace/ftrace.c:210:20: sparse: sparse: dereference of noderef expression
   kernel/trace/ftrace.c: note: in included file:
   include/linux/slab.h:332:43: sparse: sparse: dubious: x & !y
   include/linux/slab.h:332:43: sparse: sparse: dubious: x & !y
   include/linux/slab.h:332:43: sparse: sparse: dubious: x & !y
   include/linux/slab.h:332:43: sparse: sparse: dubious: x & !y
   include/linux/slab.h:332:43: sparse: sparse: dubious: x & !y
   kernel/trace/ftrace.c: In function 'ftrace_ops_get_list_func':
   kernel/trace/ftrace.c:128:31: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int)' to 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' [-Wcast-function-type]
     128 | #define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
         |                               ^
   kernel/trace/ftrace.c:184:24: note: in expansion of macro 'ftrace_ops_list_func'
     184 |                 return ftrace_ops_list_func;
         |                        ^~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c: In function 'update_ftrace_function':
   kernel/trace/ftrace.c:128:31: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int)' to 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' [-Wcast-function-type]
     128 | #define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
         |                               ^
   kernel/trace/ftrace.c:217:24: note: in expansion of macro 'ftrace_ops_list_func'
     217 |                 func = ftrace_ops_list_func;
         |                        ^~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c:128:31: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int)' to 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' [-Wcast-function-type]
     128 | #define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
         |                               ^
   kernel/trace/ftrace.c:230:21: note: in expansion of macro 'ftrace_ops_list_func'
     230 |         if (func == ftrace_ops_list_func) {
         |                     ^~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c:128:31: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int)' to 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' [-Wcast-function-type]
     128 | #define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
         |                               ^
   kernel/trace/ftrace.c:250:33: note: in expansion of macro 'ftrace_ops_list_func'
     250 |         ftrace_trace_function = ftrace_ops_list_func;
         |                                 ^~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c: At top level:
   kernel/trace/ftrace.c:592:5: warning: no previous prototype for 'ftrace_profile_pages_init' [-Wmissing-prototypes]
     592 | int ftrace_profile_pages_init(struct ftrace_profile_stat *stat)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c:6726:5: warning: no previous prototype for 'ftrace_graph_entry_stub' [-Wmissing-prototypes]
    6726 | int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
         |     ^~~~~~~~~~~~~~~~~~~~~~~
   kernel/trace/ftrace.c:6733:25: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' to 'void (*)(struct ftrace_graph_ret *)' [-Wcast-function-type]
    6733 |                         (trace_func_graph_ret_t)ftrace_stub;
         |                         ^
   kernel/trace/ftrace.c: In function 'unregister_ftrace_graph':
   kernel/trace/ftrace.c:6963:31: warning: cast between incompatible function types from 'void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct pt_regs *)' to 'void (*)(struct ftrace_graph_ret *)' [-Wcast-function-type]
    6963 |         ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub;
         |                               ^
   kernel/trace/ftrace.c:2144: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_update_record, set a record that now is tracing or not
   kernel/trace/ftrace.c:2157: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_test_record, check if the record has been enabled or not
   kernel/trace/ftrace.c:2420: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_rec_iter_start, start up iterating over traced functions
   kernel/trace/ftrace.c:2451: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_rec_iter_next, get the next record to process.
   kernel/trace/ftrace.c:2476: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_rec_iter_record, get the record at the iterator location
   kernel/trace/ftrace.c:2575: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * ftrace_run_stop_machine, go back to the stop machine method
   kernel/trace/ftrace.c:2587: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * arch_ftrace_update_code, modify the code to trace or not trace
   kernel/trace/ftrace.c:4729: warning: Function parameter or member 'ops' not described in 'ftrace_set_filter_ip'
   kernel/trace/ftrace.c:4729: warning: Function parameter or member 'ip' not described in 'ftrace_set_filter_ip'
   kernel/trace/ftrace.c:4729: warning: Function parameter or member 'remove' not described in 'ftrace_set_filter_ip'
   kernel/trace/ftrace.c:4729: warning: Function parameter or member 'reset' not described in 'ftrace_set_filter_ip'
   kernel/trace/ftrace.c:4743: warning: Function parameter or member 'ops' not described in 'ftrace_ops_set_global_filter'
   kernel/trace/ftrace.c:4771: warning: Function parameter or member 'ops' not described in 'ftrace_set_filter'
   kernel/trace/ftrace.c:4771: warning: Function parameter or member 'buf' not described in 'ftrace_set_filter'
   kernel/trace/ftrace.c:4771: warning: Function parameter or member 'len' not described in 'ftrace_set_filter'
   kernel/trace/ftrace.c:4771: warning: Function parameter or member 'reset' not described in 'ftrace_set_filter'
   kernel/trace/ftrace.c:4790: warning: Function parameter or member 'ops' not described in 'ftrace_set_notrace'
   kernel/trace/ftrace.c:4790: warning: Function parameter or member 'buf' not described in 'ftrace_set_notrace'
   kernel/trace/ftrace.c:4790: warning: Function parameter or member 'len' not described in 'ftrace_set_notrace'
   kernel/trace/ftrace.c:4790: warning: Function parameter or member 'reset' not described in 'ftrace_set_notrace'
   kernel/trace/ftrace.c:4805: warning: Function parameter or member 'buf' not described in 'ftrace_set_global_filter'
   kernel/trace/ftrace.c:4805: warning: Function parameter or member 'len' not described in 'ftrace_set_global_filter'
   kernel/trace/ftrace.c:4805: warning: Function parameter or member 'reset' not described in 'ftrace_set_global_filter'
   kernel/trace/ftrace.c:4821: warning: Function parameter or member 'buf' not described in 'ftrace_set_global_notrace'
   kernel/trace/ftrace.c:4821: warning: Function parameter or member 'len' not described in 'ftrace_set_global_notrace'
   kernel/trace/ftrace.c:4821: warning: Function parameter or member 'reset' not described in 'ftrace_set_global_notrace'
   kernel/trace/ftrace.c:6609: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * Test if ftrace is dead or not.

vim +118 kernel/trace/ftrace.c

   117	
 > 118	struct ftrace_ops __rcu *ftrace_ops_list __read_mostly = &ftrace_list_end;
   119	ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub;
   120	struct ftrace_ops global_ops;
   121	
   122	#if ARCH_SUPPORTS_FTRACE_OPS
   123	static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
   124					 struct ftrace_ops *op, struct pt_regs *regs);
   125	#else
   126	/* See comment below, where ftrace_ops_list_func is defined */
   127	static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip);
   128	#define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
   129	#endif
   130	
   131	static inline void ftrace_ops_init(struct ftrace_ops *ops)
   132	{
   133	#ifdef CONFIG_DYNAMIC_FTRACE
   134		if (!(ops->flags & FTRACE_OPS_FL_INITIALIZED)) {
   135			mutex_init(&ops->local_hash.regex_lock);
   136			ops->func_hash = &ops->local_hash;
   137			ops->flags |= FTRACE_OPS_FL_INITIALIZED;
   138		}
   139	#endif
   140	}
   141	
   142	static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip,
   143				    struct ftrace_ops *op, struct pt_regs *regs)
   144	{
   145		struct trace_array *tr = op->private;
   146	
   147		if (tr && this_cpu_read(tr->trace_buffer.data->ftrace_ignore_pid))
   148			return;
   149	
   150		op->saved_func(ip, parent_ip, op, regs);
   151	}
   152	
   153	static void ftrace_sync(struct work_struct *work)
   154	{
   155		/*
   156		 * This function is just a stub to implement a hard force
   157		 * of synchronize_sched(). This requires synchronizing
   158		 * tasks even in userspace and idle.
   159		 *
   160		 * Yes, function tracing is rude.
   161		 */
   162	}
   163	
   164	static void ftrace_sync_ipi(void *data)
   165	{
   166		/* Probably not needed, but do it anyway */
   167		smp_rmb();
   168	}
   169	
   170	#ifdef CONFIG_FUNCTION_GRAPH_TRACER
   171	/* Both enabled by default (can be cleared by function_graph tracer flags */
   172	static bool fgraph_sleep_time = true;
   173	static bool fgraph_graph_time = true;
   174	#endif
   175	
   176	static ftrace_func_t ftrace_ops_get_list_func(struct ftrace_ops *ops)
   177	{
   178		/*
   179		 * If this is a dynamic, RCU, or per CPU ops, or we force list func,
   180		 * then it needs to call the list anyway.
   181		 */
   182		if (ops->flags & (FTRACE_OPS_FL_DYNAMIC | FTRACE_OPS_FL_RCU) ||
   183		    FTRACE_FORCE_LIST_FUNC)
   184			return ftrace_ops_list_func;
   185	
   186		return ftrace_ops_get_func(ops);
   187	}
   188	
   189	static void update_ftrace_function(void)
   190	{
   191		ftrace_func_t func;
   192	
   193		/*
   194		 * Prepare the ftrace_ops that the arch callback will use.
   195		 * If there's only one ftrace_ops registered, the ftrace_ops_list
   196		 * will point to the ops we want.
   197		 */
   198		set_function_trace_op = rcu_dereference_protected(ftrace_ops_list,
   199							lockdep_is_held(&ftrace_lock));
   200	
   201		/* If there's no ftrace_ops registered, just call the stub function */
   202		if (set_function_trace_op == &ftrace_list_end) {
   203			func = ftrace_stub;
   204	
   205		/*
   206		 * If we are at the end of the list and this ops is
   207		 * recursion safe and not dynamic and the arch supports passing ops,
   208		 * then have the mcount trampoline call the function directly.
   209		 */
   210		} else if (rcu_dereference_protected(ftrace_ops_list->next,
   211				lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) {
 > 212			func = ftrace_ops_get_list_func(ftrace_ops_list);
   213	
   214		} else {
   215			/* Just use the default ftrace_ops */
   216			set_function_trace_op = &ftrace_list_end;
   217			func = ftrace_ops_list_func;
   218		}
   219	
   220		update_function_graph_func();
   221	
   222		/* If there's no change, then do nothing more here */
   223		if (ftrace_trace_function == func)
   224			return;
   225	
   226		/*
   227		 * If we are using the list function, it doesn't care
   228		 * about the function_trace_ops.
   229		 */
   230		if (func == ftrace_ops_list_func) {
   231			ftrace_trace_function = func;
   232			/*
   233			 * Don't even bother setting function_trace_ops,
   234			 * it would be racy to do so anyway.
   235			 */
   236			return;
   237		}
   238	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ