There's a rather futile check for wrap around in crypto.c. The problem
is, if the number of crypto devs is anywhere near wrapping, the
malloc call a few lines below has long since exploded.

Just define a static max count and don't go over it.

Index: crypto.c
===================================================================
RCS file: /cvs/src/sys/crypto/crypto.c,v
retrieving revision 1.59
diff -u -p -r1.59 crypto.c
--- crypto.c    11 Jan 2011 15:42:05 -0000      1.59
+++ crypto.c    26 Mar 2013 07:35:33 -0000
@@ -245,8 +245,7 @@ crypto_get_driverid(u_int8_t flags)
 
        /* Out of entries, allocate some more. */
        if (i == crypto_drivers_num) {
-               /* Be careful about wrap-around. */
-               if (2 * crypto_drivers_num <= crypto_drivers_num) {
+               if (crypto_drivers_num >= CRYPTO_DRIVERS_MAX) {
                        splx(s);
                        return -1;
                }
Index: cryptodev.h
===================================================================
RCS file: /cvs/src/sys/crypto/cryptodev.h,v
retrieving revision 1.56
diff -u -p -r1.56 cryptodev.h
--- cryptodev.h 29 Jun 2012 14:48:04 -0000      1.56
+++ cryptodev.h 26 Mar 2013 07:35:54 -0000
@@ -57,6 +57,7 @@
 
 /* Some initial values */
 #define CRYPTO_DRIVERS_INITIAL 4
+#define CRYPTO_DRIVERS_MAX     128
 #define CRYPTO_SW_SESSIONS     32
 
 /* HMAC values */

Reply via email to