Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/opencrypto Don't store temporary values in the opencrypt...



details:   https://anonhg.NetBSD.org/src/rev/8522594962d0
branches:  trunk
changeset: 761923:8522594962d0
user:      drochner <drochner%NetBSD.org@localhost>
date:      Thu Feb 10 21:00:42 2011 +0000

description:
Don't store temporary values in the opencrypto session data struct which
can be shared by multiple threads -- pass them on the stack instead.
Add some "const" to document this. (One _could_ use the session struct
for temporary stuff with proper locking, but it seems unnecessary here.)
Also remove the unused SW_crc member in the session struct.
>From Wolfgang Stukenbrock per PR kern/44472.

diffstat:

 sys/opencrypto/cryptosoft.c |  22 ++++++++++------------
 sys/opencrypto/cryptosoft.h |   7 ++-----
 2 files changed, 12 insertions(+), 17 deletions(-)

diffs (114 lines):

diff -r 9a05c69b725e -r 8522594962d0 sys/opencrypto/cryptosoft.c
--- a/sys/opencrypto/cryptosoft.c       Thu Feb 10 20:57:22 2011 +0000
+++ b/sys/opencrypto/cryptosoft.c       Thu Feb 10 21:00:42 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cryptosoft.c,v 1.26 2010/08/02 19:59:35 jakllsch Exp $ */
+/*     $NetBSD: cryptosoft.c,v 1.27 2011/02/10 21:00:42 drochner Exp $ */
 /*     $FreeBSD: src/sys/opencrypto/cryptosoft.c,v 1.2.2.1 2002/11/21 23:34:23 sam Exp $       */
 /*     $OpenBSD: cryptosoft.c,v 1.35 2002/04/26 08:43:50 deraadt Exp $ */
 
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.26 2010/08/02 19:59:35 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.27 2011/02/10 21:00:42 drochner Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -60,8 +60,8 @@
        (x) == CRYPTO_BUF_MBUF ? m_copydata((struct mbuf *)a,b,c,d) \
        : cuio_copydata((struct uio *)a,b,c,d)
 
-static int swcr_encdec(struct cryptodesc *, struct swcr_data *, void *, int);
-static int swcr_compdec(struct cryptodesc *, struct swcr_data *, void *, int);
+static int swcr_encdec(struct cryptodesc *, const struct swcr_data *, void *, int);
+static int swcr_compdec(struct cryptodesc *, const struct swcr_data *, void *, int, int *);
 static int swcr_process(void *, struct cryptop *, int);
 static int swcr_newsession(void *, u_int32_t *, struct cryptoini *);
 static int swcr_freesession(void *, u_int64_t);
@@ -70,7 +70,7 @@
  * Apply a symmetric encryption/decryption algorithm.
  */
 static int
-swcr_encdec(struct cryptodesc *crd, struct swcr_data *sw, void *bufv,
+swcr_encdec(struct cryptodesc *crd, const struct swcr_data *sw, void *bufv,
     int outtype)
 {
        char *buf = bufv;
@@ -418,7 +418,7 @@
  */
 int
 swcr_authcompute(struct cryptop *crp, struct cryptodesc *crd,
-    struct swcr_data *sw, void *buf, int outtype)
+    const struct swcr_data *sw, void *buf, int outtype)
 {
        unsigned char aalg[AALG_MAX_RESULT_LEN];
        const struct swcr_auth_hash *axf;
@@ -512,8 +512,8 @@
  * Apply a compression/decompression algorithm
  */
 static int
-swcr_compdec(struct cryptodesc *crd, struct swcr_data *sw,
-    void *buf, int outtype)
+swcr_compdec(struct cryptodesc *crd, const struct swcr_data *sw,
+    void *buf, int outtype, int *res_size)
 {
        u_int8_t *data, *out;
        const struct swcr_comp_algo *cxf;
@@ -544,7 +544,7 @@
        /* Copy back the (de)compressed data. m_copyback is
         * extending the mbuf as necessary.
         */
-       sw->sw_size = result;
+       *res_size = (int)result;
        /* Check the compressed size when doing compression */
        if (crd->crd_flags & CRD_F_COMP) {
                if (result > crd->crd_len) {
@@ -986,10 +986,8 @@
                case CRYPTO_GZIP_COMP:
                        DPRINTF(("swcr_process: compdec for %d\n", sw->sw_alg));
                        if ((crp->crp_etype = swcr_compdec(crd, sw,
-                           crp->crp_buf, type)) != 0)
+                           crp->crp_buf, type, &crp->crp_olen)) != 0)
                                goto done;
-                       else
-                               crp->crp_olen = (int)sw->sw_size;
                        break;
 
                default:
diff -r 9a05c69b725e -r 8522594962d0 sys/opencrypto/cryptosoft.h
--- a/sys/opencrypto/cryptosoft.h       Thu Feb 10 20:57:22 2011 +0000
+++ b/sys/opencrypto/cryptosoft.h       Thu Feb 10 21:00:42 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cryptosoft.h,v 1.6 2009/03/25 01:26:13 darran Exp $ */
+/*     $NetBSD: cryptosoft.h,v 1.7 2011/02/10 21:00:42 drochner Exp $ */
 /*     $OpenBSD: cryptosoft.h,v 1.10 2002/04/22 23:10:09 deraadt Exp $ */
 
 /*
@@ -40,8 +40,6 @@
                        const struct swcr_enc_xform *SW_exf;
                } SWCR_ENC;
                struct {
-                       u_int32_t        SW_size;
-                       u_int32_t        SW_crc;
                        const struct swcr_comp_algo *SW_cxf;
                } SWCR_COMP;
        } SWCR_UN;
@@ -52,7 +50,6 @@
 #define sw_axf         SWCR_UN.SWCR_AUTH.SW_axf
 #define sw_kschedule   SWCR_UN.SWCR_ENC.SW_kschedule
 #define sw_exf         SWCR_UN.SWCR_ENC.SW_exf
-#define sw_size                SWCR_UN.SWCR_COMP.SW_size
 #define sw_cxf         SWCR_UN.SWCR_COMP.SW_cxf
 
        struct swcr_data *sw_next;
@@ -60,7 +57,7 @@
 
 #ifdef _KERNEL
 int swcr_authcompute(struct cryptop *crp, struct cryptodesc *crd,
-    struct swcr_data *sw, void *buf, int outtype);
+    const struct swcr_data *sw, void *buf, int outtype);
 #endif /* _KERNEL */
 
 #endif /* _CRYPTO_CRYPTO_H_ */



Home | Main Index | Thread Index | Old Index