From: Jens Wiklander <jens.wiklander@linaro.org>
To: Sumit Garg <sumit.garg@linaro.org>
Cc: "Tyler Hicks" <tyhicks@linux.microsoft.com>,
Rijo-john.Thomas@amd.com,
"Allen Pais" <apais@linux.microsoft.com>,
"Peter Huewe" <peterhuewe@gmx.de>,
"Jarkko Sakkinen" <jarkko@kernel.org>,
"Jason Gunthorpe" <jgg@ziepe.ca>,
"Vikas Gupta" <vikas.gupta@broadcom.com>,
"Thirupathaiah Annapureddy" <thiruan@microsoft.com>,
"Pavel Tatashin" <pasha.tatashin@soleen.com>,
"Rafał Miłecki" <zajec5@gmail.com>,
op-tee@lists.trustedfirmware.org,
linux-integrity <linux-integrity@vger.kernel.org>,
bcm-kernel-feedback-list@broadcom.com,
linux-mips@vger.kernel.org,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 5/7] tee: Support shm registration without dma-buf backing
Date: Thu, 10 Jun 2021 09:18:12 +0200 [thread overview]
Message-ID: <20210610071812.GA2753553@jade> (raw)
In-Reply-To: <CAFA6WYOYt2vcQ4ng=Nwu2R7d6=R=DGXQKpQ-+UiENerEtQRKWg@mail.gmail.com>
On Wed, Jun 09, 2021 at 04:22:49PM +0530, Sumit Garg wrote:
> + Rijo
>
> On Wed, 9 Jun 2021 at 11:16, Tyler Hicks <tyhicks@linux.microsoft.com> wrote:
[snip]
>
> > - tee_shm_alloc() performs allocations using contiguous pages
> > from alloc_pages() while tee_shm_register() performs non-contiguous
> > allocations with kcalloc(). I suspect this would be fine but I don't
> > know the secure world side of these things well enough to assess the
> > risk involved with such a change on the kernel side.
> >
>
> I don't think that would make any difference.
Agree.
>
> > I should have mentioned this in the cover letter but my hope was that
> > these minimal changes would be accepted and then additional work could
> > be done to merge tee_shm_alloc() and tee_shm_register() in a way that
> > would allow the caller to request contiguous or non-contiguous pages,
> > fix up the additional issues mentioned above, and then adjust the
> > call sites in ftpm and tee_bnxt_fw as appropriate.
> >
> > I think that's a bigger set of changes because there are several things
> > that still confuse/concern me:
> >
> > - Why does tee_shm_alloc() use TEE_SHM_MAPPED while tee_shm_register()
> > uses TEE_SHM_KERNEL_MAPPED or TEE_SHM_USER_MAPPED? Why do all three
> > exist?
>
> AFAIK, its due the the inherent nature of tee_shm_alloc() and
> tee_shm_register() where tee_shm_alloc() doesn't need to know whether
> its a kernel or user-space memory since it is the one that allocates
> whereas tee_shm_register() need to know that since it has to register
> pre-allocated client memory.
>
> > - Why does tee_shm_register() unconditionally use non-contiguous
> > allocations without ever taking into account whether or not
> > OPTEE_SMC_SEC_CAP_DYNAMIC_SHM was set? It sounds like that's required
> > from my reading of https://optee.readthedocs.io/en/latest/architecture/core.html#noncontiguous-shared-buffers.
>
> Yeah, but do we have platforms in OP-TEE that don't support dynamic
> shared memory? I guess it has become the sane default which is a
> mandatory requirement when it comes to OP-TEE driver in u-boot.
>
> > - Why is TEE_SHM_REGISTER implemented at the TEE driver level when it is
> > specific to OP-TEE? How to better abstract that away?
> >
>
> I would like you to go through Section "3.2.4. Shared Memory" in TEE
> Client API Specification. There are two standard ways for shared
> memory approach with TEE:
>
> 1. A Shared Memory block can either be existing Client Application
> memory (kernel driver in our case) which is subsequently registered
> with the TEE Client API (using tee_shm_register() in our case).
>
> 2. Or memory which is allocated on behalf of the Client Application
> using the TEE
> Client API (using tee_shm_alloc() in our case).
>
> > Let me know if you agree with the more minimal approach that I took for
> > these bug fix series or still feel like tee_shm_register() should be
> > fixed up so that it is usable. Thanks!
>
> From drivers perspective I think the change should be:
>
> tee_shm_alloc()
>
> to
>
> kcalloc()
> tee_shm_register()
I had another approach in mind in "[PATCH 0/7] tee: shared memory updates",
https://lore.kernel.org/lkml/20210609102324.2222332-1-jens.wiklander@linaro.org/
The flags needed by tee_shm_alloc() and tee_shm_register() aren't
very intuitive and in fact only accept quite few combinations. So my
idea was to hide those flags from callers outside of the TEE subsystem
with tee_shm_alloc_kernel_buf().
The approach with tee_shm_register() you suggest above has the drawback
that the TEE driver is forced to be able to handle any kernel memory.
This is OK with OP-TEE and dynamic shared memory enabled, but there are
platforms where dynamic shared memory isn't enabled. In those case must
the memory be allocated from a special pool.
Do you see any problem with instead replacing tee_shm_alloc()
with tee_shm_alloc_kernel_buf()?
Cheers,
Jens
WARNING: multiple messages have this Message-ID (diff)
From: Jens Wiklander <jens.wiklander@linaro.org>
To: op-tee@lists.trustedfirmware.org
Subject: Re: [PATCH v3 5/7] tee: Support shm registration without dma-buf backing
Date: Thu, 10 Jun 2021 09:18:12 +0200 [thread overview]
Message-ID: <20210610071812.GA2753553@jade> (raw)
In-Reply-To: < <CAFA6WYOYt2vcQ4ng=Nwu2R7d6=R=DGXQKpQ-+UiENerEtQRKWg@mail.gmail.com>>
[-- Attachment #1: Type: text/plain, Size: 4048 bytes --]
On Wed, Jun 09, 2021 at 04:22:49PM +0530, Sumit Garg wrote:
> + Rijo
>
> On Wed, 9 Jun 2021 at 11:16, Tyler Hicks <tyhicks@linux.microsoft.com> wrote:
[snip]
>
> > - tee_shm_alloc() performs allocations using contiguous pages
> > from alloc_pages() while tee_shm_register() performs non-contiguous
> > allocations with kcalloc(). I suspect this would be fine but I don't
> > know the secure world side of these things well enough to assess the
> > risk involved with such a change on the kernel side.
> >
>
> I don't think that would make any difference.
Agree.
>
> > I should have mentioned this in the cover letter but my hope was that
> > these minimal changes would be accepted and then additional work could
> > be done to merge tee_shm_alloc() and tee_shm_register() in a way that
> > would allow the caller to request contiguous or non-contiguous pages,
> > fix up the additional issues mentioned above, and then adjust the
> > call sites in ftpm and tee_bnxt_fw as appropriate.
> >
> > I think that's a bigger set of changes because there are several things
> > that still confuse/concern me:
> >
> > - Why does tee_shm_alloc() use TEE_SHM_MAPPED while tee_shm_register()
> > uses TEE_SHM_KERNEL_MAPPED or TEE_SHM_USER_MAPPED? Why do all three
> > exist?
>
> AFAIK, its due the the inherent nature of tee_shm_alloc() and
> tee_shm_register() where tee_shm_alloc() doesn't need to know whether
> its a kernel or user-space memory since it is the one that allocates
> whereas tee_shm_register() need to know that since it has to register
> pre-allocated client memory.
>
> > - Why does tee_shm_register() unconditionally use non-contiguous
> > allocations without ever taking into account whether or not
> > OPTEE_SMC_SEC_CAP_DYNAMIC_SHM was set? It sounds like that's required
> > from my reading of https://optee.readthedocs.io/en/latest/architecture/core.html#noncontiguous-shared-buffers.
>
> Yeah, but do we have platforms in OP-TEE that don't support dynamic
> shared memory? I guess it has become the sane default which is a
> mandatory requirement when it comes to OP-TEE driver in u-boot.
>
> > - Why is TEE_SHM_REGISTER implemented at the TEE driver level when it is
> > specific to OP-TEE? How to better abstract that away?
> >
>
> I would like you to go through Section "3.2.4. Shared Memory" in TEE
> Client API Specification. There are two standard ways for shared
> memory approach with TEE:
>
> 1. A Shared Memory block can either be existing Client Application
> memory (kernel driver in our case) which is subsequently registered
> with the TEE Client API (using tee_shm_register() in our case).
>
> 2. Or memory which is allocated on behalf of the Client Application
> using the TEE
> Client API (using tee_shm_alloc() in our case).
>
> > Let me know if you agree with the more minimal approach that I took for
> > these bug fix series or still feel like tee_shm_register() should be
> > fixed up so that it is usable. Thanks!
>
> From drivers perspective I think the change should be:
>
> tee_shm_alloc()
>
> to
>
> kcalloc()
> tee_shm_register()
I had another approach in mind in "[PATCH 0/7] tee: shared memory updates",
https://lore.kernel.org/lkml/20210609102324.2222332-1-jens.wiklander(a)linaro.org/
The flags needed by tee_shm_alloc() and tee_shm_register() aren't
very intuitive and in fact only accept quite few combinations. So my
idea was to hide those flags from callers outside of the TEE subsystem
with tee_shm_alloc_kernel_buf().
The approach with tee_shm_register() you suggest above has the drawback
that the TEE driver is forced to be able to handle any kernel memory.
This is OK with OP-TEE and dynamic shared memory enabled, but there are
platforms where dynamic shared memory isn't enabled. In those case must
the memory be allocated from a special pool.
Do you see any problem with instead replacing tee_shm_alloc()
with tee_shm_alloc_kernel_buf()?
Cheers,
Jens
next prev parent reply other threads:[~2021-06-10 7:18 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 0:23 [PATCH v3 0/7] tee: Improve support for kexec and kdump Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 1/7] optee: Fix memory leak when failing to register shm pages Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 2/7] optee: Refuse to load the driver under the kdump kernel Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 3/7] optee: fix tee out of memory failure seen during kexec reboot Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 4/7] optee: Clear stale cache entries during initialization Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 5/7] tee: Support shm registration without dma-buf backing Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 4:29 ` Sumit Garg
2021-06-09 4:29 ` Sumit Garg
2021-06-09 5:46 ` Tyler Hicks
2021-06-09 5:46 ` Tyler Hicks
2021-06-09 10:52 ` Sumit Garg
2021-06-09 10:52 ` Sumit Garg
2021-06-09 12:15 ` Jens Wiklander
2021-06-09 12:15 ` Jens Wiklander
2021-06-09 13:42 ` Tyler Hicks
2021-06-09 13:42 ` Tyler Hicks
2021-06-09 13:51 ` Tyler Hicks
2021-06-09 13:51 ` Tyler Hicks
2021-06-10 7:34 ` Jens Wiklander
2021-06-10 7:34 ` Jens Wiklander
2021-06-10 21:00 ` Tyler Hicks
2021-06-10 21:00 ` Tyler Hicks
2021-06-10 7:49 ` Jens Wiklander
2021-06-10 7:49 ` Jens Wiklander
2021-06-10 21:05 ` Tyler Hicks
2021-06-10 21:05 ` Tyler Hicks
2021-06-10 7:40 ` Allen Pais
2021-06-10 7:40 ` Allen Pais
2021-06-10 7:18 ` Jens Wiklander [this message]
2021-06-10 7:18 ` Jens Wiklander
2021-06-10 12:14 ` Sumit Garg
2021-06-10 12:14 ` Sumit Garg
2021-06-09 0:23 ` [PATCH v3 6/7] tpm_ftpm_tee: Free and unregister dynamic shared memory during kexec Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
2021-06-09 0:23 ` [PATCH v3 7/7] firmware: tee_bnxt: Release shm, session, and context " Tyler Hicks
2021-06-09 0:23 ` Tyler Hicks
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210610071812.GA2753553@jade \
--to=jens.wiklander@linaro.org \
--cc=Rijo-john.Thomas@amd.com \
--cc=apais@linux.microsoft.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=jarkko@kernel.org \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=op-tee@lists.trustedfirmware.org \
--cc=pasha.tatashin@soleen.com \
--cc=peterhuewe@gmx.de \
--cc=sumit.garg@linaro.org \
--cc=thiruan@microsoft.com \
--cc=tyhicks@linux.microsoft.com \
--cc=vikas.gupta@broadcom.com \
--cc=zajec5@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.