Re: [PATCH] efi: Make efi_rts_work accessible to efi page fault handler

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

 





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





[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