Stop setting etype in the MD crypto code. So far we have set the etype
authorpatrick <patrick@openbsd.org>
Sun, 24 Oct 2021 10:26:22 +0000 (10:26 +0000)
committerpatrick <patrick@openbsd.org>
Sun, 24 Oct 2021 10:26:22 +0000 (10:26 +0000)
and returned the error, which made the MI crypto code set the etype for
a second time.  We still have to set etype after calling the MD process
function, as the callers of crypto_invoke() still expect error handling
to be shown through the etype.  But at least now all MD crypto code does
not have to worry about that anymore.  Once the callers are changed to
not look at etype anymore, we can get rid of it completely.

ok tobhe@

sys/arch/amd64/amd64/aesni.c
sys/arch/amd64/amd64/via.c
sys/arch/arm64/arm64/cryptox.c
sys/arch/i386/i386/via.c
sys/arch/i386/pci/glxsb.c
sys/arch/octeon/dev/octcrypto.c
sys/crypto/crypto.c
sys/crypto/cryptosoft.c

index d99c1c7..32b8092 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: aesni.c,v 1.52 2021/10/23 15:42:34 tobhe Exp $        */
+/*     $OpenBSD: aesni.c,v 1.53 2021/10/24 10:26:22 patrick Exp $      */
 /*-
  * Copyright (c) 2003 Jason Wright
  * Copyright (c) 2003, 2004 Theo de Raadt
@@ -698,7 +698,6 @@ aesni_process(struct cryptop *crp)
 
 out:
        smr_read_leave();
-       crp->crp_etype = err;
        return (err);
 }
 
index 041b4a1..ef6a46c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: via.c,v 1.36 2021/10/23 15:42:34 tobhe Exp $  */
+/*     $OpenBSD: via.c,v 1.37 2021/10/24 10:26:22 patrick Exp $        */
 /*     $NetBSD: machdep.c,v 1.214 1996/11/10 03:16:17 thorpej Exp $    */
 
 /*-
@@ -459,7 +459,6 @@ viac3_crypto_process(struct cryptop *crp)
                }
        }
 out:
-       crp->crp_etype = err;
        return (err);
 }
 
index c97da3a..02c9375 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cryptox.c,v 1.4 2021/10/23 15:42:35 tobhe Exp $       */
+/*     $OpenBSD: cryptox.c,v 1.5 2021/10/24 10:26:22 patrick Exp $     */
 /*
  * Copyright (c) 2003 Jason Wright
  * Copyright (c) 2003, 2004 Theo de Raadt
@@ -485,6 +485,5 @@ cryptox_process(struct cryptop *crp)
 
 out:
        smr_read_leave();
-       crp->crp_etype = err;
        return (err);
 }
index 3a93e6c..ccaf9fc 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: via.c,v 1.49 2021/10/23 15:42:35 tobhe Exp $  */
+/*     $OpenBSD: via.c,v 1.50 2021/10/24 10:26:22 patrick Exp $        */
 /*     $NetBSD: machdep.c,v 1.214 1996/11/10 03:16:17 thorpej Exp $    */
 
 /*-
@@ -467,7 +467,6 @@ viac3_crypto_process(struct cryptop *crp)
                }
        }
 out:
-       crp->crp_etype = err;
        return (err);
 }
 
index e09cea3..8d9245e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: glxsb.c,v 1.39 2021/10/23 15:42:35 tobhe Exp $        */
+/*     $OpenBSD: glxsb.c,v 1.40 2021/10/24 10:26:22 patrick Exp $      */
 
 /*
  * Copyright (c) 2006 Tom Cosgrove <tom@openbsd.org>
@@ -824,7 +824,6 @@ glxsb_crypto_process(struct cryptop *crp)
        }
 
 out:
-       crp->crp_etype = err;
        splx(s);
        return (err);
 }
index 29017de..58201b2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: octcrypto.c,v 1.7 2021/10/23 15:42:35 tobhe Exp $     */
+/*     $OpenBSD: octcrypto.c,v 1.8 2021/10/24 10:26:22 patrick Exp $   */
 
 /*
  * Copyright (c) 2018 Visa Hankala
@@ -656,8 +656,6 @@ octcrypto_process(struct cryptop *crp)
 
 out:
        smr_read_leave();
-
-       crp->crp_etype = error;
        return error;
 }
 
index 6efb0d7..a51edbb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: crypto.c,v 1.90 2021/10/23 15:42:35 tobhe Exp $       */
+/*     $OpenBSD: crypto.c,v 1.91 2021/10/24 10:26:22 patrick Exp $     */
 /*
  * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
  *
@@ -414,14 +414,11 @@ crypto_invoke(struct cryptop *crp)
        crypto_drivers[hid].cc_bytes += crp->crp_ilen;
 
        error = crypto_drivers[hid].cc_process(crp);
-       if (error) {
-               if (error == ERESTART) {
-                       /* Unregister driver and migrate session. */
-                       crypto_unregister(hid, CRYPTO_ALGORITHM_MAX + 1);
-                       goto migrate;
-               } else {
-                       crp->crp_etype = error;
-               }
+       crp->crp_etype = error;
+       if (error == ERESTART) {
+               /* Unregister driver and migrate session. */
+               crypto_unregister(hid, CRYPTO_ALGORITHM_MAX + 1);
+               goto migrate;
        }
 
        splx(s);
index dcb815a..04d565f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cryptosoft.c,v 1.90 2021/10/23 15:42:35 tobhe Exp $   */
+/*     $OpenBSD: cryptosoft.c,v 1.91 2021/10/24 10:26:22 patrick Exp $ */
 
 /*
  * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
@@ -1032,20 +1032,21 @@ swcr_process(struct cryptop *crp)
        struct swcr_list *session;
        struct swcr_data *sw;
        u_int32_t lid;
+       int err = 0;
        int type;
        int i;
 
        KASSERT(crp->crp_ndesc >= 1);
 
        if (crp->crp_buf == NULL) {
-               crp->crp_etype = EINVAL;
+               err = EINVAL;
                goto done;
        }
 
        lid = crp->crp_sid & 0xffffffff;
        if (lid >= swcr_sesnum || lid == 0 ||
            SLIST_EMPTY(&swcr_sessions[lid])) {
-               crp->crp_etype = ENOENT;
+               err = ENOENT;
                goto done;
        }
 
@@ -1075,7 +1076,7 @@ swcr_process(struct cryptop *crp)
 
                /* No such context ? */
                if (sw == NULL) {
-                       crp->crp_etype = EINVAL;
+                       err = EINVAL;
                        goto done;
                }
 
@@ -1088,7 +1089,7 @@ swcr_process(struct cryptop *crp)
                case CRYPTO_RIJNDAEL128_CBC:
                case CRYPTO_AES_CTR:
                case CRYPTO_AES_XTS:
-                       if ((crp->crp_etype = swcr_encdec(crd, sw,
+                       if ((err = swcr_encdec(crd, sw,
                            crp->crp_buf, type)) != 0)
                                goto done;
                        break;
@@ -1098,7 +1099,7 @@ swcr_process(struct cryptop *crp)
                case CRYPTO_SHA2_256_HMAC:
                case CRYPTO_SHA2_384_HMAC:
                case CRYPTO_SHA2_512_HMAC:
-                       if ((crp->crp_etype = swcr_authcompute(crp, crd, sw,
+                       if ((err = swcr_authcompute(crp, crd, sw,
                            crp->crp_buf, type)) != 0)
                                goto done;
                        break;
@@ -1110,11 +1111,11 @@ swcr_process(struct cryptop *crp)
                case CRYPTO_AES_256_GMAC:
                case CRYPTO_CHACHA20_POLY1305:
                case CRYPTO_CHACHA20_POLY1305_MAC:
-                       crp->crp_etype = swcr_authenc(crp);
+                       err = swcr_authenc(crp);
                        goto done;
 
                case CRYPTO_DEFLATE_COMP:
-                       if ((crp->crp_etype = swcr_compdec(crd, sw,
+                       if ((err = swcr_compdec(crd, sw,
                            crp->crp_buf, type)) != 0)
                                goto done;
                        else
@@ -1123,13 +1124,13 @@ swcr_process(struct cryptop *crp)
 
                default:
                        /* Unknown/unsupported algorithm */
-                       crp->crp_etype = EINVAL;
+                       err = EINVAL;
                        goto done;
                }
        }
 
 done:
-       return 0;
+       return err;
 }
 
 /*