From: Gerd Hoffmann <kraxel@redhat.com> To: dri-devel@lists.freedesktop.org Cc: laurent.pinchart@ideasonboard.com, daniel@ffwll.ch, Gerd Hoffmann <kraxel@redhat.com>, Sumit Semwal <sumit.semwal@linaro.org>, linux-media@vger.kernel.org (open list:DMA BUFFER SHARING FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 07/13] udmabuf: rework limits Date: Tue, 11 Sep 2018 15:42:10 +0200 [thread overview] Message-ID: <20180911134216.9760-8-kraxel@redhat.com> (raw) In-Reply-To: <20180911134216.9760-1-kraxel@redhat.com> Create variable for the list length limit. Serves as documentation, also allows to make it a module parameter if needed. Also add a total size limit. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/dma-buf/udmabuf.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 4167da8141..a01fcf6a66 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -12,6 +12,9 @@ #include <linux/slab.h> #include <linux/udmabuf.h> +static const u32 list_limit = 1024; /* udmabuf_create_list->count limit */ +static const size_t size_limit_mb = 64; /* total dmabuf size, in megabytes */ + struct udmabuf { pgoff_t pagecount; struct page **pages; @@ -123,7 +126,7 @@ static long udmabuf_create(const struct udmabuf_create_list *head, struct file *memfd = NULL; struct udmabuf *ubuf; struct dma_buf *buf; - pgoff_t pgoff, pgcnt, pgidx, pgbuf; + pgoff_t pgoff, pgcnt, pgidx, pgbuf, pglimit; struct page *page; int seals, ret = -EINVAL; u32 i, flags; @@ -132,12 +135,15 @@ static long udmabuf_create(const struct udmabuf_create_list *head, if (!ubuf) return -ENOMEM; + pglimit = (size_limit_mb * 1024 * 1024) >> PAGE_SHIFT; for (i = 0; i < head->count; i++) { if (!IS_ALIGNED(list[i].offset, PAGE_SIZE)) goto err_free_ubuf; if (!IS_ALIGNED(list[i].size, PAGE_SIZE)) goto err_free_ubuf; ubuf->pagecount += list[i].size >> PAGE_SHIFT; + if (ubuf->pagecount > pglimit) + goto err_free_ubuf; } ubuf->pages = kmalloc_array(ubuf->pagecount, sizeof(struct page *), GFP_KERNEL); @@ -227,7 +233,7 @@ static long udmabuf_ioctl_create_list(struct file *filp, unsigned long arg) if (copy_from_user(&head, (void __user *)arg, sizeof(head))) return -EFAULT; - if (head.count > 1024) + if (head.count > list_limit) return -EINVAL; lsize = sizeof(struct udmabuf_create_item) * head.count; list = memdup_user((void __user *)(arg + sizeof(head)), lsize); -- 2.9.3
next prev parent reply other threads:[~2018-09-11 13:43 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <20180911134216.9760-1-kraxel@redhat.com> 2018-09-11 13:42 ` [PATCH v2 01/13] udmabuf: sort headers, drop uapi/ path prefix Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 02/13] udmabuf: improve map_udmabuf error handling Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 03/13] udmabuf: use pgoff_t for pagecount Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 04/13] udmabuf: constify udmabuf_ops Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 05/13] udmabuf: constify udmabuf_create args Gerd Hoffmann 2018-09-11 14:53 ` Laurent Pinchart 2018-09-11 13:42 ` [PATCH v2 06/13] udmabuf: add MEMFD_CREATE dependency Gerd Hoffmann 2018-09-11 13:42 ` Gerd Hoffmann [this message] 2018-09-11 13:42 ` [PATCH v2 08/13] udmabuf: improve udmabuf_create error handling Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 09/13] udmabuf: use EBADFD in case we didn't got a memfd Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 10/13] udmabuf: use ENOTTY for invalid ioctls Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 11/13] udmabuf: drop WARN_ON() check Gerd Hoffmann 2018-09-11 15:07 ` Laurent Pinchart 2018-09-12 6:10 ` Gerd Hoffmann 2018-09-11 13:42 ` [PATCH v2 12/13] udmabuf: use sizeof(variable) instead of sizeof(type) Gerd Hoffmann 2018-09-11 15:07 ` Laurent Pinchart 2018-09-11 13:42 ` [PATCH v2 13/13] udmabuf: add documentation Gerd Hoffmann 2018-09-11 15:40 ` Randy Dunlap
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=20180911134216.9760-8-kraxel@redhat.com \ --to=kraxel@redhat.com \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linaro-mm-sig@lists.linaro.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=sumit.semwal@linaro.org \ --subject='Re: [PATCH v2 07/13] udmabuf: rework limits' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).