• Tyler Hicks's avatar
    tpm_ftpm_tee: Free and unregister TEE shared memory during kexec · dfb703ad
    Tyler Hicks authored
    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: 09e57483 ("tpm/tpm_ftpm_tee: A driver for firmware TPM running inside TEE")
    Fixes: 1760eb68 ("tpm/tpm_ftpm_tee: add shutdown call back")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarTyler Hicks <tyhicks@linux.microsoft.com>
    Reviewed-by: default avatarSumit Garg <sumit.garg@linaro.org>
    Acked-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
    dfb703ad
tpm_ftpm_tee.c 10.3 KB