2021-12-14 02:04:05

by kernel test robot

[permalink] [raw]
Subject: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
# save the config file to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All warnings (new ones prefixed by >>):

>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
--
>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


2021-12-14 17:29:54

by Eric W. Biederman

[permalink] [raw]
Subject: Re: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

kernel test robot <[email protected]> writes:

> tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
> head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
> commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
> config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> reproduce (this is a W=1 build):
> # https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
> git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
> git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
> git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
> # save the config file to linux build tree
> mkdir build_dir
> make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <[email protected]>
>
> All warnings (new ones prefixed by >>):
>
>>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
> --
>>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

I am confused. This change patches objtool to rename
rewind_stack_and_do_exit to rewind_stack_and_make_dead in the list
global_noreturns in tools/objtool/check.c

There is no other change to oops_end other than that renaming.

Did the robot somehow mange to run an old version of objtool while
building and this get this error?

I tried and I am not currently able to reproduce this error. Do you
have any additional pointers on how I might reproduce this?

Eric

2021-12-15 01:35:49

by Chen, Rong A

[permalink] [raw]
Subject: Re: [kbuild-all] Re: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()



On 12/15/21 01:29, Eric W. Biederman wrote:
> kernel test robot <[email protected]> writes:
>
>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
>> head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
>> commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
>> config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
>> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
>> reproduce (this is a W=1 build):
>> # https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
>> git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
>> git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
>> git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
>> # save the config file to linux build tree
>> mkdir build_dir
>> make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/
>>
>> If you fix the issue, kindly add following tag as appropriate
>> Reported-by: kernel test robot <[email protected]>
>>
>> All warnings (new ones prefixed by >>):
>>
>>>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
>> --
>>>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()
> I am confused. This change patches objtool to rename
> rewind_stack_and_do_exit to rewind_stack_and_make_dead in the list
> global_noreturns in tools/objtool/check.c
>
> There is no other change to oops_end other than that renaming.
>
> Did the robot somehow mange to run an old version of objtool while
> building and this get this error?
>
> I tried and I am not currently able to reproduce this error. Do you
> have any additional pointers on how I might reproduce this?

Hi Eric,

The reproduce step in report based on a full build, I can reproduce the
warnings with the below command:

  make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

Best Regards,
Rong Chen

2021-12-15 04:49:24

by Eric W. Biederman

[permalink] [raw]
Subject: Re: [kbuild-all] Re: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

Rong Chen <[email protected]> writes:

> On 12/15/21 01:29, Eric W. Biederman wrote:
>> kernel test robot <[email protected]> writes:
>>
>>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
>>> head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
>>> commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
>>> config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
>>> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
>>> reproduce (this is a W=1 build):
>>> # https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>> git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
>>> git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
>>> git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>> # save the config file to linux build tree
>>> mkdir build_dir
>>> make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/
>>>
>>> If you fix the issue, kindly add following tag as appropriate
>>> Reported-by: kernel test robot <[email protected]>
>>>
>>> All warnings (new ones prefixed by >>):
>>>
>>>>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
>>> --
>>>>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()
>> I am confused. This change patches objtool to rename
>> rewind_stack_and_do_exit to rewind_stack_and_make_dead in the list
>> global_noreturns in tools/objtool/check.c
>>
>> There is no other change to oops_end other than that renaming.
>>
>> Did the robot somehow mange to run an old version of objtool while
>> building and this get this error?
>>
>> I tried and I am not currently able to reproduce this error. Do you
>> have any additional pointers on how I might reproduce this?
>
> Hi Eric,
>
> The reproduce step in report based on a full build, I can reproduce
> the warnings with the below command:
>
>   make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

Any chance you could do "make arch/x86/kernel/dumpstack.s" and send it
to me?

I want to see what code is in your oops_end.

It really does not make sense that simply renaming a function would
trigger this error.

I did a full build (on debian 10 with gcc-8.3.0) and I did not manage to
reproduce this. In a bit I will try with a newer debian and see if I
can get the issue to reproduce. Still it does not make sense to me
that a simple rename would trigger this error.

