Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Monday, April 28, 2014 at 11:53:23 PM, Herbert Xu wrote: > On Mon, Apr 28, 2014 at 09:28:41PM +0200, Marek Vasut wrote: > > On Monday, April 28, 2014 at 12:24:41 PM, Herbert Xu wrote: > > > On Fri, Apr 18, 2014 at 01:01:42PM +0300, Horia Geanta wrote: > > > > GFP_ATOMIC memory allocation could fail. > > > > In this case, avoid NULL pointer dereference and notify user. > > > > > > > > Cc: # 3.2+ > > > > Cc: Kim Phillips > > > > Signed-off-by: Horia Geanta > > > > > > Patch applied to the crypto tree. Thanks. > > > > Hi Herbert, > > > > Don't you instead want to apply my 11-patch series from > > Message-Id: <1398362722-16430-1-git-send-email-ma...@denx.de> > > Subject: [PATCH 00/11] crypto: caam: Error reporting fixes > > which actually fixes this SPRINTFCAT() horror properly please ? > > This patch is going into the current release while your patches > are better suited for the next merge window. I agree with you that we're rather late in the RC now, but I also believe this patch is just hiding the real bug and that we should fix the root cause of the problem instead of adding a plaster over it. I also believe that while my 11-patch series is big, it should go into -stable eventually, since it fixes the real problem. Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Mon, Apr 28, 2014 at 09:28:41PM +0200, Marek Vasut wrote: > On Monday, April 28, 2014 at 12:24:41 PM, Herbert Xu wrote: > > On Fri, Apr 18, 2014 at 01:01:42PM +0300, Horia Geanta wrote: > > > GFP_ATOMIC memory allocation could fail. > > > In this case, avoid NULL pointer dereference and notify user. > > > > > > Cc: # 3.2+ > > > Cc: Kim Phillips > > > Signed-off-by: Horia Geanta > > > > Patch applied to the crypto tree. Thanks. > > Hi Herbert, > > Don't you instead want to apply my 11-patch series from > Message-Id: <1398362722-16430-1-git-send-email-ma...@denx.de> > Subject: [PATCH 00/11] crypto: caam: Error reporting fixes > which actually fixes this SPRINTFCAT() horror properly please ? This patch is going into the current release while your patches are better suited for the next merge window. Thanks, -- Email: Herbert Xu Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Monday, April 28, 2014 at 12:24:41 PM, Herbert Xu wrote: > On Fri, Apr 18, 2014 at 01:01:42PM +0300, Horia Geanta wrote: > > GFP_ATOMIC memory allocation could fail. > > In this case, avoid NULL pointer dereference and notify user. > > > > Cc: # 3.2+ > > Cc: Kim Phillips > > Signed-off-by: Horia Geanta > > Patch applied to the crypto tree. Thanks. Hi Herbert, Don't you instead want to apply my 11-patch series from Message-Id: <1398362722-16430-1-git-send-email-ma...@denx.de> Subject: [PATCH 00/11] crypto: caam: Error reporting fixes which actually fixes this SPRINTFCAT() horror properly please ? Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Fri, Apr 18, 2014 at 01:01:42PM +0300, Horia Geanta wrote: > GFP_ATOMIC memory allocation could fail. > In this case, avoid NULL pointer dereference and notify user. > > Cc: # 3.2+ > Cc: Kim Phillips > Signed-off-by: Horia Geanta Patch applied to the crypto tree. Thanks. -- Email: Herbert Xu Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Wednesday, April 23, 2014 at 07:12:19 PM, Marek Vasut wrote: > On Wednesday, April 23, 2014 at 06:35:45 PM, Horia Geantă wrote: > > [...] > > > > This entire macro looks somewhat strange. > > > > I am trying to fix it with minimal changes, so the patch qualifies for > > -stable. > > This is just broken and you're not fixing it. You're just feeding this > slimy monster called technical debt more and more code, so it can grow and > get uglier and uglier. I hope you have no attachment to this abomination, > since I'd like to see it dead. > > > > 1) Can't you just snprintf() into $str + some offset ? Something like: > > > snprintf(str + strlen(str), str_total_sz - strlen(str), format, > > > param); > > > > I think this would work. It also gets rid of memory allocation. > > > > Note that strlen(str) is undefined if str is not initialized / > > null-terminated. > > However, all code paths seem to touch this line in caam_jr_strstatus(): > > sprintf(outstr, "%s: ", status_src[ssrc].error); > > before reaching SPRINTFCAT macros, so str is null-terminated. > > > > I'll send v2. > > No, let us first agree on how to fix this insane abomination please. > > But while I am looking, I see stuff like: > > caam_jr_strstatus() can call report_ccb_status( , "CCB"); (basically with a > fixed-size string argument): > > 265 if (status_src[ssrc].report_ssed) > 266 status_src[ssrc].report_ssed(status, outstr); > > Report_ccb_status( , "CCB"); will call report_jump_idx( , "CCB"); (still > with fixed-size string arg), which contains your SPRINTFCAT() macro. > > This will expand to: > > ... > strcat("CCB", tmp); > ... > > So basically you are writing into a fixed-size string? But the string is > three- bytes long, so you are overwriting kernel memory ? Ok, I apologize. You were right. The 'strcat()' is always called with a fixed- length 302byte long buffer allocated on stack. Thus this code is only fragile. I will need to think of this code a bit more before I blurt out some serious nonsense again. Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Wednesday, April 23, 2014 at 06:35:45 PM, Horia Geantă wrote: [...] > > This entire macro looks somewhat strange. > > I am trying to fix it with minimal changes, so the patch qualifies for > -stable. This is just broken and you're not fixing it. You're just feeding this slimy monster called technical debt more and more code, so it can grow and get uglier and uglier. I hope you have no attachment to this abomination, since I'd like to see it dead. > > 1) Can't you just snprintf() into $str + some offset ? Something like: > > snprintf(str + strlen(str), str_total_sz - strlen(str), format, > > param); > > I think this would work. It also gets rid of memory allocation. > > Note that strlen(str) is undefined if str is not initialized / > null-terminated. > However, all code paths seem to touch this line in caam_jr_strstatus(): > sprintf(outstr, "%s: ", status_src[ssrc].error); > before reaching SPRINTFCAT macros, so str is null-terminated. > > I'll send v2. No, let us first agree on how to fix this insane abomination please. But while I am looking, I see stuff like: caam_jr_strstatus() can call report_ccb_status( , "CCB"); (basically with a fixed-size string argument): 265 if (status_src[ssrc].report_ssed) 266 status_src[ssrc].report_ssed(status, outstr); Report_ccb_status( , "CCB"); will call report_jump_idx( , "CCB"); (still with fixed-size string arg), which contains your SPRINTFCAT() macro. This will expand to: ... strcat("CCB", tmp); ... So basically you are writing into a fixed-size string? But the string is three- bytes long, so you are overwriting kernel memory ? If I read the code wrong, I really apologize in advance. > > 2) Why is noone checking if the $str has enough space for contents of > > $tmp ? > > All call sites reach this macro via caam_jr_strstatus(tmp, ...), which > is always called having: > char tmp[CAAM_ERROR_STR_MAX]; > > CAAM_ERROR_STR_MAX is 302, probably enough according to commit > de2954d66408da3ae34effda777bb564fd17781b (crypto: caam - fix printk > recursion for long error texts). You are digging in Linux's crypto code, not OpenSSL. We need accurate fixes and accurate discussion ... using 'probably' does not work here. Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On 4/23/2014 2:56 AM, Marek Vasut wrote: On Friday, April 18, 2014 at 12:01:42 PM, Horia Geanta wrote: GFP_ATOMIC memory allocation could fail. In this case, avoid NULL pointer dereference and notify user. Cc: # 3.2+ If I recall correctly, you need to get the patch accepted into mainline before sending it for -stable . From Documentation/stable_kernel_rules.txt - To have the patch automatically included in the stable tree, add the tag Cc: sta...@vger.kernel.org in the sign-off area. Once the patch is merged it will be applied to the stable tree without anything else needing to be done by the author or subsystem maintainer. Cc: Kim Phillips Signed-off-by: Horia Geanta --- drivers/crypto/caam/error.c | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/caam/error.c b/drivers/crypto/caam/error.c index 9f25f5296029..0eabd81e1a90 100644 --- a/drivers/crypto/caam/error.c +++ b/drivers/crypto/caam/error.c @@ -16,9 +16,13 @@ char *tmp; \ \ tmp = kmalloc(sizeof(format) + max_alloc, GFP_ATOMIC); \ - sprintf(tmp, format, param);\ - strcat(str, tmp); \ - kfree(tmp); \ + if (likely(tmp)) { \ + sprintf(tmp, format, param);\ + strcat(str, tmp); \ + kfree(tmp); \ + } else {\ + strcat(str, "kmalloc failure in SPRINTFCAT"); \ This entire macro looks somewhat strange. I am trying to fix it with minimal changes, so the patch qualifies for -stable. 1) Can't you just snprintf() into $str + some offset ? Something like: snprintf(str + strlen(str), str_total_sz - strlen(str), format, param); I think this would work. It also gets rid of memory allocation. Note that strlen(str) is undefined if str is not initialized / null-terminated. However, all code paths seem to touch this line in caam_jr_strstatus(): sprintf(outstr, "%s: ", status_src[ssrc].error); before reaching SPRINTFCAT macros, so str is null-terminated. I'll send v2. 2) Why is noone checking if the $str has enough space for contents of $tmp ? All call sites reach this macro via caam_jr_strstatus(tmp, ...), which is always called having: char tmp[CAAM_ERROR_STR_MAX]; CAAM_ERROR_STR_MAX is 302, probably enough according to commit de2954d66408da3ae34effda777bb564fd17781b (crypto: caam - fix printk recursion for long error texts). Horia -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
On Friday, April 18, 2014 at 12:01:42 PM, Horia Geanta wrote: > GFP_ATOMIC memory allocation could fail. > In this case, avoid NULL pointer dereference and notify user. > > Cc: # 3.2+ If I recall correctly, you need to get the patch accepted into mainline before sending it for -stable . > Cc: Kim Phillips > Signed-off-by: Horia Geanta > --- > drivers/crypto/caam/error.c | 10 +++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/crypto/caam/error.c b/drivers/crypto/caam/error.c > index 9f25f5296029..0eabd81e1a90 100644 > --- a/drivers/crypto/caam/error.c > +++ b/drivers/crypto/caam/error.c > @@ -16,9 +16,13 @@ > char *tmp; \ > \ > tmp = kmalloc(sizeof(format) + max_alloc, GFP_ATOMIC); \ > - sprintf(tmp, format, param);\ > - strcat(str, tmp); \ > - kfree(tmp); \ > + if (likely(tmp)) { \ > + sprintf(tmp, format, param);\ > + strcat(str, tmp); \ > + kfree(tmp); \ > + } else {\ > + strcat(str, "kmalloc failure in SPRINTFCAT"); \ This entire macro looks somewhat strange. 1) Can't you just snprintf() into $str + some offset ? Something like: snprintf(str + strlen(str), str_total_sz - strlen(str), format, param); 2) Why is noone checking if the $str has enough space for contents of $tmp ? Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH crypto 2/2] crypto: caam - add allocation failure handling in SPRINTFCAT macro
GFP_ATOMIC memory allocation could fail. In this case, avoid NULL pointer dereference and notify user. Cc: # 3.2+ Cc: Kim Phillips Signed-off-by: Horia Geanta --- drivers/crypto/caam/error.c | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/caam/error.c b/drivers/crypto/caam/error.c index 9f25f5296029..0eabd81e1a90 100644 --- a/drivers/crypto/caam/error.c +++ b/drivers/crypto/caam/error.c @@ -16,9 +16,13 @@ char *tmp; \ \ tmp = kmalloc(sizeof(format) + max_alloc, GFP_ATOMIC); \ - sprintf(tmp, format, param);\ - strcat(str, tmp); \ - kfree(tmp); \ + if (likely(tmp)) { \ + sprintf(tmp, format, param);\ + strcat(str, tmp); \ + kfree(tmp); \ + } else {\ + strcat(str, "kmalloc failure in SPRINTFCAT"); \ + } \ } static void report_jump_idx(u32 status, char *outstr) -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html