|
@@ -610,45 +610,20 @@ void __sock_tx_timestamp(const struct sock *sk, __u8 *tx_flags)
|
|
|
}
|
|
|
EXPORT_SYMBOL(__sock_tx_timestamp);
|
|
|
|
|
|
-static inline int __sock_sendmsg_nosec(struct kiocb *iocb, struct socket *sock,
|
|
|
- struct msghdr *msg, size_t size)
|
|
|
+static inline int sock_sendmsg_nosec(struct socket *sock, struct msghdr *msg,
|
|
|
+ size_t size)
|
|
|
{
|
|
|
- return sock->ops->sendmsg(iocb, sock, msg, size);
|
|
|
+ return sock->ops->sendmsg(sock, msg, size);
|
|
|
}
|
|
|
|
|
|
-static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock,
|
|
|
- struct msghdr *msg, size_t size)
|
|
|
+int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
|
|
|
{
|
|
|
int err = security_socket_sendmsg(sock, msg, size);
|
|
|
|
|
|
- return err ?: __sock_sendmsg_nosec(iocb, sock, msg, size);
|
|
|
-}
|
|
|
-
|
|
|
-static int do_sock_sendmsg(struct socket *sock, struct msghdr *msg,
|
|
|
- size_t size, bool nosec)
|
|
|
-{
|
|
|
- struct kiocb iocb;
|
|
|
- int ret;
|
|
|
-
|
|
|
- init_sync_kiocb(&iocb, NULL);
|
|
|
- ret = nosec ? __sock_sendmsg_nosec(&iocb, sock, msg, size) :
|
|
|
- __sock_sendmsg(&iocb, sock, msg, size);
|
|
|
- if (-EIOCBQUEUED == ret)
|
|
|
- ret = wait_on_sync_kiocb(&iocb);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
|
|
|
-{
|
|
|
- return do_sock_sendmsg(sock, msg, size, false);
|
|
|
+ return err ?: sock_sendmsg_nosec(sock, msg, size);
|
|
|
}
|
|
|
EXPORT_SYMBOL(sock_sendmsg);
|
|
|
|
|
|
-static int sock_sendmsg_nosec(struct socket *sock, struct msghdr *msg, size_t size)
|
|
|
-{
|
|
|
- return do_sock_sendmsg(sock, msg, size, true);
|
|
|
-}
|
|
|
-
|
|
|
int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
|
|
|
struct kvec *vec, size_t num, size_t size)
|
|
|
{
|
|
@@ -744,47 +719,21 @@ void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(__sock_recv_ts_and_drops);
|
|
|
|
|
|
-static inline int __sock_recvmsg_nosec(struct kiocb *iocb, struct socket *sock,
|
|
|
- struct msghdr *msg, size_t size, int flags)
|
|
|
+static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,
|
|
|
+ size_t size, int flags)
|
|
|
{
|
|
|
- return sock->ops->recvmsg(iocb, sock, msg, size, flags);
|
|
|
+ return sock->ops->recvmsg(sock, msg, size, flags);
|
|
|
}
|
|
|
|
|
|
-static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
|
|
- struct msghdr *msg, size_t size, int flags)
|
|
|
+int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
|
|
|
+ int flags)
|
|
|
{
|
|
|
int err = security_socket_recvmsg(sock, msg, size, flags);
|
|
|
|
|
|
- return err ?: __sock_recvmsg_nosec(iocb, sock, msg, size, flags);
|
|
|
-}
|
|
|
-
|
|
|
-int sock_recvmsg(struct socket *sock, struct msghdr *msg,
|
|
|
- size_t size, int flags)
|
|
|
-{
|
|
|
- struct kiocb iocb;
|
|
|
- int ret;
|
|
|
-
|
|
|
- init_sync_kiocb(&iocb, NULL);
|
|
|
- ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
|
|
|
- if (-EIOCBQUEUED == ret)
|
|
|
- ret = wait_on_sync_kiocb(&iocb);
|
|
|
- return ret;
|
|
|
+ return err ?: sock_recvmsg_nosec(sock, msg, size, flags);
|
|
|
}
|
|
|
EXPORT_SYMBOL(sock_recvmsg);
|
|
|
|
|
|
-static int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,
|
|
|
- size_t size, int flags)
|
|
|
-{
|
|
|
- struct kiocb iocb;
|
|
|
- int ret;
|
|
|
-
|
|
|
- init_sync_kiocb(&iocb, NULL);
|
|
|
- ret = __sock_recvmsg_nosec(&iocb, sock, msg, size, flags);
|
|
|
- if (-EIOCBQUEUED == ret)
|
|
|
- ret = wait_on_sync_kiocb(&iocb);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* kernel_recvmsg - Receive a message from a socket (kernel space)
|
|
|
* @sock: The socket to receive the message from
|
|
@@ -861,8 +810,7 @@ static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
|
|
if (iocb->ki_nbytes == 0) /* Match SYS5 behaviour */
|
|
|
return 0;
|
|
|
|
|
|
- res = __sock_recvmsg(iocb, sock, &msg,
|
|
|
- iocb->ki_nbytes, msg.msg_flags);
|
|
|
+ res = sock_recvmsg(sock, &msg, iocb->ki_nbytes, msg.msg_flags);
|
|
|
*to = msg.msg_iter;
|
|
|
return res;
|
|
|
}
|
|
@@ -883,7 +831,7 @@ static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
|
|
if (sock->type == SOCK_SEQPACKET)
|
|
|
msg.msg_flags |= MSG_EOR;
|
|
|
|
|
|
- res = __sock_sendmsg(iocb, sock, &msg, iocb->ki_nbytes);
|
|
|
+ res = sock_sendmsg(sock, &msg, iocb->ki_nbytes);
|
|
|
*from = msg.msg_iter;
|
|
|
return res;
|
|
|
}
|