aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Phillips <kim.phillips@freescale.com>2011-05-02 19:29:17 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2011-05-04 01:15:06 -0400
commitde2954d66408da3ae34effda777bb564fd17781b (patch)
tree4d2c85fd33cfb72ebcb6870320eba3e5f4a22a70
parent701af31ce0cc6a1114001d792c21108c7f49ac86 (diff)
crypto: caam - fix printk recursion for long error texts
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>
-rw-r--r--drivers/crypto/caam/caamalg.c6
-rw-r--r--drivers/crypto/caam/error.h1
2 files changed, 4 insertions, 3 deletions
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 5c16019cf306..b97575e414f6 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -113,7 +113,7 @@ static void split_key_done(struct device *dev, u32 *desc, u32 err,
113 dev_err(dev, "%s %d: err 0x%x\n", __func__, __LINE__, err); 113 dev_err(dev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
114#endif 114#endif
115 if (err) { 115 if (err) {
116 char tmp[256]; 116 char tmp[CAAM_ERROR_STR_MAX];
117 117
118 dev_err(dev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err)); 118 dev_err(dev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
119 } 119 }
@@ -414,7 +414,7 @@ static void ipsec_esp_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
414 offsetof(struct ipsec_esp_edesc, hw_desc)); 414 offsetof(struct ipsec_esp_edesc, hw_desc));
415 415
416 if (err) { 416 if (err) {
417 char tmp[256]; 417 char tmp[CAAM_ERROR_STR_MAX];
418 418
419 dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err)); 419 dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
420 } 420 }
@@ -454,7 +454,7 @@ static void ipsec_esp_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
454 offsetof(struct ipsec_esp_edesc, hw_desc)); 454 offsetof(struct ipsec_esp_edesc, hw_desc));
455 455
456 if (err) { 456 if (err) {
457 char tmp[256]; 457 char tmp[CAAM_ERROR_STR_MAX];
458 458
459 dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err)); 459 dev_err(jrdev, "%08x: %s\n", err, caam_jr_strstatus(tmp, err));
460 } 460 }
diff --git a/drivers/crypto/caam/error.h b/drivers/crypto/caam/error.h
index 067afc120132..02c7baa1748e 100644
--- a/drivers/crypto/caam/error.h
+++ b/drivers/crypto/caam/error.h
@@ -6,5 +6,6 @@
6 6
7#ifndef CAAM_ERROR_H 7#ifndef CAAM_ERROR_H
8#define CAAM_ERROR_H 8#define CAAM_ERROR_H
9#define CAAM_ERROR_STR_MAX 302
9extern char *caam_jr_strstatus(char *outstr, u32 status); 10extern char *caam_jr_strstatus(char *outstr, u32 status);
10#endif /* CAAM_ERROR_H */ 11#endif /* CAAM_ERROR_H */