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>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231102162835.6263ca7f@gandalf.local.home>
Date:   Thu, 2 Nov 2023 16:28:35 -0400
From:   Steven Rostedt <rostedt@...dmis.org>
To:     John Paul Adrian Glaubitz <glaubitz@...sik.fu-berlin.de>
Cc:     kernel test robot <lkp@...el.com>, oe-kbuild-all@...ts.linux.dev,
        linux-kernel@...r.kernel.org,
        Yoshinori Sato <ysato@...rs.sourceforge.jp>,
        Rich Felker <dalias@...c.org>, linux-sh@...r.kernel.org
Subject: Re: arch/sh/boot/compressed/misc.c:118:6: warning: no previous
 prototype for 'arch_ftrace_ops_list_func'

On Thu, 02 Nov 2023 21:05:29 +0100
John Paul Adrian Glaubitz <glaubitz@...sik.fu-berlin.de> wrote:

> > > All warnings (new ones prefixed by >>):
> > > 
> > >    arch/sh/boot/compressed/misc.c:109:6: warning: no previous prototype for '__stack_chk_fail' [-Wmissing-prototypes]
> > >      109 | void __stack_chk_fail(void)
> > >          |      ^~~~~~~~~~~~~~~~
> > >    arch/sh/boot/compressed/misc.c:115:6: warning: no previous prototype for 'ftrace_stub' [-Wmissing-prototypes]
> > >      115 | void ftrace_stub(void)
> > >          |      ^~~~~~~~~~~  
> > > > > arch/sh/boot/compressed/misc.c:118:6: warning: no previous prototype for 'arch_ftrace_ops_list_func' [-Wmissing-prototypes]    
> > >      118 | void arch_ftrace_ops_list_func(void)
> > >          |      ^~~~~~~~~~~~~~~~~~~~~~~~~  
> > 
> > As the comment states, this is needed only because the linker script
> > vmlinux.lds.h references them, and it will not build without it.
> > 
> > If someone really cares, they could simply add a header to quiet these
> > warnings, but seriously, these functions are just stubs to allow the sh
> > boot portion use the vmlinux.lds.h linker script. These stubs are only for
> > satisfying linker references and are not used. I'm not going to be the one
> > to bother "fixing" it.  
> 
> I have to admit that I don't fully understand what the problem is.
> 
> Is this just a cosmetic issue? I would be willing to fix it in any case.

I'm not sure it really needs to be fixed. But I won't complain if you do.

Anyway, the issue is that arch/sh/boot/compressed/misc.c is not part of the
kernel. It's the code that decompresses the vmlinuz (or whatever sh calls
it). That is, the build will build the kernel (vmlinux) then compress it
and add a program to decompress it (vmlinuz). At least this is what is done
on x86, and I'm assuming it's the same for sh.

The vmlinuz is stored on disk, the boot loader loads it into memory and
executes it. The vmlinuz has the code to decompress the attached vmlinux
into memory and jump to that when its done.

Thus, you have two executables. The kernel and this wrapper program that
decompresses the kernel at start up (and is freed right afterward). This
wrapper code exists in arch/sh/boot (and in arch/x86/boot for x86).

As this code needs to be built just like the kernel, it uses the same
linker script as the kernel (vmlinux.lds.h), which has some references to
vmlinux code. Those include (from the warnings in this "bug"):

   arch/sh/boot/compressed/misc.c:115:6: warning: no previous prototype for 'ftrace_stub' [-Wmissing-prototypes]
     115 | void ftrace_stub(void)
         |      ^~~~~~~~~~~
>> arch/sh/boot/compressed/misc.c:118:6: warning: no previous prototype for 'arch_ftrace_ops_list_func' [-Wmissing-prototypes]
     118 | void arch_ftrace_ops_list_func(void)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~

Which are referenced by include/asm-generic/vmlinux.lds.h, and if you do
not include them, then linking will fail as these will be undefined
references.

Note, that bug also has:

   arch/sh/boot/compressed/misc.c:109:6: warning: no previous prototype for '__stack_chk_fail' [-Wmissing-prototypes]
     109 | void __stack_chk_fail(void)
         |      ^~~~~~~~~~~~~~~~

Which has a reference added by the compiler for stack protection options.

   arch/sh/boot/compressed/misc.c:128:6: warning: no previous prototype for 'decompress_kernel' [-Wmissing-prototypes]
     128 | void decompress_kernel(void)

Which is called by arch/sh/boot/compressed/head_*.S, which is assembly.

None of these really need prototypes, as there's nothing that would use the
prototypes. The two ftrace function stubs do not even add parameters to
match the vmlinux prototype, because they are never called. The other two
functions are either for gcc internal usage or called from assembly, both
which do not care about seeing a prototype either.

If you want to quiet gcc, you can add in arch/sh/boot/compressed, a header
file called "stubs.h" that just has:

#ifndef _STUBS_H
#define _STUBS_H

/* Quiet gcc complaining about these prototypes */

void __stack_chk_fail(void);
void decompress_kernel(void);
void ftrace_stub(void);
void arch_ftrace_ops_list_func(void);

#endif

and include that header.

-- Steve

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