Skip to content

Commit

Permalink
dma-buf: Fix SET_NAME ioctl uapi
Browse files Browse the repository at this point in the history
The uapi is the same on 32 and 64 bit, but the number isn't. Everyone
who botched this please re-read:

https://www.kernel.org/doc/html/v5.4-preprc-cpu/ioctl/botching-up-ioctls.html

Also, the type argument for the ioctl macros is for the type the void
__user *arg pointer points at, which in this case would be the
variable-sized char[] of a 0 terminated string. So this was botched in
more than just the usual ways.

Cc: Sumit Semwal <[email protected]>
Cc: Chenbo Feng <[email protected]>
Cc: Greg Hackmann <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: Martin Liu <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
Tested-by: Martin Liu <[email protected]>
Reviewed-by: Martin Liu <[email protected]>
Signed-off-by: Sumit Semwal <[email protected]>
  [sumits: updated some checkpatch fixes, corrected author email]
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
danvet-intel authored and sumitsemwal committed Apr 27, 2020
1 parent 6292b8e commit a5bff92
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
3 changes: 2 additions & 1 deletion drivers/dma-buf/dma-buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,8 @@ static long dma_buf_ioctl(struct file *file,

return ret;

case DMA_BUF_SET_NAME:
case DMA_BUF_SET_NAME_A:
case DMA_BUF_SET_NAME_B:
return dma_buf_set_name(dmabuf, (const char __user *)arg);

default:
Expand Down
6 changes: 6 additions & 0 deletions include/uapi/linux/dma-buf.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ struct dma_buf_sync {

#define DMA_BUF_BASE 'b'
#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)

/* 32/64bitness of this uapi was botched in android, there's no difference
* between them in actual uapi, they're just different numbers.
*/
#define DMA_BUF_SET_NAME _IOW(DMA_BUF_BASE, 1, const char *)
#define DMA_BUF_SET_NAME_A _IOW(DMA_BUF_BASE, 1, u32)
#define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, u64)

#endif

0 comments on commit a5bff92

Please sign in to comment.