io_uring/net: combine msghdr copy
Call the compat version from inside of io_msg_copy_hdr() and don't duplicate it in callers. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/25795660f7b31f9273911c99f495d9c2b169ecda.1741362889.git.asml.silence@gmail.com [axboe: fixup msg pointer vs variable braino in io_msg_copy_hdr()] Signed-off-by: Jens Axboe <axboe@kernel.dk>pull/1188/head
parent
835c4bdf95
commit
17523a821d
|
|
@ -287,6 +287,24 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg,
|
|||
struct user_msghdr __user *umsg = sr->umsg;
|
||||
int ret;
|
||||
|
||||
iomsg->msg.msg_name = &iomsg->addr;
|
||||
iomsg->msg.msg_iter.nr_segs = 0;
|
||||
|
||||
if (io_is_compat(req->ctx)) {
|
||||
struct compat_msghdr cmsg;
|
||||
|
||||
ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ddir, save_addr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
memset(msg, 0, sizeof(*msg));
|
||||
msg->msg_namelen = cmsg.msg_namelen;
|
||||
msg->msg_controllen = cmsg.msg_controllen;
|
||||
msg->msg_iov = compat_ptr(cmsg.msg_iov);
|
||||
msg->msg_iovlen = cmsg.msg_iovlen;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = io_copy_msghdr_from_user(msg, umsg);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
|
@ -323,18 +341,6 @@ static int io_sendmsg_copy_hdr(struct io_kiocb *req,
|
|||
struct user_msghdr msg;
|
||||
int ret;
|
||||
|
||||
iomsg->msg.msg_name = &iomsg->addr;
|
||||
iomsg->msg.msg_iter.nr_segs = 0;
|
||||
|
||||
if (io_is_compat(req->ctx)) {
|
||||
struct compat_msghdr cmsg;
|
||||
|
||||
ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_SOURCE,
|
||||
NULL);
|
||||
sr->msg_control = iomsg->msg.msg_control_user;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_SOURCE, NULL);
|
||||
/* save msg_control as sys_sendmsg() overwrites it */
|
||||
sr->msg_control = iomsg->msg.msg_control_user;
|
||||
|
|
@ -710,21 +716,7 @@ static int io_recvmsg_copy_hdr(struct io_kiocb *req,
|
|||
struct user_msghdr msg;
|
||||
int ret;
|
||||
|
||||
iomsg->msg.msg_name = &iomsg->addr;
|
||||
iomsg->msg.msg_iter.nr_segs = 0;
|
||||
|
||||
if (io_is_compat(req->ctx)) {
|
||||
struct compat_msghdr cmsg;
|
||||
|
||||
ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_DEST,
|
||||
&iomsg->uaddr);
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.msg_namelen = cmsg.msg_namelen;
|
||||
msg.msg_controllen = cmsg.msg_controllen;
|
||||
} else {
|
||||
ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST, &iomsg->uaddr);
|
||||
}
|
||||
|
||||
ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST, &iomsg->uaddr);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
return io_recvmsg_mshot_prep(req, iomsg, msg.msg_namelen,
|
||||
|
|
|
|||
Loading…
Reference in New Issue