diff options
author | 2022-04-08 11:31:29 -0700 | |
---|---|---|
committer | 2022-04-10 17:32:11 +0100 | |
commit | fc8da80f990696a50ea76628daca6e63331b18b7 (patch) | |
tree | 7d58da182b6c11c390f0615f0b8fef2fa64389c4 /net/tls | |
parent | tls: rx: factor out writing ContentType to cmsg (diff) | |
download | linux-fc8da80f990696a50ea76628daca6e63331b18b7.tar.gz linux-fc8da80f990696a50ea76628daca6e63331b18b7.tar.bz2 linux-fc8da80f990696a50ea76628daca6e63331b18b7.zip |
tls: rx: don't handle async in tls_sw_advance_skb()
tls_sw_advance_skb() caters to the async case when skb argument
is NULL. In that case it simply unpauses the strparser.
These are surprising semantics to a person reading the code,
and result in higher LoC, so inline the __strp_unpause and
only call tls_sw_advance_skb() when we actually move past
an skb.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tls')
-rw-r--r-- | net/tls/tls_sw.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 103a1aaca934..6f17f599a6d4 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1616,17 +1616,14 @@ static bool tls_sw_advance_skb(struct sock *sk, struct sk_buff *skb, { struct tls_context *tls_ctx = tls_get_ctx(sk); struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx); + struct strp_msg *rxm = strp_msg(skb); - if (skb) { - struct strp_msg *rxm = strp_msg(skb); - - if (len < rxm->full_len) { - rxm->offset += len; - rxm->full_len -= len; - return false; - } - consume_skb(skb); + if (len < rxm->full_len) { + rxm->offset += len; + rxm->full_len -= len; + return false; } + consume_skb(skb); /* Finished with message */ ctx->recv_pkt = NULL; @@ -1898,10 +1895,9 @@ pick_next_record: /* For async or peek case, queue the current skb */ if (async || is_peek || retain_skb) { skb_queue_tail(&ctx->rx_list, skb); - skb = NULL; - } - - if (tls_sw_advance_skb(sk, skb, chunk)) { + ctx->recv_pkt = NULL; + __strp_unpause(&ctx->strp); + } else if (tls_sw_advance_skb(sk, skb, chunk)) { /* Return full control message to * userspace before trying to parse * another message type |