It needs call dma_buf_put() to put dmabuf in case of getting fd failed. Signed-off-by: Xianting Tian <xianting.tian@xxxxxxxxxxxxxxxxx> --- drivers/dma-buf/udmabuf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index c57a609db..d77f96995 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -274,8 +274,11 @@ static long udmabuf_create(struct miscdevice *device, flags = 0; if (head->flags & UDMABUF_FLAGS_CLOEXEC) flags |= O_CLOEXEC; - return dma_buf_fd(buf, flags); + ret = dma_buf_fd(buf, flags); + if (ret < 0) { + dma_buf_put(buf); + return ret; err: while (pgbuf > 0) put_page(ubuf->pages[--pgbuf]); -- 2.17.1