• Allen Pais's avatar
    firmware: tee_bnxt: Release TEE shm, session, and context during kexec · 914ab19e
    Allen Pais authored
    Implement a .shutdown hook that will be called during a kexec operation
    so that the TEE shared memory, session, and context that were set up
    during .probe can be properly freed/closed.
    
    Additionally, don't use dma-buf backed shared memory for the
    fw_shm_pool. dma-buf backed shared memory cannot be reliably freed and
    unregistered during a kexec operation even when tee_shm_free() is called
    on the shm from a .shutdown hook. The problem occurs because
    dma_buf_put() calls fput() which then uses task_work_add(), with the
    TWA_RESUME parameter, to queue tee_shm_release() to be called before the
    current task returns to user mode. However, the current task never
    returns to user mode before the kexec completes so the memory is never
    freed nor unregistered.
    
    Use tee_shm_alloc_kernel_buf() to avoid dma-buf backed shared memory
    allocation so that tee_shm_free() can directly call tee_shm_release().
    This will ensure that the shm can be freed and unregistered during a
    kexec operation.
    
    Fixes: 24688095 ("firmware: broadcom: add OP-TEE based BNXT f/w manager")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarAllen Pais <apais@linux.microsoft.com>
    Co-developed-by: default avatarTyler Hicks <tyhicks@linux.microsoft.com>
    Signed-off-by: default avatarTyler Hicks <tyhicks@linux.microsoft.com>
    Reviewed-by: default avatarSumit Garg <sumit.garg@linaro.org>
    Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
    914ab19e
tee_bnxt_fw.c 6.85 KB