Pull misc kbuild updates from Michal Marek: "This is the non-critical part of kbuild for 3.17-rc1: - make help hint to use make -s with make kernelrelease et al. - moved a kbuild document to Documentation/kbuild where it belongs - four new Coccinelle scripts, one dropped and one fixed - new make kselftest target to run various tests on the kernel" * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kbuild: kselftest - new make target to build and run kernel selftests Coccinelle: Script to replace if and BUG with BUG_ON Coccinelle: Script to detect incorrect argument to sizeof Coccinelle: Script to use ARRAY_SIZE instead of division of two sizeofs Coccinelle: Script to detect cast after memory allocation coccinelle/null: solve parse error Documentation: headers_install.txt is part of kbuild kbuild: make -s should be used with kernelrelease/kernelversion/image_nametirimbino
commit
899552d6e8
@ -0,0 +1,72 @@ |
||||
/// Remove casting the values returned by memory allocation functions |
||||
/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. |
||||
/// |
||||
//# This makes an effort to find cases of casting of values returned by |
||||
//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc, |
||||
//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes |
||||
//# the casting as it is not required. The result in the patch case may |
||||
//#need some reformatting. |
||||
// |
||||
// Confidence: High |
||||
// Copyright: 2014, Himangi Saraogi GPLv2. |
||||
// Comments: |
||||
// Options: --no-includes --include-headers |
||||
// |
||||
|
||||
virtual context |
||||
virtual patch |
||||
virtual org |
||||
virtual report |
||||
|
||||
//---------------------------------------------------------- |
||||
// For context mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on context@ |
||||
type T; |
||||
@@ |
||||
|
||||
* (T *) |
||||
\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| |
||||
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) |
||||
|
||||
//---------------------------------------------------------- |
||||
// For patch mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on patch@ |
||||
type T; |
||||
@@ |
||||
|
||||
- (T *) |
||||
(\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| |
||||
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)) |
||||
|
||||
//---------------------------------------------------------- |
||||
// For org and report mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@r depends on org || report@ |
||||
type T; |
||||
position p; |
||||
@@ |
||||
|
||||
(T@p *)\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| |
||||
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) |
||||
|
||||
@script:python depends on org@ |
||||
p << r.p; |
||||
t << r.T; |
||||
@@ |
||||
|
||||
coccilib.org.print_safe_todo(p[0], t) |
||||
|
||||
@script:python depends on report@ |
||||
p << r.p; |
||||
t << r.T; |
||||
@@ |
||||
|
||||
msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) |
||||
coccilib.report.print_report(p[0], msg) |
||||
|
||||
|
@ -0,0 +1,87 @@ |
||||
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element |
||||
/// |
||||
//# This makes an effort to find cases where ARRAY_SIZE can be used such as |
||||
//# where there is a division of sizeof the array by the sizeof its first |
||||
//# element or by any indexed element or the element type. It replaces the |
||||
//# division of the two sizeofs by ARRAY_SIZE. |
||||
// |
||||
// Confidence: High |
||||
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. |
||||
// Comments: |
||||
// Options: --no-includes --include-headers |
||||
|
||||
virtual patch |
||||
virtual context |
||||
virtual org |
||||
virtual report |
||||
|
||||
@i@ |
||||
@@ |
||||
|
||||
#include <linux/kernel.h> |
||||
|
||||
//---------------------------------------------------------- |
||||
// For context mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on i&&context@ |
||||
type T; |
||||
T[] E; |
||||
@@ |
||||
( |
||||
* (sizeof(E)/sizeof(*E)) |
||||
| |
||||
* (sizeof(E)/sizeof(E[...])) |
||||
| |
||||
* (sizeof(E)/sizeof(T)) |
||||
) |
||||
|
||||
//---------------------------------------------------------- |
||||
// For patch mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on i&&patch@ |
||||
type T; |
||||
T[] E; |
||||
@@ |
||||
( |
||||
- (sizeof(E)/sizeof(*E)) |
||||
+ ARRAY_SIZE(E) |
||||
| |
||||
- (sizeof(E)/sizeof(E[...])) |
||||
+ ARRAY_SIZE(E) |
||||
| |
||||
- (sizeof(E)/sizeof(T)) |
||||
+ ARRAY_SIZE(E) |
||||
) |
||||
|
||||
//---------------------------------------------------------- |
||||
// For org and report mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@r@ |
||||
type T; |
||||
T[] E; |
||||
position p; |
||||
@@ |
||||
( |
||||
(sizeof(E)@p /sizeof(*E)) |
||||
| |
||||
(sizeof(E)@p /sizeof(E[...])) |
||||
| |
||||
(sizeof(E)@p /sizeof(T)) |
||||
) |
||||
|
||||
@script:python depends on i&&org@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") |
||||
|
||||
@script:python depends on i&&report@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
msg="WARNING: Use ARRAY_SIZE" |
||||
coccilib.report.print_report(p[0], msg) |
||||
|
@ -0,0 +1,76 @@ |
||||
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element |
||||
/// |
||||
//# This makes an effort to find cases where the argument to sizeof is wrong |
||||
//# in memory allocation functions by checking the type of the allocated memory |
||||
//# when it is a double pointer and ensuring the sizeof argument takes a pointer |
||||
//# to the the memory being allocated. There are false positives in cases the |
||||
//# sizeof argument is not used in constructing the return value. The result |
||||
//# may need some reformatting. |
||||
// |
||||
// Confidence: Moderate |
||||
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. |
||||
// Comments: |
||||
// Options: |
||||
|
||||
virtual patch |
||||
virtual context |
||||
virtual org |
||||
virtual report |
||||
|
||||
//---------------------------------------------------------- |
||||
// For context mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on context disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
* T |
||||
)...+> |
||||
|
||||
//---------------------------------------------------------- |
||||
// For patch mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@depends on patch disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
- T |
||||
+ *x |
||||
)...+> |
||||
|
||||
//---------------------------------------------------------- |
||||
// For org and report mode |
||||
//---------------------------------------------------------- |
||||
|
||||
@r disable sizeof_type_expr@ |
||||
type T; |
||||
T **x; |
||||
position p; |
||||
@@ |
||||
|
||||
x = |
||||
<+...sizeof( |
||||
T@p |
||||
)...+> |
||||
|
||||
@script:python depends on org@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type") |
||||
|
||||
@script:python depends on report@ |
||||
p << r.p; |
||||
@@ |
||||
|
||||
msg="WARNING: Use correct pointer type argument for sizeof" |
||||
coccilib.report.print_report(p[0], msg) |
||||
|
Loading…
Reference in new issue