tls: rx: refactor decrypt_skb_update()
authorJakub Kicinski <kuba@kernel.org>
Fri, 8 Apr 2022 03:38:22 +0000 (20:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Apr 2022 10:49:08 +0000 (11:49 +0100)
Use early return and a jump label to remove two indentation levels.
No functional changes.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tls/tls_sw.c

index 4f2e8b4..e24aafb 100644 (file)
@@ -1564,46 +1564,46 @@ static int decrypt_skb_update(struct sock *sk, struct sk_buff *skb,
        struct tls_prot_info *prot = &tls_ctx->prot_info;
        struct strp_msg *rxm = strp_msg(skb);
        struct tls_msg *tlm = tls_msg(skb);
-       int pad, err = 0;
+       int pad, err;
 
-       if (!tlm->decrypted) {
-               if (tls_ctx->rx_conf == TLS_HW) {
-                       err = tls_device_decrypted(sk, tls_ctx, skb, rxm);
-                       if (err < 0)
-                               return err;
-               }
+       if (tlm->decrypted) {
+               *zc = false;
+               return 0;
+       }
 
-               /* Still not decrypted after tls_device */
-               if (!tlm->decrypted) {
-                       err = decrypt_internal(sk, skb, dest, NULL, chunk, zc,
-                                              async);
-                       if (err < 0) {
-                               if (err == -EINPROGRESS)
-                                       tls_advance_record_sn(sk, prot,
-                                                             &tls_ctx->rx);
-                               else if (err == -EBADMSG)
-                                       TLS_INC_STATS(sock_net(sk),
-                                                     LINUX_MIB_TLSDECRYPTERROR);
-                               return err;
-                       }
-               } else {
+       if (tls_ctx->rx_conf == TLS_HW) {
+               err = tls_device_decrypted(sk, tls_ctx, skb, rxm);
+               if (err < 0)
+                       return err;
+
+               /* skip SW decryption if NIC handled it already */
+               if (tlm->decrypted) {
                        *zc = false;
+                       goto decrypt_done;
                }
+       }
 
-               pad = padding_length(prot, skb);
-               if (pad < 0)
-                       return pad;
-
-               rxm->full_len -= pad;
-               rxm->offset += prot->prepend_size;
-               rxm->full_len -= prot->overhead_size;
-               tls_advance_record_sn(sk, prot, &tls_ctx->rx);
-               tlm->decrypted = 1;
-       } else {
-               *zc = false;
+       err = decrypt_internal(sk, skb, dest, NULL, chunk, zc, async);
+       if (err < 0) {
+               if (err == -EINPROGRESS)
+                       tls_advance_record_sn(sk, prot, &tls_ctx->rx);
+               else if (err == -EBADMSG)
+                       TLS_INC_STATS(sock_net(sk), LINUX_MIB_TLSDECRYPTERROR);
+               return err;
        }
 
-       return err;
+decrypt_done:
+       pad = padding_length(prot, skb);
+       if (pad < 0)
+               return pad;
+
+       rxm->full_len -= pad;
+       rxm->offset += prot->prepend_size;
+       rxm->full_len -= prot->overhead_size;
+       tls_advance_record_sn(sk, prot, &tls_ctx->rx);
+       tlm->decrypted = 1;
+
+       return 0;
 }
 
 int decrypt_skb(struct sock *sk, struct sk_buff *skb,