• Jens Wiklander's avatar
    optee: use driver internal tee_context for some rpc · aceeafef
    Jens Wiklander authored
    Adds a driver private tee_context by moving the tee_context in struct
    optee_notif to struct optee. This tee_context was previously used when
    doing internal calls to secure world to deliver notification.
    
    The new driver internal tee_context is now also when allocating driver
    private shared memory. This decouples the shared memory object from its
    original tee_context. This is needed when the life time of such a memory
    allocation outlives the client tee_context.
    
    This patch fixes the problem described below:
    
    The addition of a shutdown hook by commit f25889f9 ("optee: fix tee out
    of memory failure seen during kexec reboot") introduced a kernel shutdown
    regression that can be triggered after running the OP-TEE xtest suites.
    
    Once the shutdown hook is called it is not possible to communicate any more
    with the supplicant process because the system is not scheduling task any
    longer. Thus if the optee driver shutdown path receives a supplicant RPC
    request from the OP-TEE we will deadlock the kernel's shutdown.
    
    Fixes: f25889f9 ("optee: fix tee out of memory failure seen during kexec reboot")
    Fixes: 217e0250 ("tee: use reference counting for tee_context")
    Reported-by: default avatarLars Persson <larper@axis.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarSumit Garg <sumit.garg@linaro.org>
    Signed-off-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
    aceeafef
core.c 4.83 KB