Re: dma_heap and protected memory
Jens Wiklander <[email protected]> Wed, 20 May 2026 13:18:10 +0200
| Newsgroups | org.trustedfirmware.lists.op-tee |
|---|---|
| Message-ID | <CAHUa44EepbbkhnxkkqfUXWoPROeM85Ziw6NYhzjRtFXD+C0iuQ@mail.gmail.com> |
Hi Amir, On Wed, May 20, 2026 at 9:10 AM Amirreza Zarrabi <[email protected]> wrote: > > Hi Jens, > > On 5/20/2026 1:29 AM, Jens Wiklander wrote: > > Hi Amir, > > > > On Fri, May 15, 2026 at 5:10 AM Amirreza Zarrabi > > <[email protected]> wrote: > >> > >> Hi Jens, > >> > >> Recently protected heap support has been added for the TEE subsystem. > >> This allows dma-heaps to be managed by the TEE subsystem itself. > >> > >> For standard, non-protected heaps such as the system heap or CMA heap, > >> I am trying to understand the expected usage model. One possible workaround > >> appears to be to mmap the dma-buf fd in userspace, then register the > >> resulting userspace VA with the TEE subsystem to obtain a TEE shared-memory > >> object, for example: > >> > >> fd = dma_heap_alloc(...); > >> va = mmap(fd, ...); > >> > >> shm_fd = tee_shm_register(va, size); > >> tee_invoke(shm_fd); > >> > >> close(shm_fd); > >> munmap(va, size); > >> close(fd); > >> > >> This seems reasonable when the lifetime of the registered shared memory > >> is limited to a single invocation or callback. However, I am concerned about > >> cases (multiple exits in qcomtee) where the TEE side needs to retain access > >> to the memory after the ioctl/invocation returns. > >> > >> In that case, registering only the userspace VA does not appear > >> to keep the underlying dma-buf object alive. The TEE core pins the pages, > >> but it does not hold a dma-buf reference or attachment. If userspace later > >> closes the dma-buf fd and unmaps the VA, the dma-buf exporter may consider > >> the buffer released, while the TEE side may still have the memory registered. > > > > That's surprising. Are the pages returned to the heap also? If so, > > there's an issue. > > > > Yes, that is my understanding. For dma-heaps, after the final dma-buf > reference is released, the exporter is free to return the backing pages to > the heap. This should be a generic problem. Surely there must be something to stop the exporter from returning the pages. > > >> > >> Is there a recommended way to use standard heaps, such as the system or > >> CMA dma-buf heaps, when the sharing lifetime is longer than a single TEE call? > > > > No, I think you're pioneering this. > > > > ;-). > > >> > >> Would it make sense to extend tee_shm_register_fd() so that it can handle > >> dma-buf fds from regular dma-heaps as well, not only dma-bufs managed by > >> the TEE subsystem? That would allow the TEE core or backend driver to keep > >> the dma-buf reference for the lifetime of the TEE shared-memory object. > > > > It seems like a workaround, since I assume that the purpose is to > > share memory between the user space process and the TEE. I think this > > might be a last resort or something. > > > > Yes, I agree. > > The specific case I am looking at is qcomtee without an FF-A backend. In > that configuration, qcomtee currently requires physically contiguous shared > memory, so registering anonymous userspace memory is not very practical. Agreed. > > Today the qcomtee shared-memory pool is implemented on top of > tee_dyn_shm_alloc_helper(), which allocates memory from the normal page > allocator. This makes larger allocations subject to the usual high-order > allocation / MAX_ORDER limitations. > > One option would be to move, or extend, the qcomtee shared-memory pool to use > a cma backed allocation path. That would address the default allocation case > through TEE_IOC_SHM_ALLOC (without restriction). CMA maintainers might have a view on that. > > However, I am wondering whether it is better to also allow userspace to choose > the source of the memory, for example when the memory must come from a specific > carveout or from a cma dma-heap selected by the client. > > If you feel it is not a correct direction, I totally understand considering > it is workaround for a limitation. It has an advantage by moving the problem to user-space. I can't say for sure what I think of it before I've seen the needed changes. tee_ioctl_shm_register_fd() or one of the helper functions will need some updates to handle generic DMA-bufs from elsewhere. Cheers, Jens