lib/string.c: check for kmalloc() failure
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 8 Sep 2017 23:15:48 +0000 (16:15 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 9 Sep 2017 01:26:49 +0000 (18:26 -0700)
This is mostly to keep the number of static checker warnings down so we
can spot new bugs instead of them being drowned in noise.  This function
doesn't return normal kernel error codes but instead the return value is
used to display exactly which memory failed.  I chose -1 as hopefully
that's a helpful thing to print.

Link: http://lkml.kernel.org/r/20170817115420.uikisjvfmtrqkzjn@mwanda
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Kees Cook <keescook@chromium.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Daniel Micay <danielmicay@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/string.c

index abf6499e3915b29a6e8f63b3e7bf8d528583e951..9921dc202db440a0a1b20aa19b85555e634fe3b5 100644 (file)
@@ -1059,7 +1059,11 @@ EXPORT_SYMBOL(fortify_panic);
 static __init int memset16_selftest(void)
 {
        unsigned i, j, k;
-       u16 v, *p = kmalloc(256 * 2 * 2, GFP_KERNEL);
+       u16 v, *p;
+
+       p = kmalloc(256 * 2 * 2, GFP_KERNEL);
+       if (!p)
+               return -1;
 
        for (i = 0; i < 256; i++) {
                for (j = 0; j < 256; j++) {
@@ -1091,7 +1095,11 @@ fail:
 static __init int memset32_selftest(void)
 {
        unsigned i, j, k;
-       u32 v, *p = kmalloc(256 * 2 * 4, GFP_KERNEL);
+       u32 v, *p;
+
+       p = kmalloc(256 * 2 * 4, GFP_KERNEL);
+       if (!p)
+               return -1;
 
        for (i = 0; i < 256; i++) {
                for (j = 0; j < 256; j++) {
@@ -1123,7 +1131,11 @@ fail:
 static __init int memset64_selftest(void)
 {
        unsigned i, j, k;
-       u64 v, *p = kmalloc(256 * 2 * 8, GFP_KERNEL);
+       u64 v, *p;
+
+       p = kmalloc(256 * 2 * 8, GFP_KERNEL);
+       if (!p)
+               return -1;
 
        for (i = 0; i < 256; i++) {
                for (j = 0; j < 256; j++) {