Message ID | 20240516122102.16379-4-yunfei.dong@mediatek.com |
---|---|
State | New |
Headers | show |
Series | media: mediatek: add driver to support secure video decoder | expand |
On Thu, May 16, 2024 at 08:20:41PM +0800, Yunfei Dong wrote: > From: Jeffrey Kardatzke <jkardatzke@google.com> > > Verfies in the dmabuf implementations that if the restricted memory > flag is set for a queue that the dmabuf submitted to the queue is > unmappable. > > Signed-off-by: Jeffrey Kardatzke <jkardatzke@google.com> > Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> > --- > drivers/media/common/videobuf2/videobuf2-dma-contig.c | 8 ++++++++ > drivers/media/common/videobuf2/videobuf2-dma-sg.c | 8 ++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > index 3d4fd4ef5310..35a3c1c01eae 100644 > --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c > +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > @@ -710,6 +710,14 @@ static int vb2_dc_map_dmabuf(void *mem_priv) > return -EINVAL; > } > > + /* Verify the dmabuf is restricted if we are in restricted mode, this is done > + * by validating there is no page entry for the dmabuf. > + */ Kernel coding style [1] defines multi-line comments to start with an empty line. [1] https://www.kernel.org/doc/html/latest/process/coding-style.html#commenting > + if (buf->vb->vb2_queue->restricted_mem && !sg_dma_is_restricted(sgt->sgl)) { > + pr_err("restricted queue requires restricted dma_buf"); > + return -EINVAL; This would leak the mapping. We need to unmap the attachment here. > + } > + > /* checking if dmabuf is big enough to store contiguous chunk */ > contig_size = vb2_dc_get_contiguous_size(sgt); > if (contig_size < buf->size) { > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > index 6975a71d740f..2399a9c074ba 100644 > --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c > +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > @@ -570,6 +570,14 @@ static int vb2_dma_sg_map_dmabuf(void *mem_priv) > return -EINVAL; > } > > + /* Verify the dmabuf is restricted if we are in restricted mode, this is done > + * by validating there is no page entry for the dmabuf. > + */ Ditto. > + if (buf->vb->vb2_queue->restricted_mem && !sg_dma_is_restricted(sgt->sgl)) { > + pr_err("restricted queue requires restricted dma_buf"); > + return -EINVAL; Ditto. Best regards, Tomasz > + } > + > buf->dma_sgt = sgt; > buf->vaddr = NULL; > > -- > 2.25.1 >
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c index 3d4fd4ef5310..35a3c1c01eae 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c @@ -710,6 +710,14 @@ static int vb2_dc_map_dmabuf(void *mem_priv) return -EINVAL; } + /* Verify the dmabuf is restricted if we are in restricted mode, this is done + * by validating there is no page entry for the dmabuf. + */ + if (buf->vb->vb2_queue->restricted_mem && !sg_dma_is_restricted(sgt->sgl)) { + pr_err("restricted queue requires restricted dma_buf"); + return -EINVAL; + } + /* checking if dmabuf is big enough to store contiguous chunk */ contig_size = vb2_dc_get_contiguous_size(sgt); if (contig_size < buf->size) { diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c index 6975a71d740f..2399a9c074ba 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c @@ -570,6 +570,14 @@ static int vb2_dma_sg_map_dmabuf(void *mem_priv) return -EINVAL; } + /* Verify the dmabuf is restricted if we are in restricted mode, this is done + * by validating there is no page entry for the dmabuf. + */ + if (buf->vb->vb2_queue->restricted_mem && !sg_dma_is_restricted(sgt->sgl)) { + pr_err("restricted queue requires restricted dma_buf"); + return -EINVAL; + } + buf->dma_sgt = sgt; buf->vaddr = NULL;