[PATCH] tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT

Subsystems: networking [general], networking [tls], the rest

STALE1905d

4 messages, 3 authors, 2021-05-18 · open the first message on its own page

[PATCH] tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT

From: Jim Ma <hidden>
Date: 2021-05-14 03:11:18

In tls_sw_splice_read, checkout MSG_* is inappropriate, should use
SPLICE_*, update tls_wait_data to accept nonblock arguments instead
of flags for recvmsg and splice.

Signed-off-by: Jim Ma <redacted>
---
 net/tls/tls_sw.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index 1dcb34dfd56b..694de024d0ee 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -37,6 +37,7 @@
 
 #include <linux/sched/signal.h>
 #include <linux/module.h>
+#include <linux/splice.h>
 #include <crypto/aead.h>
 
 #include <net/strparser.h>
@@ -1281,7 +1282,7 @@ int tls_sw_sendpage(struct sock *sk, struct page *page,
 }
 
 static struct sk_buff *tls_wait_data(struct sock *sk, struct sk_psock *psock,
-				     int flags, long timeo, int *err)
+				     bool nonblock, long timeo, int *err)
 {
 	struct tls_context *tls_ctx = tls_get_ctx(sk);
 	struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);
@@ -1306,7 +1307,7 @@ static struct sk_buff *tls_wait_data(struct sock *sk, struct sk_psock *psock,
 		if (sock_flag(sk, SOCK_DONE))
 			return NULL;
 
-		if ((flags & MSG_DONTWAIT) || !timeo) {
+		if (nonblock || !timeo) {
 			*err = -EAGAIN;
 			return NULL;
 		}
@@ -1786,7 +1787,7 @@ int tls_sw_recvmsg(struct sock *sk,
 		bool async_capable;
 		bool async = false;
 
-		skb = tls_wait_data(sk, psock, flags, timeo, &err);
+		skb = tls_wait_data(sk, psock, flags & MSG_DONTWAIT, timeo, &err);
 		if (!skb) {
 			if (psock) {
 				int ret = sk_msg_recvmsg(sk, psock, msg, len,
@@ -1990,9 +1991,9 @@ ssize_t tls_sw_splice_read(struct socket *sock,  loff_t *ppos,
 
 	lock_sock(sk);
 
-	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
+	timeo = sock_rcvtimeo(sk, flags & SPLICE_F_NONBLOCK);
 
-	skb = tls_wait_data(sk, NULL, flags, timeo, &err);
+	skb = tls_wait_data(sk, NULL, flags & SPLICE_F_NONBLOCK, timeo, &err);
 	if (!skb)
 		goto splice_read_end;
 
-- 
2.31.1

Re: [PATCH] tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-05-14 19:27:53

On Fri, 14 May 2021 11:11:02 +0800 Jim Ma wrote:
In tls_sw_splice_read, checkout MSG_* is inappropriate, should use
SPLICE_*, update tls_wait_data to accept nonblock arguments instead
of flags for recvmsg and splice.

Signed-off-by: Jim Ma <redacted>
Fixes: c46234ebb4d1 ("tls: RX path for ktls")

right?

Re: [PATCH] tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT

From: patchwork-bot+netdevbpf@kernel.org
Date: 2021-05-14 22:10:16

Hello:

This patch was applied to netdev/net.git (refs/heads/master):

On Fri, 14 May 2021 11:11:02 +0800 you wrote:
In tls_sw_splice_read, checkout MSG_* is inappropriate, should use
SPLICE_*, update tls_wait_data to accept nonblock arguments instead
of flags for recvmsg and splice.

Signed-off-by: Jim Ma <redacted>
---
 net/tls/tls_sw.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
Here is the summary with links:
  - tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT
    https://git.kernel.org/netdev/net/c/974271e5ed45

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html

Re: [PATCH] tls splice: check SPLICE_F_NONBLOCK instead of MSG_DONTWAIT

From: Jim Ma <hidden>
Date: 2021-05-18 06:17:21

Thanks for reminder.
I'm sure that, fix patch fixes: c46234ebb4d1 ("tls: RX path for ktls")

 On 2021/5/18, 00:01, "Jakub Kicinski" [off-list ref] wrote:

    On Sun, 16 May 2021 04:58:11 +0000 Jim Ma wrote:
    > No, this patch fix using MSG_* in splice.
    > 
    > I have tested read, write, sendmsg, recvmsg fot tls, and try to
    > implement tls in golang. In develop, I have found those issues and
    > try to fix them.

    To be clear the Fixes tag points to the commit where the issue was
    first introduced. AFAICT the issue was there from the start, that
    is commit c46234ebb4d1 ("tls: RX path for ktls"). Are you saying that 
    it used to work in the beginning and then another commit broke it?

    We need the fixes tag to be able to tell how far back (in terms of
    LTS releases) to backport.

    > An other issue, when before enable TLS_RX in cleint, the server sends
    > a tls record, client will receive bad message or message too long
    > error. I'm try to fix this issue.

    Please reply all and don't top post.

On 2021/5/15, 03:27, "Jakub Kicinski" [off-list ref] wrote:

    On Fri, 14 May 2021 11:11:02 +0800 Jim Ma wrote:
    > In tls_sw_splice_read, checkout MSG_* is inappropriate, should use
    > SPLICE_*, update tls_wait_data to accept nonblock arguments instead
    > of flags for recvmsg and splice.
    > 
    > Signed-off-by: Jim Ma [off-list ref]

    Fixes: c46234ebb4d1 ("tls: RX path for ktls")

    right?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help