* [PATCH v3 0/3] udmabuf: misc fixes.
@ 2018-09-12 6:33 Gerd Hoffmann
2018-09-12 6:33 ` [PATCH v3 1/3] udmabuf: add documentation Gerd Hoffmann
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2018-09-12 6:33 UTC (permalink / raw)
To: dri-devel; +Cc: laurent.pinchart, Gerd Hoffmann
v3: pushed first batch of fixes to drm-misc-next.
documentation fix.
two new patches adding sanity checks.
v2: review updates, add three new patches.
Gerd Hoffmann (3):
udmabuf: add documentation
udmabuf: check that __pad is zero
udmabuf: check that flags has no unsupported bits set
include/uapi/linux/udmabuf.h | 51 +++++++++++++++++++++++++++++++++---
drivers/dma-buf/udmabuf.c | 5 ++++
Documentation/driver-api/dma-buf.rst | 8 ++++++
3 files changed, 61 insertions(+), 3 deletions(-)
--
2.9.3
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v3 1/3] udmabuf: add documentation 2018-09-12 6:33 [PATCH v3 0/3] udmabuf: misc fixes Gerd Hoffmann @ 2018-09-12 6:33 ` Gerd Hoffmann 2018-09-12 16:40 ` Randy Dunlap 2018-09-12 6:33 ` [PATCH v3 2/3] udmabuf: check that __pad is zero Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 3/3] udmabuf: check that flags has no unsupported bits set Gerd Hoffmann 2 siblings, 1 reply; 5+ messages in thread From: Gerd Hoffmann @ 2018-09-12 6:33 UTC (permalink / raw) To: dri-devel Cc: laurent.pinchart, daniel, Gerd Hoffmann, Sumit Semwal, Jonathan Corbet, open list:DMA BUFFER SHARING FRAMEWORK, moderated list:DMA BUFFER SHARING FRAMEWORK, open list:DOCUMENTATION, open list Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/uapi/linux/udmabuf.h | 51 +++++++++++++++++++++++++++++++++--- Documentation/driver-api/dma-buf.rst | 8 ++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h index 46b6532ed8..281e2c52f1 100644 --- a/include/uapi/linux/udmabuf.h +++ b/include/uapi/linux/udmabuf.h @@ -5,8 +5,39 @@ #include <linux/types.h> #include <linux/ioctl.h> +/** + * DOC: udmabuf + * + * udmabuf is a device driver which allows userspace to create + * dmabufs. The memory used for these dmabufs must be backed by + * memfd. The memfd must have F_SEAL_SHRINK and it must not have + * F_SEAL_WRITE. + * + * The driver has two ioctls, one to create a dmabuf from a single + * memory block and one to create a dmabuf from a list of memory + * blocks. + * + * UDMABUF_CREATE - _IOW('u', 0x42, udmabuf_create) + * + * UDMABUF_CREATE_LIST - _IOW('u', 0x43, udmabuf_create_list) + */ + +#define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create) +#define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list) + #define UDMABUF_FLAGS_CLOEXEC 0x01 +/** + * struct udmabuf_create - create a dmabuf from a single memory block. + * + * @memfd: The file handle. + * @offset: Start of the buffer (from memfd start). + * Must be page aligned. + * @size: Size of the buffer. Must be rounded to page size. + * + * @flags: + * UDMABUF_FLAGS_CLOEXEC: set CLOEXEC flag for the dmabuf. + */ struct udmabuf_create { __u32 memfd; __u32 flags; @@ -14,6 +45,14 @@ struct udmabuf_create { __u64 size; }; +/** + * struct udmabuf_create_item - one memory block list item. + * + * @memfd: The file handle. + * @offset: Start of the buffer (from memfd start). + * Must be page aligned. + * @size: Size of the buffer. Must be rounded to page size. + */ struct udmabuf_create_item { __u32 memfd; __u32 __pad; @@ -21,13 +60,19 @@ struct udmabuf_create_item { __u64 size; }; +/** + * struct udmabuf_create_list - create a dmabuf from a memory block list. + * + * @count: The number of list elements. + * @list: The memory block list + * + * flags: + * UDMABUF_FLAGS_CLOEXEC: set CLOEXEC flag for the dmabuf. + */ struct udmabuf_create_list { __u32 flags; __u32 count; struct udmabuf_create_item list[]; }; -#define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create) -#define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list) - #endif /* _UAPI_LINUX_UDMABUF_H */ diff --git a/Documentation/driver-api/dma-buf.rst b/Documentation/driver-api/dma-buf.rst index b541e97c7a..1f62c30a14 100644 --- a/Documentation/driver-api/dma-buf.rst +++ b/Documentation/driver-api/dma-buf.rst @@ -166,3 +166,11 @@ DMA Fence uABI/Sync File .. kernel-doc:: include/linux/sync_file.h :internal: +Userspace DMA Buffer driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: include/uapi/linux/udmabuf.h + :doc: udmabuf + +.. kernel-doc:: include/uapi/linux/udmabuf.h + :internal: -- 2.9.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/3] udmabuf: add documentation 2018-09-12 6:33 ` [PATCH v3 1/3] udmabuf: add documentation Gerd Hoffmann @ 2018-09-12 16:40 ` Randy Dunlap 0 siblings, 0 replies; 5+ messages in thread From: Randy Dunlap @ 2018-09-12 16:40 UTC (permalink / raw) To: Gerd Hoffmann, dri-devel Cc: laurent.pinchart, daniel, Sumit Semwal, Jonathan Corbet, open list:DMA BUFFER SHARING FRAMEWORK, moderated list:DMA BUFFER SHARING FRAMEWORK, open list:DOCUMENTATION, open list Hi Gerd, Missed one from yesterday: On 9/11/18 11:33 PM, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > include/uapi/linux/udmabuf.h | 51 +++++++++++++++++++++++++++++++++--- > Documentation/driver-api/dma-buf.rst | 8 ++++++ > 2 files changed, 56 insertions(+), 3 deletions(-) > > diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h > index 46b6532ed8..281e2c52f1 100644 > --- a/include/uapi/linux/udmabuf.h > +++ b/include/uapi/linux/udmabuf.h > @@ -5,8 +5,39 @@ > #include <linux/types.h> > #include <linux/ioctl.h> > > +/** > + * DOC: udmabuf > + * > + * udmabuf is a device driver which allows userspace to create > + * dmabufs. The memory used for these dmabufs must be backed by > + * memfd. The memfd must have F_SEAL_SHRINK and it must not have > + * F_SEAL_WRITE. > + * > + * The driver has two ioctls, one to create a dmabuf from a single > + * memory block and one to create a dmabuf from a list of memory > + * blocks. > + * > + * UDMABUF_CREATE - _IOW('u', 0x42, udmabuf_create) > + * > + * UDMABUF_CREATE_LIST - _IOW('u', 0x43, udmabuf_create_list) > + */ > + > +#define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create) > +#define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list) > + > #define UDMABUF_FLAGS_CLOEXEC 0x01 > > +/** > + * struct udmabuf_create - create a dmabuf from a single memory block. > + * > + * @memfd: The file handle. > + * @offset: Start of the buffer (from memfd start). > + * Must be page aligned. > + * @size: Size of the buffer. Must be rounded to page size. > + * > + * @flags: > + * UDMABUF_FLAGS_CLOEXEC: set CLOEXEC flag for the dmabuf. > + */ > struct udmabuf_create { > __u32 memfd; > __u32 flags; > @@ -14,6 +45,14 @@ struct udmabuf_create { > __u64 size; > }; > > +/** > + * struct udmabuf_create_item - one memory block list item. > + * > + * @memfd: The file handle. > + * @offset: Start of the buffer (from memfd start). > + * Must be page aligned. > + * @size: Size of the buffer. Must be rounded to page size. > + */ > struct udmabuf_create_item { > __u32 memfd; > __u32 __pad; > @@ -21,13 +60,19 @@ struct udmabuf_create_item { > __u64 size; > }; > > +/** > + * struct udmabuf_create_list - create a dmabuf from a memory block list. > + * > + * @count: The number of list elements. > + * @list: The memory block list > + * > + * flags: @flags: > + * UDMABUF_FLAGS_CLOEXEC: set CLOEXEC flag for the dmabuf. > + */ > struct udmabuf_create_list { > __u32 flags; > __u32 count; > struct udmabuf_create_item list[]; > }; -- ~Randy ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 2/3] udmabuf: check that __pad is zero 2018-09-12 6:33 [PATCH v3 0/3] udmabuf: misc fixes Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 1/3] udmabuf: add documentation Gerd Hoffmann @ 2018-09-12 6:33 ` Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 3/3] udmabuf: check that flags has no unsupported bits set Gerd Hoffmann 2 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2018-09-12 6:33 UTC (permalink / raw) To: dri-devel Cc: Gerd Hoffmann, open list, moderated list:DMA BUFFER SHARING FRAMEWORK, laurent.pinchart, open list:DMA BUFFER SHARING FRAMEWORK Reported-by: Yann Droneaud <ydroneaud@opteya.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/dma-buf/udmabuf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 9edabce0b8..964beadd11 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -134,6 +134,8 @@ static long udmabuf_create(const struct udmabuf_create_list *head, pglimit = (size_limit_mb * 1024 * 1024) >> PAGE_SHIFT; for (i = 0; i < head->count; i++) { + if (list[i].__pad) + goto err; if (!IS_ALIGNED(list[i].offset, PAGE_SIZE)) goto err; if (!IS_ALIGNED(list[i].size, PAGE_SIZE)) -- 2.9.3 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 3/3] udmabuf: check that flags has no unsupported bits set 2018-09-12 6:33 [PATCH v3 0/3] udmabuf: misc fixes Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 1/3] udmabuf: add documentation Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 2/3] udmabuf: check that __pad is zero Gerd Hoffmann @ 2018-09-12 6:33 ` Gerd Hoffmann 2 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2018-09-12 6:33 UTC (permalink / raw) To: dri-devel Cc: laurent.pinchart, daniel, Gerd Hoffmann, Sumit Semwal, open list:DMA BUFFER SHARING FRAMEWORK, moderated list:DMA BUFFER SHARING FRAMEWORK, open list Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reported-by: Yann Droneaud <ydroneaud@opteya.com> --- drivers/dma-buf/udmabuf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 964beadd11..acd97670c5 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -128,6 +128,9 @@ static long udmabuf_create(const struct udmabuf_create_list *head, int seals, ret = -EINVAL; u32 i, flags; + if (head->flags & ~UDMABUF_FLAGS_CLOEXEC) + return -EINVAL; + ubuf = kzalloc(sizeof(*ubuf), GFP_KERNEL); if (!ubuf) return -ENOMEM; -- 2.9.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-09-12 16:40 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-09-12 6:33 [PATCH v3 0/3] udmabuf: misc fixes Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 1/3] udmabuf: add documentation Gerd Hoffmann 2018-09-12 16:40 ` Randy Dunlap 2018-09-12 6:33 ` [PATCH v3 2/3] udmabuf: check that __pad is zero Gerd Hoffmann 2018-09-12 6:33 ` [PATCH v3 3/3] udmabuf: check that flags has no unsupported bits set Gerd Hoffmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox