Commit 994e9a2e authored by Julia Lawall's avatar Julia Lawall Committed by Mike Frysinger

arch/blackfin: Add kmalloc NULL tests

Check that the result of kmalloc is not NULL before passing it to other
functions.

In the first two cases, the new code returns -ENOMEM, which seems
compatible with what is done for similar functions for other architectures.

In the last two cases, the new code fails silently, ie just returns,
because the function has void return type.

The semantic match that finds this problem is as follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@@
expression *x;
identifier f;
constant char *C;
@@

x = \(kmalloc\|kcalloc\|kzalloc\)(...);
... when != x == NULL
    when != x != NULL
    when != (x || ...)
(
kfree(x)
|
f(...,C,...,x,...)
|
*f(...,x,...)
|
*x->f
)
// </smpl>
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 5bc6e3cf
...@@ -211,6 +211,8 @@ int smp_call_function(void (*func)(void *info), void *info, int wait) ...@@ -211,6 +211,8 @@ int smp_call_function(void (*func)(void *info), void *info, int wait)
return 0; return 0;
msg = kmalloc(sizeof(*msg), GFP_ATOMIC); msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
if (!msg)
return -ENOMEM;
INIT_LIST_HEAD(&msg->list); INIT_LIST_HEAD(&msg->list);
msg->call_struct.func = func; msg->call_struct.func = func;
msg->call_struct.info = info; msg->call_struct.info = info;
...@@ -252,6 +254,8 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, ...@@ -252,6 +254,8 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
cpu_set(cpu, callmap); cpu_set(cpu, callmap);
msg = kmalloc(sizeof(*msg), GFP_ATOMIC); msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
if (!msg)
return -ENOMEM;
INIT_LIST_HEAD(&msg->list); INIT_LIST_HEAD(&msg->list);
msg->call_struct.func = func; msg->call_struct.func = func;
msg->call_struct.info = info; msg->call_struct.info = info;
...@@ -287,6 +291,8 @@ void smp_send_reschedule(int cpu) ...@@ -287,6 +291,8 @@ void smp_send_reschedule(int cpu)
return; return;
msg = kmalloc(sizeof(*msg), GFP_ATOMIC); msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
if (!msg)
return;
memset(msg, 0, sizeof(msg)); memset(msg, 0, sizeof(msg));
INIT_LIST_HEAD(&msg->list); INIT_LIST_HEAD(&msg->list);
msg->type = BFIN_IPI_RESCHEDULE; msg->type = BFIN_IPI_RESCHEDULE;
...@@ -314,6 +320,8 @@ void smp_send_stop(void) ...@@ -314,6 +320,8 @@ void smp_send_stop(void)
return; return;
msg = kmalloc(sizeof(*msg), GFP_ATOMIC); msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
if (!msg)
return;
memset(msg, 0, sizeof(msg)); memset(msg, 0, sizeof(msg));
INIT_LIST_HEAD(&msg->list); INIT_LIST_HEAD(&msg->list);
msg->type = BFIN_IPI_CPU_STOP; msg->type = BFIN_IPI_CPU_STOP;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment