Skip to content

Commit

Permalink
Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/…
Browse files Browse the repository at this point in the history
…mmarek/kbuild

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_name
  • Loading branch information
torvalds committed Aug 14, 2014
2 parents 3b7b3e6 + 5a5da78 commit 899552d
Show file tree
Hide file tree
Showing 8 changed files with 275 additions and 30 deletions.
2 changes: 2 additions & 0 deletions Documentation/kbuild/00-INDEX
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
00-INDEX
- this file: info on the kernel build process
headers_install.txt
- how to export Linux headers for use by userspace
kbuild.txt
- developer information on kbuild
kconfig.txt
Expand Down
File renamed without changes.
18 changes: 15 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1063,6 +1063,13 @@ headers_check: headers_install
$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1

# ---------------------------------------------------------------------------
# Kernel selftest

PHONY += kselftest
kselftest:
$(Q)$(MAKE) -C tools/testing/selftests run_tests

# ---------------------------------------------------------------------------
# Modules

Expand Down Expand Up @@ -1250,9 +1257,9 @@ help:
@echo ' tags/TAGS - Generate tags file for editors'
@echo ' cscope - Generate cscope index'
@echo ' gtags - Generate GNU GLOBAL index'
@echo ' kernelrelease - Output the release version string'
@echo ' kernelversion - Output the version stored in Makefile'
@echo ' image_name - Output the image name'
@echo ' kernelrelease - Output the release version string (use with make -s)'
@echo ' kernelversion - Output the version stored in Makefile (use with make -s)'
@echo ' image_name - Output the image name (use with make -s)'
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
echo ' (default: $(INSTALL_HDR_PATH))'; \
echo ''
Expand All @@ -1266,6 +1273,11 @@ help:
@echo ' headerdep - Detect inclusion cycles in headers'
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
@echo ''
@echo 'Kernel selftest'
@echo ' kselftest - Build and run kernel selftest (run as root)'
@echo ' Build, install, and boot kernel before'
@echo ' running kselftest on it'
@echo ''
@echo 'Kernel packaging:'
@$(MAKE) $(build)=$(package-dir) help
@echo ''
Expand Down
72 changes: 72 additions & 0 deletions scripts/coccinelle/api/alloc/alloc_cast.cocci
Original file line number Diff line number Diff line change
@@ -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)
87 changes: 87 additions & 0 deletions scripts/coccinelle/misc/array_size.cocci
Original file line number Diff line number Diff line change
@@ -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)
76 changes: 76 additions & 0 deletions scripts/coccinelle/misc/badty.cocci
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
/// Use BUG_ON instead of a if condition followed by BUG.
///
/// Casting (void *) value returned by kmalloc is useless
/// as mentioned in Documentation/CodingStyle, Chap 14.
///
// Confidence: High
// Copyright: 2009,2010 Nicolas Palix, DIKU. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers
//
// Keywords: kmalloc, kzalloc, kcalloc
// Version min: < 2.6.12 kmalloc
// Version min: < 2.6.12 kcalloc
// Version min: 2.6.14 kzalloc
//# This makes an effort to find cases where BUG() follows an if
//# condition on an expression and replaces the if condition and BUG()
//# with a BUG_ON having the conditional expression of the if statement
//# as argument.
//
// Confidence: High
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
// Comments:
// Options: --no-includes, --include-headers

virtual context
virtual patch
virtual context
virtual org
virtual report

Expand All @@ -23,45 +20,43 @@ virtual report
//----------------------------------------------------------

@depends on context@
type T;
expression e;
@@

* (T *)
\(kmalloc\|kzalloc\|kcalloc\)(...)
*if (e) BUG();

//----------------------------------------------------------
// For patch mode
//----------------------------------------------------------

@depends on patch@
type T;
expression e;
@@

- (T *)
\(kmalloc\|kzalloc\|kcalloc\)(...)
-if (e) BUG();
+BUG_ON(e);

//----------------------------------------------------------
// For org and report mode
//----------------------------------------------------------

@r depends on org || report@
type T;
@r@
expression e;
position p;
@@

(T@p *)\(kmalloc\|kzalloc\|kcalloc\)(...)
if (e) BUG@p ();

@script:python depends on org@
p << r.p;
t << r.T;
@@
coccilib.org.print_safe_todo(p[0], t)
coccilib.org.print_todo(p[0], "WARNING use BUG_ON")
@script:python depends on report@
p << r.p;
t << r.T;
@@
msg="WARNING: casting value returned by k[cmz]alloc to (%s *) is useless." % (t)
msg="WARNING: Use BUG_ON"
coccilib.report.print_report(p[0], msg)
3 changes: 2 additions & 1 deletion scripts/coccinelle/null/badzero.cocci
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Comments: Requires Coccinelle version 1.0.0-rc20 or later
// Options:

virtual patch
Expand All @@ -19,6 +19,7 @@ virtual org
virtual report

@initialize:ocaml@
@@
let negtable = Hashtbl.create 101
@depends on patch@
Expand Down

0 comments on commit 899552d

Please sign in to comment.