Skip to content

Commit 681fda8

Browse files
isilenceaxboe
authored andcommitted
io_uring: fix recvmsg memory leak with buffer selection
io_recvmsg() doesn't free memory allocated for struct io_buffer. This can causes a leak when used with automatic buffer selection. Signed-off-by: Pavel Begunkov <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent 16d5980 commit 681fda8

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

fs/io_uring.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3845,10 +3845,16 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock)
38453845

38463846
ret = __sys_recvmsg_sock(sock, &kmsg->msg, req->sr_msg.msg,
38473847
kmsg->uaddr, flags);
3848-
if (force_nonblock && ret == -EAGAIN)
3849-
return io_setup_async_msg(req, kmsg);
3848+
if (force_nonblock && ret == -EAGAIN) {
3849+
ret = io_setup_async_msg(req, kmsg);
3850+
if (ret != -EAGAIN)
3851+
kfree(kbuf);
3852+
return ret;
3853+
}
38503854
if (ret == -ERESTARTSYS)
38513855
ret = -EINTR;
3856+
if (kbuf)
3857+
kfree(kbuf);
38523858
}
38533859

38543860
if (kmsg && kmsg->iov != kmsg->fast_iov)

0 commit comments

Comments
 (0)