crypto: caam - fix printk recursion for long error texts
authorKim Phillips <kim.phillips@freescale.com>
Mon, 2 May 2011 23:29:17 +0000 (18:29 -0500)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 4 May 2011 05:15:06 +0000 (15:15 +1000)
during recent descriptor development, an Invalid Sequence Command
error triggered a:

BUG: recent printk recursion!

due to insufficient memory allocated for the error text.

The Invalid Sequence Command error text is the longest.
The length of the maximum error string is computed as
the sum of:

"DECO: ": 6
"jump tgt desc idx 255: ": 23
Invalid Sequence Command text: 272
zero termination character: 1

i.e, 302 characters.

Define this maximum error string length in error.h and fix
caam_jr_strstatus callsites.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/caamalg.c
drivers/crypto/caam/error.h

index 5c16019cf3068fc6c50fd27efe5d3038969e0bf4..b97575e414f6ec977171f48d76f24f06b85f890c 100644 (file)
@@ -113,7 +113,7 @@ static void split_key_done(struct device *dev, u32 *desc, u32 err,
        dev_err(dev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
 #endif
        if (err) {
-               char tmp[256];
+               char tmp[CAAM_ERROR_STR_MAX];
 
                dev_err(dev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
        }
@@ -414,7 +414,7 @@ static void ipsec_esp_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
                 offsetof(struct ipsec_esp_edesc, hw_desc));
 
        if (err) {
-               char tmp[256];
+               char tmp[CAAM_ERROR_STR_MAX];
 
                dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
        }
@@ -454,7 +454,7 @@ static void ipsec_esp_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
                 offsetof(struct ipsec_esp_edesc, hw_desc));
 
        if (err) {
-               char tmp[256];
+               char tmp[CAAM_ERROR_STR_MAX];
 
                dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
        }
index 067afc12013276c9486513e80c5e7db03e74fedc..02c7baa1748e44ed7da80074ba34bcb86d8e60c8 100644 (file)
@@ -6,5 +6,6 @@
 
 #ifndef CAAM_ERROR_H
 #define CAAM_ERROR_H
+#define CAAM_ERROR_STR_MAX 302
 extern char *caam_jr_strstatus(char *outstr, u32 status);
 #endif /* CAAM_ERROR_H */