Re: [bug report]warning about entry_64.S from objtool in v5.4 LTS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

From:   Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
Date:   Mon, 6 Feb 2023 10:39:45 +0100
> On Mon, Feb 06, 2023 at 05:22:54PM +0800, Xinghui Li wrote:
> > Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> 于2023年2月6日周一 13:40写道:
> > 
> > > If you rely on the 5.4.y kernel tree, and you need this speculation
> > > fixes and feel this is a real problem, please provide some backported
> > > patches to resolve the problem.
> > >
> > > It's been reported many times in the past, but no one seems to actually
> > > want to fix this bad enough to send in a patch :(
> > >
> > > Usually people just move to a newer kernel, what is preventing you from
> > > doing that right now?
> > >
> > > thanks,
> > >
> > > greg k-h
> > Thanks for your reply~ I am sorry about reporting the known Issue.
> > I am trying to fix this issue right now. And I met the CFA issue, so I
> > just want to discuss it with the community.
> 
> Is this an actual real problem that you can detect with testing?  Or is
> it just a warning message in the build?

I've just received a related report from a customer and I found the
same commit was the first bad one while investigating.  I've attached
a simple repro below.

After 8afd1c7da2b0 ("x86/speculation: Change FILL_RETURN_BUFFER to
work with objtool"), calling stack_trace_save_tsk_reliable() from
the kernel module below fails with -EINVAL if CONFIG_UNWINDER_ORC=y
and CONFIG_RETPOLINE=y.

I confirmed that this issue does not happen on 5.10 and 5.15 at
least (and told the customer to use either).

Interestingly, after the commit, stack_trace_save_tsk_reliable()
fails but seems to fill the buffer with the correct stack trace.

---8<---
#include <linux/module.h>
#include <linux/kallsyms.h>

typedef int (*func_t)(struct task_struct *tsk,
		      unsigned long *store, unsigned int size);

static __init int buggy_orc_init(void)
{
	unsigned long store[32] = {0};
	func_t func;
	int ret, i;

	func = (func_t)kallsyms_lookup_name("stack_trace_save_tsk_reliable");
	if (!func)
		return -ENOENT;

	ret = func(current, store, ARRAY_SIZE(store));

	for (i = 0; i < ARRAY_SIZE(store); i++)
		printk(KERN_ERR "%px: %pS\n", (void *)store[i], (void *)store[i]);

	return ret > 0 ? 0 : ret;
}

module_init(buggy_orc_init);

MODULE_LICENSE("GPL");
---8<---

---8<---
# insmod buggy_orc.ko
[    8.576683] buggy_orc: loading out-of-tree module taints kernel.
[    8.578414] ffffffff810d1538: stack_trace_save_tsk_reliable+0x78/0xc0
[    8.578414] ffffffffc000405c: buggy_orc_init+0x5c/0x1000 [buggy_orc]
[    8.579066] ffffffff81000b56: do_one_initcall+0x46/0x1f0
[    8.579066] ffffffff810f005c: do_init_module+0x4c/0x240
[    8.579066] ffffffff810f2cbf: __do_sys_finit_module+0xbf/0xe0
[    8.580379] ffffffff81002198: do_syscall_64+0x48/0x110
[    8.580379] ffffffff81c00094: entry_SYSCALL_64_after_hwframe+0x5c/0xc1
[    8.581328] 0000000000000000: 0x0
[    8.581328] 0000000000000000: 0x0
[    8.581328] 0000000000000000: 0x0
[    8.582145] 0000000000000000: 0x0
[    8.582145] 0000000000000000: 0x0
[    8.582145] 0000000000000000: 0x0
[    8.582145] 0000000000000000: 0x0
[    8.583229] 0000000000000000: 0x0
[    8.583229] 0000000000000000: 0x0
[    8.583229] 0000000000000000: 0x0
[    8.584046] 0000000000000000: 0x0
[    8.584046] 0000000000000000: 0x0
[    8.584046] 0000000000000000: 0x0
[    8.584046] 0000000000000000: 0x0
[    8.585130] 0000000000000000: 0x0
[    8.585130] 0000000000000000: 0x0
[    8.585130] 0000000000000000: 0x0
[    8.585130] 0000000000000000: 0x0
[    8.586221] 0000000000000000: 0x0
[    8.586221] 0000000000000000: 0x0
[    8.586221] 0000000000000000: 0x0
[    8.587038] 0000000000000000: 0x0
[    8.587038] 0000000000000000: 0x0
[    8.587038] 0000000000000000: 0x0
[    8.587038] 0000000000000000: 0x0
insmod: ERROR: could not insert module buggy_orc.ko: Invalid parameters
---8<---

Thank you,
Kuniyuki

> 
> > We keep staying in v5.4 because we developed the product base on v5.4
> > 3 years ago.
> > So it is unstable and difficult to update the kernel version.
> 
> That is very odd, why is it hard to update to a new kernel?  What
> happens if 5.4 stops being maintained tomorrow, what are your plans to
> move to a more modern kernel?  Being stuck with an old kernel version
> with no plans to move does not seem like a wise business decision:(
> 
> > I will try to find out a way to fix this issue.
> 
> Great, and we will be glad to review patches.
> 
> thanks,
> 
> greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux