On 2020/3/4 4:04 下午, Greg Kroah-Hartman wrote:
On Wed, Mar 04, 2020 at 03:44:44PM +0800, Wen Yang wrote:
From: Sai Praneeth <sai.praneeth.prakhya@xxxxxxxxx>
[ Upstream commit 9dbbedaa6171247c4c7c40b83f05b200a117c2e0 ]
After the kernel has booted, if any accesses by firmware causes a page
fault, the efi page fault handler would freeze efi_rts_wq and schedules
a new process. To do this, the efi page fault handler needs
efi_rts_work. Hence, make it accessible.
There will be no race conditions in accessing this structure, because
all the calls to efi runtime services are already serialized.
[ Wen: This patch also fixes a memory corruption:
#define efi_queue_work(_rts, _arg1, _arg2, _arg3, _arg4, _arg5)\
({ \
struct efi_runtime_work efi_rts_work; \
…
init_completion(&efi_rts_work.efi_rts_comp); \
INIT_WORK(&efi_rts_work.work, efi_call_rts); \
…
efi_rts_work is on the stack, registering it to workqueue will cause
the following error:
ODEBUG: object (____ptrval____) is on stack (____ptrval____),
but NOT annotated.
------------[ cut here ]------------
WARNING: CPU: 6 PID: 1 at lib/debugobjects.c:368
__debug_object_init+0x218/0x538
Modules linked in:
CPU: 6 PID: 1 Comm: swapper/0 Tainted: G W 4.19.91 #19
…
Call trace:
__debug_object_init+0x218/0x538
debug_object_init+0x20/0x28
__init_work+0x34/0x58
virt_efi_get_time.part.5+0x6c/0x12c
virt_efi_get_time+0x4c/0x58
efi_read_time+0x40/0x9c
__rtc_read_time+0x50/0x118
rtc_read_time+0x60/0x1f0
rtc_hctosys+0x74/0x124
do_one_initcall+0xac/0x3d4
kernel_init_freeable+0x49c/0x59c
kernel_init+0x18/0x110 ]
Tested-by: Bhupesh Sharma <bhsharma@xxxxxxxxxx>
Suggested-by: Matt Fleming <matt@xxxxxxxxxxxxxxxxxxx>
Based-on-code-from: Ricardo Neri <ricardo.neri@xxxxxxxxx>
Signed-off-by: Sai Praneeth Prakhya <sai.praneeth.prakhya@xxxxxxxxx>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>
Fixes: 3eb420e70d87 (“efi: Use a work queue to invoke EFI Runtime Services”)
Signed-off-by: Wen Yang <wenyang@xxxxxxxxxxxxxxxxx>
Cc: Caspar Zhang <caspar@xxxxxxxxxxxxxxxxx>
Cc: Sasha Levin <sashal@xxxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
---
drivers/firmware/efi/runtime-wrappers.c | 53 +++++--------------------
include/linux/efi.h | 36 +++++++++++++++++
2 files changed, 45 insertions(+), 44 deletions(-)
What stable tree(s) do you wish to see this patch applied to?
Thank you very much.
We hope it could be applied to 4.19.
Best wishes,
--
Wen