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  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 5 Oct 2021 15:08:07 -0400
From:   Steven Rostedt <rostedt@...dmis.org>
To:     "Gustavo A. R. Silva" <gustavoars@...nel.org>
Cc:     Ingo Molnar <mingo@...hat.com>,
        Daniel Bristot de Oliveira <bristot@...nel.org>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH][next] ftrace: Fix -Wcast-function-type warnings on
 powerpc64

On Tue, 5 Oct 2021 11:50:27 -0500
"Gustavo A. R. Silva" <gustavoars@...nel.org> wrote:

> On Tue, Oct 05, 2021 at 12:35:22PM -0400, Steven Rostedt wrote:
> > On Tue, 5 Oct 2021 11:18:12 -0500
> > "Gustavo A. R. Silva" <gustavoars@...nel.org> wrote:
> >   
> > > On Tue, Oct 05, 2021 at 11:17:14AM -0400, Steven Rostedt wrote:  
> > > > On Tue, 5 Oct 2021 00:39:22 -0500
> > > > "Gustavo A. R. Silva" <gustavoars@...nel.org> wrote:
> > > >     
> > > > > In order to make sure new function cast mismatches are not introduced
> > > > > in the kernel (to avoid tripping CFI checking), the kernel should be
> > > > > globally built with -Wcast-function-type.
> > > > > 
> > > > > So, fix the following -Wcast-function-type warnings on powerpc64
> > > > > (ppc64_defconfig):    
> > > > 
> > > > I think I'll go back and add my linker magic.
> > > > 
> > > >   https://lore.kernel.org/all/20200617165616.52241bde@oasis.local.home/
> > > > 
> > > > I'll clean it up a bit too. I'll have a patch in a bit.    
> > > 
> > > Awesome. :)
> > > 
> > > Thanks
> > > --  
> > 
> > Does this fix it for you?  
> 
> Nop; there are still some warnings (ppc64_defconfig):

Sure you applied it?

Because I tested it on powerpc64 with the defconfig, and without the patch,
I get the error, but with it, I don't.

> 
> kernel/trace/ftrace.c: In function ‘ftrace_ops_get_list_func’:
> kernel/trace/ftrace.c:171:10: error: returning ‘void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct ftrace_regs *)’ from a function with incompatible return type ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int,  long unsigned int)’} [-Werror=incompatible-pointer-types]
>   171 |   return ftrace_ops_list_func;
>       |          ^~~~~~~~~~~~~~~~~~~~

Or did you not remove your patch first?

Because, the above error shows:

    return type ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int,  long unsigned int)’

But my code has:

  typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip,
			      struct ftrace_ops *op, struct ftrace_regs *fregs);


Which is not the same type, but your patch has:

+#if ARCH_SUPPORTS_FTRACE_OPS
 typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip,
 			      struct ftrace_ops *op, struct ftrace_regs *fregs);
+#else
+typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
+#endif
+
+typedef void (*ftrace_func_base_t)(void);
+#define CAST_FTRACE_FUNC(f) ((ftrace_func_t)((ftrace_func_base_t)(f)))

Which redefines ftrace_func_t.

-- Steve


> kernel/trace/ftrace.c: In function ‘update_ftrace_function’:
> kernel/trace/ftrace.c:204:8: error: assignment to ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int,  long unsigned int)’} from incompatible pointer type ‘void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct ftrace_regs *)’ [-Werror=incompatible-pointer-types]
>   204 |   func = ftrace_ops_list_func;
>       |        ^
> kernel/trace/ftrace.c:217:11: warning: comparison of distinct pointer types lacks a cast
>   217 |  if (func == ftrace_ops_list_func) {
>       |           ^~
> kernel/trace/ftrace.c: In function ‘ftrace_modify_all_code’:
> kernel/trace/ftrace.c:2695:35: error: passing argument 1 of ‘ftrace_update_ftrace_func’ from incompatible pointer type [-Werror=incompatible-pointer-types]
>  2695 |   err = ftrace_update_ftrace_func(ftrace_ops_list_func);
>       |                                   ^~~~~~~~~~~~~~~~~~~~
>       |                                   |
>       |                                   void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct ftrace_regs *)
> In file included from kernel/trace/ftrace.c:29:
> ./include/linux/ftrace.h:585:52: note: expected ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int,  long unsigned int)’} but argument is of type ‘void (*)(long unsigned int,  long unsigned int,  struct ftrace_ops *, struct ftrace_regs *)’
>   585 | extern int ftrace_update_ftrace_func(ftrace_func_t func);
>       |                                      ~~~~~~~~~~~~~~^~~~
> kernel/trace/ftrace.c:2705:38: warning: comparison of distinct pointer types lacks a cast
>  2705 |  if (update && ftrace_trace_function != ftrace_ops_list_func) {
>       |                                      ^~
> 
> --
> Gustavo

Powered by blists - more mailing lists