Eric


2021-12-15 05:22:29

by Chen, Rong A

[permalink] [raw]
Subject: Re: [kbuild-all] Re: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()



On 12/15/21 12:48, Eric W. Biederman wrote:
> Rong Chen <[email protected]> writes:
>
>> On 12/15/21 01:29, Eric W. Biederman wrote:
>>> kernel test robot <[email protected]> writes:
>>>
>>>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
>>>> head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
>>>> commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
>>>> config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
>>>> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
>>>> reproduce (this is a W=1 build):
>>>> # https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>>> git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
>>>> git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
>>>> git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>>> # save the config file to linux build tree
>>>> mkdir build_dir
>>>> make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/
>>>>
>>>> If you fix the issue, kindly add following tag as appropriate
>>>> Reported-by: kernel test robot <[email protected]>
>>>>
>>>> All warnings (new ones prefixed by >>):
>>>>
>>>>>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
>>>> --
>>>>>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()
>>> I am confused. This change patches objtool to rename
>>> rewind_stack_and_do_exit to rewind_stack_and_make_dead in the list
>>> global_noreturns in tools/objtool/check.c
>>>
>>> There is no other change to oops_end other than that renaming.
>>>
>>> Did the robot somehow mange to run an old version of objtool while
>>> building and this get this error?
>>>
>>> I tried and I am not currently able to reproduce this error. Do you
>>> have any additional pointers on how I might reproduce this?
>> Hi Eric,
>>
>> The reproduce step in report based on a full build, I can reproduce
>> the warnings with the below command:
>>
>>   make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
> Any chance you could do "make arch/x86/kernel/dumpstack.s" and send it
> to me?

$ make O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/dumpstack.s
make[1]: Entering directory '/mnt/memdrive/linux/build_dir'
  GEN     Makefile
  CALL    ../scripts/checksyscalls.sh
  CALL    ../scripts/atomic/check-atomics.sh
  DESCEND objtool
  CC      arch/x86/kernel/dumpstack.s
make[1]: Leaving directory '/mnt/memdrive/linux/build_dir'

$ make O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/
make[1]: Entering directory '/mnt/memdrive/linux/build_dir'
  GEN     Makefile
  CALL    ../scripts/checksyscalls.sh
  CALL    ../scripts/atomic/check-atomics.sh
  DESCEND objtool
  CC      arch/x86/kernel/dumpstack.o
arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through
to next function show_opcodes()
  AR      arch/x86/kernel/built-in.a
make[1]: Leaving directory '/mnt/memdrive/linux/build_dir'

Best Regards,
Rong Chen

>
> I want to see what code is in your oops_end.
>
> It really does not make sense that simply renaming a function would
> trigger this error.
>
> I did a full build (on debian 10 with gcc-8.3.0) and I did not manage to
> reproduce this. In a bit I will try with a newer debian and see if I
> can get the issue to reproduce. Still it does not make sense to me
> that a simple rename would trigger this error.
>
> Eric
>


2021-12-15 17:37:18

by Eric W. Biederman

[permalink] [raw]
Subject: Re: [kbuild-all] Re: [ebiederm-user-namespace:signal-for-v5.17 4/12] arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

Rong Chen <[email protected]> writes:

