<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Am 27.06.24 um 16:40 schrieb <a class="moz-txt-link-abbreviated" href="mailto:mripard@kernel.org">mripard@kernel.org</a>:<br>
    <blockquote type="cite" cite="mid:20240627-impetuous-aboriginal-cougar-cdcbbf@houat">[SNIP]<span style="white-space: pre-wrap">
</span>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <blockquote type="cite">
                <pre class="moz-quote-pre" wrap=""></pre>
                <blockquote type="cite">
                  <pre class="moz-quote-pre" wrap="">Why can't you get this information from userspace?
</pre>
                </blockquote>
              </blockquote>
              <pre class="moz-quote-pre" wrap="">Same reason amd and i915/xe also pass this around internally in the
</pre>
            </blockquote>
            <pre class="moz-quote-pre" wrap="">kernel, it's just that for those gpus the render and kms node are the
same
driver so this is easy.

</pre>
          </blockquote>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">
The reason I ask is that encryption here looks just like another parameter
for the buffer, e.g. like format, stride, tilling etc..

So instead of this during buffer import:

mtk_gem->secure = (!strncmp(attach->dmabuf->exp_name, "restricted", 10));
mtk_gem->dma_addr = sg_dma_address(sg->sgl);
mtk_gem->size = attach->dmabuf->size;
mtk_gem->sg = sg;

You can trivially say during use hey this buffer is encrypted.

At least that's my 10 mile high view, maybe I'm missing some extensive key
exchange or something like that.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
That doesn't work in all cases, unfortunately.

If you're doing secure video playback, the firmware is typically in
charge of the frame decryption/decoding, and you'd get dma-buf back that
aren't accessible by the CPU (or at least, not at the execution level
Linux runs with).</pre>
    </blockquote>
    <br>
    Yeah, that's perfectly fine. At least the AMD encryption solution
    works exactly like that as well.<span style="white-space: pre-wrap">


</span>
    <blockquote type="cite" cite="mid:20240627-impetuous-aboriginal-cougar-cdcbbf@houat">
      <pre class="moz-quote-pre" wrap="">
So nobody can map that buffer, and the firmware driver is the one who
knows that this buffer cannot be accessed by anyone.</pre>
    </blockquote>
    <br>
    On most hw I know you can actually map that buffer, it's just that
    the CPU sees only garbage in it because you don't have the necessary
    decryption keys around.<br>
    <br>
    <blockquote type="cite" cite="mid:20240627-impetuous-aboriginal-cougar-cdcbbf@houat">
      <pre class="moz-quote-pre" wrap="">Putting this on the userspace to know would be pretty weird, and wouldn't solve the case
where the kernel would try to map it.</pre>
    </blockquote>
    <br>
    But that's exactly how all other implementations work as far as I
    know. I mean what do you do if the kernel maps the encrypted buffer?<br>
    <br>
    On AMD we also block userspace and kernel CPU accesses, but that is
    only done to make it easier to find bugs not for correctness.<br>
    <br>
    And userspace absolutely needs to be aware that a buffer is
    encrypted, cause otherwise it could potentially try to access it
    with the CPU.<br>
    <br>
    Regards,<br>
    Christian.<br>
    <br>
    <blockquote type="cite" cite="mid:20240627-impetuous-aboriginal-cougar-cdcbbf@houat">
      <pre class="moz-quote-pre" wrap="">

Maxime
</pre>
    </blockquote>
    <br>
  </body>
</html>