> On 12/15/21 12:48, Eric W. Biederman wrote:
>> Rong Chen <[email protected]> writes:
>>
>>> On 12/15/21 01:29, Eric W. Biederman wrote:
>>>> kernel test robot <[email protected]> writes:
>>>>
>>>>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git signal-for-v5.17
>>>>> head: 6b1248798eb6f6d5285db214299996ecc5dc1e6b
>>>>> commit: 0e25498f8cd43c1b5aa327f373dd094e9a006da7 [4/12] exit: Add and use make_task_dead.
>>>>> config: x86_64-randconfig-a011-20211213 (https://download.01.org/0day-ci/archive/20211214/[email protected]/config)
>>>>> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
>>>>> reproduce (this is a W=1 build):
>>>>> # https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git/commit/?id=0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>>>> git remote add ebiederm-user-namespace https://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git
>>>>> git fetch --no-tags ebiederm-user-namespace signal-for-v5.17
>>>>> git checkout 0e25498f8cd43c1b5aa327f373dd094e9a006da7
>>>>> # save the config file to linux build tree
>>>>> mkdir build_dir
>>>>> make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/ kernel/ lib/kunit/
>>>>>
>>>>> If you fix the issue, kindly add following tag as appropriate
>>>>> Reported-by: kernel test robot <[email protected]>
>>>>>
>>>>> All warnings (new ones prefixed by >>):
>>>>>
>>>>>>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
>>>>> --
>>>>>>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()
>>>> I am confused. This change patches objtool to rename
>>>> rewind_stack_and_do_exit to rewind_stack_and_make_dead in the list
>>>> global_noreturns in tools/objtool/check.c
>>>>
>>>> There is no other change to oops_end other than that renaming.
>>>>
>>>> Did the robot somehow mange to run an old version of objtool while
>>>> building and this get this error?
>>>>
>>>> I tried and I am not currently able to reproduce this error. Do you
>>>> have any additional pointers on how I might reproduce this?
>>> Hi Eric,
>>>
>>> The reproduce step in report based on a full build, I can reproduce
>>> the warnings with the below command:
>>>
>>>   make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
>> Any chance you could do "make arch/x86/kernel/dumpstack.s" and send it
>> to me?
>
> $ make O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/dumpstack.s
> make[1]: Entering directory '/mnt/memdrive/linux/build_dir'
>   GEN     Makefile
>   CALL    ../scripts/checksyscalls.sh
>   CALL    ../scripts/atomic/check-atomics.sh
>   DESCEND objtool
>   CC      arch/x86/kernel/dumpstack.s
> make[1]: Leaving directory '/mnt/memdrive/linux/build_dir'
>
> $ make O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/
> make[1]: Entering directory '/mnt/memdrive/linux/build_dir'
>   GEN     Makefile
>   CALL    ../scripts/checksyscalls.sh
>   CALL    ../scripts/atomic/check-atomics.sh
>   DESCEND objtool
>   CC      arch/x86/kernel/dumpstack.o
> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls
> through to next function show_opcodes()
>   AR      arch/x86/kernel/built-in.a
> make[1]: Leaving directory '/mnt/memdrive/linux/build_dir'

Thanks. What I was actually hoping for was the assembly code of
oops_end so I could understand the objtool error.

I have tracked it down now. I accidentally deleted a comma, which
caused C string concatenation which merged two symbols together,
and caused this warning.

What an annoying typo.

Eric

2021-12-15 17:38:51

by Eric W. Biederman

[permalink] [raw]
Subject: [PATCH] objtool: Add a missing comma to avoid string concatenation


Recently the kbuild robot reported two new errors:

>> lib/kunit/kunit-example-test.o: warning: objtool: .text.unlikely: unexpected end of section
>> arch/x86/kernel/dumpstack.o: warning: objtool: oops_end() falls through to next function show_opcodes()

I don't know why they did not occur in my test setup but after digging
it I realized I had accidentally dropped a comma in
tools/objtool/check.c when I renamed rewind_stack_do_exit to
rewind_stack_and_make_dead.

Add that comma back to fix objtool errors.

Link: https://lkml.kernel.org/r/[email protected]
Fixes: 0e25498f8cd4 ("exit: Add and use make_task_dead.")
Reported-by: kernel test robot <[email protected]>
Signed-off-by: "Eric W. Biederman" <[email protected]>
---

For the record this is my trivial objtool fix.

tools/objtool/check.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 282273a1ffa5..3fc2c57f6124 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -177,7 +177,7 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
"fortify_panic",
"usercopy_abort",
"machine_real_restart",
- "rewind_stack_and_make_dead"
+ "rewind_stack_and_make_dead",
"kunit_try_catch_throw",
"xen_start_kernel",
"cpu_bringup_and_idle",
--
2.29.2