All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Add some checks to be used with Coccinelle
@ 2010-06-06 15:15 ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This patch series adds a front-end to use Coccinelle.  It also
includes a documentation file describing how to use the new
'coccicheck' target. Finally, some SmPL examples are provided.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>

Nicolas Palix (7):
  Add a target to use the Coccinelle checker
  Add Documentation/coccinelle.txt
  Add scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
  Add scripts/coccinelle/alloc/kzalloc-simple.cocci
  Add scripts/coccinelle/resource_size.cocci
  Add scripts/coccinelle/err_cast.cocci
  Add scripts/coccinelle/deref_null.cocci

 Documentation/coccinelle.txt                     |  258 +++++++++++++++++++
 MAINTAINERS                                      |   10 +
 Makefile                                         |   10 +-
 scripts/Makefile.help                            |    3 +
 scripts/coccicheck                               |   54 ++++
 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci |   67 +++++
 scripts/coccinelle/alloc/kzalloc-simple.cocci    |   82 ++++++
 scripts/coccinelle/deref_null.cocci              |  293 ++++++++++++++++++++++
 scripts/coccinelle/err_cast.cocci                |   56 ++++
 scripts/coccinelle/resource_size.cocci           |   93 +++++++
 10 files changed, 923 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/coccinelle.txt
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck
 create mode 100644 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
 create mode 100644 scripts/coccinelle/alloc/kzalloc-simple.cocci
 create mode 100644 scripts/coccinelle/deref_null.cocci
 create mode 100644 scripts/coccinelle/err_cast.cocci
 create mode 100644 scripts/coccinelle/resource_size.cocci


^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH 0/7] Add some checks to be used with Coccinelle
@ 2010-06-06 15:15 ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This patch series adds a front-end to use Coccinelle.  It also
includes a documentation file describing how to use the new
'coccicheck' target. Finally, some SmPL examples are provided.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>

Nicolas Palix (7):
  Add a target to use the Coccinelle checker
  Add Documentation/coccinelle.txt
  Add scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
  Add scripts/coccinelle/alloc/kzalloc-simple.cocci
  Add scripts/coccinelle/resource_size.cocci
  Add scripts/coccinelle/err_cast.cocci
  Add scripts/coccinelle/deref_null.cocci

 Documentation/coccinelle.txt                     |  258 +++++++++++++++++++
 MAINTAINERS                                      |   10 +
 Makefile                                         |   10 +-
 scripts/Makefile.help                            |    3 +
 scripts/coccicheck                               |   54 ++++
 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci |   67 +++++
 scripts/coccinelle/alloc/kzalloc-simple.cocci    |   82 ++++++
 scripts/coccinelle/deref_null.cocci              |  293 ++++++++++++++++++++++
 scripts/coccinelle/err_cast.cocci                |   56 ++++
 scripts/coccinelle/resource_size.cocci           |   93 +++++++
 10 files changed, 923 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/coccinelle.txt
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck
 create mode 100644 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
 create mode 100644 scripts/coccinelle/alloc/kzalloc-simple.cocci
 create mode 100644 scripts/coccinelle/deref_null.cocci
 create mode 100644 scripts/coccinelle/err_cast.cocci
 create mode 100644 scripts/coccinelle/resource_size.cocci


^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

A 'coccicheck' target is added. It can be called with four different
modes. Each one generates a different kind of output, i.e. context,
patch, org, report, according to the corresponding mode to be
activated.

The new target calls the 'coccicheck' front-end in the 'scripts'
directory with the MODE argument. Every SmPL file in the
subdirectories of 'scripts/coccinelle' is then given to the front-end
and applied to the entire source tree.

The four modes behave as follows:

'report' generates a list in the following format:
  file:line:column-column: message

'patch' proposes a fix, when possible.

'context' highlights lines of interest and their context in a
diff-like style. Lines of interest are indicated with '-'.

'org' generates a report in the Org mode format of Emacs.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 MAINTAINERS           |   10 +++++++++
 Makefile              |   10 ++++++--
 scripts/Makefile.help |    3 ++
 scripts/coccicheck    |   54 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+), 3 deletions(-)
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck

diff --git a/MAINTAINERS b/MAINTAINERS
index 67accd7..5b3c95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1569,6 +1569,16 @@ L:	platform-driver-x86@vger.kernel.org
 S:	Supported
 F:	drivers/platform/x86/classmate-laptop.c
 
+COCCINELLE/Semantic Patches (SmPL)
+M:	Julia Lawall <julia@diku.dk>
+M:	Gilles Muller <Gilles.Muller@lip6.fr>
+M:	Nicolas Palix <npalix@diku.dk>
+L:	cocci@diku.dk (moderated for non-subscribers)
+W:	http://coccinelle.lip6.fr/
+S:	Supported
+F:	scripts/coccinelle/
+F:	scripts/coccicheck
+
 CODA FILE SYSTEM
 M:	Jan Harkes <jaharkes@cs.cmu.edu>
 M:	coda@cs.cmu.edu
diff --git a/Makefile b/Makefile
index 654c31a..09d9d08 100644
--- a/Makefile
+++ b/Makefile
@@ -412,7 +412,7 @@ endif
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags help %docs check% coccicheck \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1279,8 +1279,9 @@ help:
 	@echo  '  includecheck    - Check for duplicate included header files'
 	@echo  '  export_report   - List the usages of all exported symbols'
 	@echo  '  headers_check   - Sanity check on exported headers'
-	@echo  '  headerdep       - Detect inclusion cycles in headers'; \
-	 echo  ''
+	@echo  '  headerdep       - Detect inclusion cycles in headers'
+	@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
+	@echo  ''
 	@echo  'Kernel packaging:'
 	@$(MAKE) $(build)=$(package-dir) help
 	@echo  ''
@@ -1439,6 +1440,9 @@ versioncheck:
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
 
+coccicheck:
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
+
 namespacecheck:
 	$(PERL) $(srctree)/scripts/namespace.pl
 
diff --git a/scripts/Makefile.help b/scripts/Makefile.help
new file mode 100644
index 0000000..d03608f
--- /dev/null
+++ b/scripts/Makefile.help
@@ -0,0 +1,3 @@
+
+checker-help:
+	@echo  '  coccicheck      - Check with Coccinelle.'
diff --git a/scripts/coccicheck b/scripts/coccicheck
new file mode 100755
index 0000000..037424b
--- /dev/null
+++ b/scripts/coccicheck
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+SPATCH="`which ${SPATCH:=spatch}`"
+
+if [ ! -x "$SPATCH" ]; then
+    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
+    exit 1
+fi
+
+if [ "$MODE" = "" ] ; then
+    echo 'You have not explicitly specify the mode to use. Fallback to "report".'
+    echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
+    echo 'Available modes are: report, patch, context, org'
+    MODE="report"
+fi
+
+echo ''
+echo 'Please check for false positives in the output before submitting a patch.'
+echo 'When using "patch" mode, carefully review the patch before submitting it.'
+echo ''
+
+function coccinelle {
+    COCCI="$1"
+    DIR="$2"
+
+    OPT=`grep "Option" $COCCI | cut -d':' -f2`
+    FILE=`echo $COCCI | sed "s|$DIR/||"`
+
+    echo "Processing `basename $COCCI` with option(s) \"$OPT\""
+    echo 'Message example to submit a patch:'
+
+    sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
+
+    echo ' The semantic patch that makes this change is available'
+    echo " in $FILE."
+    echo ''
+    echo ' More information about semantic patching is available at'
+    echo ' http://coccinelle.lip6.fr/'
+    echo ''
+
+#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
+#
+#    $SPATCH -D $MODE -very_quiet -parse_cocci $COCCI $OPT > /dev/null
+
+    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
+}
+
+if [ "$COCCI" = "" ] ; then
+    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
+	coccinelle $f $srctree;
+    done
+else
+    coccinelle $COCCI $srctree
+fi
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

A 'coccicheck' target is added. It can be called with four different
modes. Each one generates a different kind of output, i.e. context,
patch, org, report, according to the corresponding mode to be
activated.

The new target calls the 'coccicheck' front-end in the 'scripts'
directory with the MODE argument. Every SmPL file in the
subdirectories of 'scripts/coccinelle' is then given to the front-end
and applied to the entire source tree.

The four modes behave as follows:

'report' generates a list in the following format:
  file:line:column-column: message

'patch' proposes a fix, when possible.

'context' highlights lines of interest and their context in a
diff-like style. Lines of interest are indicated with '-'.

'org' generates a report in the Org mode format of Emacs.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 MAINTAINERS           |   10 +++++++++
 Makefile              |   10 ++++++--
 scripts/Makefile.help |    3 ++
 scripts/coccicheck    |   54 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+), 3 deletions(-)
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck

diff --git a/MAINTAINERS b/MAINTAINERS
index 67accd7..5b3c95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1569,6 +1569,16 @@ L:	platform-driver-x86@vger.kernel.org
 S:	Supported
 F:	drivers/platform/x86/classmate-laptop.c
 
+COCCINELLE/Semantic Patches (SmPL)
+M:	Julia Lawall <julia@diku.dk>
+M:	Gilles Muller <Gilles.Muller@lip6.fr>
+M:	Nicolas Palix <npalix@diku.dk>
+L:	cocci@diku.dk (moderated for non-subscribers)
+W:	http://coccinelle.lip6.fr/
+S:	Supported
+F:	scripts/coccinelle/
+F:	scripts/coccicheck
+
 CODA FILE SYSTEM
 M:	Jan Harkes <jaharkes@cs.cmu.edu>
 M:	coda@cs.cmu.edu
diff --git a/Makefile b/Makefile
index 654c31a..09d9d08 100644
--- a/Makefile
+++ b/Makefile
@@ -412,7 +412,7 @@ endif
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags help %docs check% coccicheck \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1279,8 +1279,9 @@ help:
 	@echo  '  includecheck    - Check for duplicate included header files'
 	@echo  '  export_report   - List the usages of all exported symbols'
 	@echo  '  headers_check   - Sanity check on exported headers'
-	@echo  '  headerdep       - Detect inclusion cycles in headers'; \
-	 echo  ''
+	@echo  '  headerdep       - Detect inclusion cycles in headers'
+	@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
+	@echo  ''
 	@echo  'Kernel packaging:'
 	@$(MAKE) $(build)=$(package-dir) help
 	@echo  ''
@@ -1439,6 +1440,9 @@ versioncheck:
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
 
+coccicheck:
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
+
 namespacecheck:
 	$(PERL) $(srctree)/scripts/namespace.pl
 
diff --git a/scripts/Makefile.help b/scripts/Makefile.help
new file mode 100644
index 0000000..d03608f
--- /dev/null
+++ b/scripts/Makefile.help
@@ -0,0 +1,3 @@
+
+checker-help:
+	@echo  '  coccicheck      - Check with Coccinelle.'
diff --git a/scripts/coccicheck b/scripts/coccicheck
new file mode 100755
index 0000000..037424b
--- /dev/null
+++ b/scripts/coccicheck
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+SPATCH="`which ${SPATCH:=spatch}`"
+
+if [ ! -x "$SPATCH" ]; then
+    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
+    exit 1
+fi
+
+if [ "$MODE" = "" ] ; then
+    echo 'You have not explicitly specify the mode to use. Fallback to "report".'
+    echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
+    echo 'Available modes are: report, patch, context, org'
+    MODE="report"
+fi
+
+echo ''
+echo 'Please check for false positives in the output before submitting a patch.'
+echo 'When using "patch" mode, carefully review the patch before submitting it.'
+echo ''
+
+function coccinelle {
+    COCCI="$1"
+    DIR="$2"
+
+    OPT=`grep "Option" $COCCI | cut -d':' -f2`
+    FILE=`echo $COCCI | sed "s|$DIR/||"`
+
+    echo "Processing `basename $COCCI` with option(s) \"$OPT\""
+    echo 'Message example to submit a patch:'
+
+    sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
+
+    echo ' The semantic patch that makes this change is available'
+    echo " in $FILE."
+    echo ''
+    echo ' More information about semantic patching is available at'
+    echo ' http://coccinelle.lip6.fr/'
+    echo ''
+
+#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
+#
+#    $SPATCH -D $MODE -very_quiet -parse_cocci $COCCI $OPT > /dev/null
+
+    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
+}
+
+if [ "$COCCI" = "" ] ; then
+    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
+	coccinelle $f $srctree;
+    done
+else
+    coccinelle $COCCI $srctree
+fi
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 2/7] Add Documentation/coccinelle.txt
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

The purpose of this file is to document how to use Coccinelle and its
spatch tool to check the Linux kernel.

It gives information on where and how to retrieve Coccinelle, and how
to use it with the Coccinelle scripts integrated in the Linux kernel.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 Documentation/coccinelle.txt |  258 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 258 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/coccinelle.txt

diff --git a/Documentation/coccinelle.txt b/Documentation/coccinelle.txt
new file mode 100644
index 0000000..ba3315d
--- /dev/null
+++ b/Documentation/coccinelle.txt
@@ -0,0 +1,258 @@
+Copyright 2010 Nicolas Palix <npalix@diku.dk>
+Copyright 2010 Julia Lawall <julia@diku.dk>
+Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr>
+
+
+ Getting Coccinelle
+~~~~~~~~~~~~~~~~~~~~
+
+The semantic patches included in the kernel use the 'virtual rule'
+feature which was introduced in Coccinelle version 0.1.11.
+
+Coccinelle (>=0.2.0) is available through the package manager
+of many distributions, e.g. :
+
+ - Debian (>=squeeze)
+ - Fedora (>=13)
+ - Ubuntu (>=10.04 Karmic Koala)
+ - OpenSUSE
+ - Arch Linux
+ - NetBSD
+ - FreeBSD
+
+
+You can get the latest version released from the Coccinelle homepage at
+http://coccinelle.lip6.fr/
+
+Once you have it, run the following command:
+
+     	./configure
+        make
+
+as a regular user, and install it with
+
+        sudo make install
+
+
+ Using Coccinelle on the Linux kernel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A Coccinelle-specific target is defined in the top level
+Makefile. This target is named 'coccicheck' and calls the 'coccicheck'
+front-end in the 'scripts' directory.
+
+Four modes are defined: report, patch, context, and org. The mode to
+use is specified by setting the MODE variable with 'MODE=<mode>'.
+
+'report' generates a list in the following format:
+  file:line:column-column: message
+
+'patch' proposes a fix, when possible.
+
+'context' highlights lines of interest and their context in a
+diff-like style.Lines of interest are indicated with '-'.
+
+'org' generates a report in the Org mode format of Emacs.
+
+Note that not all semantic patches implement all modes.
+
+To make a report for every semantic patch, run the following command:
+
+	make coccicheck MODE=report
+
+NB: The 'report' mode is the default one.
+
+To produce patches, run:
+
+	make coccicheck MODE=patch
+
+
+The coccicheck target applies every semantic patch available in the
+subdirectories of 'scripts/coccinelle' to the entire Linux kernel.
+
+For each semantic patch, a changelog message is proposed.  It gives a
+description of the problem being checked by the semantic patch, and
+includes a reference to Coccinelle.
+
+As any static code analyzer, Coccinelle produces false
+positives. Thus, reports must be carefully checked, and patches
+reviewed.
+
+
+ Using Coccinelle with a single semantic patch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The optional make variable COCCI can be used to check a single
+semantic patch. In that case, the variable must be initialized with
+the name of the semantic patch to apply.
+
+For instance:
+
+	make coccicheck COCCI=<my_SP.cocci> MODE=patch
+or
+	make coccicheck COCCI=<my_SP.cocci> MODE=report
+
+
+ Proposing new semantic patches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New semantic patches can be proposed and submitted by kernel
+developers. For sake of clarity, they should be organized in the
+subdirectories of 'scripts/coccinelle/'.
+
+
+ Detailed description of the 'report' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'report' generates a list in the following format:
+  file:line:column-column: message
+
+Example:
+
+Running
+
+	make coccicheck MODE=report COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="ERR_CAST can be used with %s" % (x)
+coccilib.report.print_report(p[0], msg)
+</smpl>
+
+This SmPL excerpt generates entries on the standard output, as
+illustrated below:
+
+/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg
+/home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth
+/home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg
+
+
+ Detailed description of the 'patch' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When the 'patch' mode is available, it proposes a fix for each problem
+identified.
+
+Example:
+
+Running
+	make coccicheck MODE=patch COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@ depends on !context && patch && !org && !report @
+expression x;
+@@
+
+- ERR_PTR(PTR_ERR(x))
++ ERR_CAST(x)
+</smpl>
+
+This SmPL excerpt generates patch hunks on the standard output, as
+illustrated below:
+
+diff -u -p a/crypto/ctr.c b/crypto/ctr.c
+--- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
++++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200
+@@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct
+ 	alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
+ 				  CRYPTO_ALG_TYPE_MASK);
+ 	if (IS_ERR(alg))
+-		return ERR_PTR(PTR_ERR(alg));
++		return ERR_CAST(alg);
+ 
+ 	/* Block size must be >= 4 bytes. */
+ 	err = -EINVAL;
+
+ Detailed description of the 'context' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'context' highlights lines of interest and their context
+in a diff-like style.
+
+NOTE: The diff-like output generated is NOT an applicable patch. The
+      intent of the 'context' mode is to highlight the important lines
+      (annotated with minus, '-') and gives some surrounding context
+      lines around. This output can be used with the diff mode of
+      Emacs to review the code.
+
+Example:
+
+Running
+	make coccicheck MODE=context COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@ depends on context && !patch && !org && !report@
+expression x;
+@@
+
+* ERR_PTR(PTR_ERR(x))
+</smpl>
+
+This SmPL excerpt generates diff hunks on the standard output, as
+illustrated below:
+
+diff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing
+--- /home/user/linux/crypto/ctr.c	2010-05-26 10:49:38.000000000 +0200
++++ /tmp/nothing
+@@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct
+ 	alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
+ 				  CRYPTO_ALG_TYPE_MASK);
+ 	if (IS_ERR(alg))
+-		return ERR_PTR(PTR_ERR(alg));
+ 
+ 	/* Block size must be >= 4 bytes. */
+ 	err = -EINVAL;
+
+ Detailed description of the 'org' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'org' generates a report in the Org mode format of Emacs.
+
+Example:
+
+Running
+	make coccicheck MODE=org COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="ERR_CAST can be used with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+</smpl>
+
+This SmPL excerpt generates Org entries on the standard output, as
+illustrated below:
+
+* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]]
+* TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]]
+* TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 2/7] Add Documentation/coccinelle.txt
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

The purpose of this file is to document how to use Coccinelle and its
spatch tool to check the Linux kernel.

It gives information on where and how to retrieve Coccinelle, and how
to use it with the Coccinelle scripts integrated in the Linux kernel.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 Documentation/coccinelle.txt |  258 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 258 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/coccinelle.txt

diff --git a/Documentation/coccinelle.txt b/Documentation/coccinelle.txt
new file mode 100644
index 0000000..ba3315d
--- /dev/null
+++ b/Documentation/coccinelle.txt
@@ -0,0 +1,258 @@
+Copyright 2010 Nicolas Palix <npalix@diku.dk>
+Copyright 2010 Julia Lawall <julia@diku.dk>
+Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr>
+
+
+ Getting Coccinelle
+~~~~~~~~~~~~~~~~~~~~
+
+The semantic patches included in the kernel use the 'virtual rule'
+feature which was introduced in Coccinelle version 0.1.11.
+
+Coccinelle (>=0.2.0) is available through the package manager
+of many distributions, e.g. :
+
+ - Debian (>=squeeze)
+ - Fedora (>\x13)
+ - Ubuntu (>\x10.04 Karmic Koala)
+ - OpenSUSE
+ - Arch Linux
+ - NetBSD
+ - FreeBSD
+
+
+You can get the latest version released from the Coccinelle homepage at
+http://coccinelle.lip6.fr/
+
+Once you have it, run the following command:
+
+     	./configure
+        make
+
+as a regular user, and install it with
+
+        sudo make install
+
+
+ Using Coccinelle on the Linux kernel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A Coccinelle-specific target is defined in the top level
+Makefile. This target is named 'coccicheck' and calls the 'coccicheck'
+front-end in the 'scripts' directory.
+
+Four modes are defined: report, patch, context, and org. The mode to
+use is specified by setting the MODE variable with 'MODE=<mode>'.
+
+'report' generates a list in the following format:
+  file:line:column-column: message
+
+'patch' proposes a fix, when possible.
+
+'context' highlights lines of interest and their context in a
+diff-like style.Lines of interest are indicated with '-'.
+
+'org' generates a report in the Org mode format of Emacs.
+
+Note that not all semantic patches implement all modes.
+
+To make a report for every semantic patch, run the following command:
+
+	make coccicheck MODE=report
+
+NB: The 'report' mode is the default one.
+
+To produce patches, run:
+
+	make coccicheck MODE=patch
+
+
+The coccicheck target applies every semantic patch available in the
+subdirectories of 'scripts/coccinelle' to the entire Linux kernel.
+
+For each semantic patch, a changelog message is proposed.  It gives a
+description of the problem being checked by the semantic patch, and
+includes a reference to Coccinelle.
+
+As any static code analyzer, Coccinelle produces false
+positives. Thus, reports must be carefully checked, and patches
+reviewed.
+
+
+ Using Coccinelle with a single semantic patch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The optional make variable COCCI can be used to check a single
+semantic patch. In that case, the variable must be initialized with
+the name of the semantic patch to apply.
+
+For instance:
+
+	make coccicheck COCCI=<my_SP.cocci> MODE=patch
+or
+	make coccicheck COCCI=<my_SP.cocci> MODE=report
+
+
+ Proposing new semantic patches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New semantic patches can be proposed and submitted by kernel
+developers. For sake of clarity, they should be organized in the
+subdirectories of 'scripts/coccinelle/'.
+
+
+ Detailed description of the 'report' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'report' generates a list in the following format:
+  file:line:column-column: message
+
+Example:
+
+Running
+
+	make coccicheck MODE=report COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="ERR_CAST can be used with %s" % (x)
+coccilib.report.print_report(p[0], msg)
+</smpl>
+
+This SmPL excerpt generates entries on the standard output, as
+illustrated below:
+
+/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg
+/home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth
+/home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg
+
+
+ Detailed description of the 'patch' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When the 'patch' mode is available, it proposes a fix for each problem
+identified.
+
+Example:
+
+Running
+	make coccicheck MODE=patch COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@ depends on !context && patch && !org && !report @
+expression x;
+@@
+
+- ERR_PTR(PTR_ERR(x))
++ ERR_CAST(x)
+</smpl>
+
+This SmPL excerpt generates patch hunks on the standard output, as
+illustrated below:
+
+diff -u -p a/crypto/ctr.c b/crypto/ctr.c
+--- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
++++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200
+@@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct
+ 	alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
+ 				  CRYPTO_ALG_TYPE_MASK);
+ 	if (IS_ERR(alg))
+-		return ERR_PTR(PTR_ERR(alg));
++		return ERR_CAST(alg);
+ 
+ 	/* Block size must be >= 4 bytes. */
+ 	err = -EINVAL;
+
+ Detailed description of the 'context' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'context' highlights lines of interest and their context
+in a diff-like style.
+
+NOTE: The diff-like output generated is NOT an applicable patch. The
+      intent of the 'context' mode is to highlight the important lines
+      (annotated with minus, '-') and gives some surrounding context
+      lines around. This output can be used with the diff mode of
+      Emacs to review the code.
+
+Example:
+
+Running
+	make coccicheck MODE=context COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@ depends on context && !patch && !org && !report@
+expression x;
+@@
+
+* ERR_PTR(PTR_ERR(x))
+</smpl>
+
+This SmPL excerpt generates diff hunks on the standard output, as
+illustrated below:
+
+diff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing
+--- /home/user/linux/crypto/ctr.c	2010-05-26 10:49:38.000000000 +0200
++++ /tmp/nothing
+@@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct
+ 	alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
+ 				  CRYPTO_ALG_TYPE_MASK);
+ 	if (IS_ERR(alg))
+-		return ERR_PTR(PTR_ERR(alg));
+ 
+ 	/* Block size must be >= 4 bytes. */
+ 	err = -EINVAL;
+
+ Detailed description of the 'org' mode
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'org' generates a report in the Org mode format of Emacs.
+
+Example:
+
+Running
+	make coccicheck MODE=org COCCI=scripts/coccinelle/err_cast.cocci
+
+will execute the following part of the SmPL script.
+
+<smpl>
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="ERR_CAST can be used with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+</smpl>
+
+This SmPL excerpt generates Org entries on the standard output, as
+illustrated below:
+
+* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb\x188::colb=9::cole\x16][ERR_CAST can be used with alg]]
+* TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linba9::colb=9::cole\x16][ERR_CAST can be used with auth]]
+* TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb"7::colb=9::cole\x16][ERR_CAST can be used with alg]]
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 3/7] Add scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

The purpose of this semantic patch is to remove
useless casts, as mentioned in the Linux documentation.
See Chapter 14 in Documentation/CodingStyle for more information.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci |   67 ++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci

diff --git a/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci b/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
new file mode 100644
index 0000000..7d4771d
--- /dev/null
+++ b/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
@@ -0,0 +1,67 @@
+///
+/// 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
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@depends on context@
+type T;
+@@
+
+* (T *)
+  \(kmalloc\|kzalloc\|kcalloc\)(...)
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@depends on patch@
+type T;
+@@
+
+- (T *)
+  \(kmalloc\|kzalloc\|kcalloc\)(...)
+
+//----------------------------------------------------------
+//  For org and report mode
+//----------------------------------------------------------
+
+@r depends on org || report@
+type T;
+position p;
+@@
+
+ (T@p *)\(kmalloc\|kzalloc\|kcalloc\)(...)
+
+@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 k[cmz]alloc to (%s *) is useless." % (t)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 3/7] Add scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

The purpose of this semantic patch is to remove
useless casts, as mentioned in the Linux documentation.
See Chapter 14 in Documentation/CodingStyle for more information.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci |   67 ++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/alloc/drop_kmalloc_cast.cocci

diff --git a/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci b/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
new file mode 100644
index 0000000..7d4771d
--- /dev/null
+++ b/scripts/coccinelle/alloc/drop_kmalloc_cast.cocci
@@ -0,0 +1,67 @@
+///
+/// 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
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@depends on context@
+type T;
+@@
+
+* (T *)
+  \(kmalloc\|kzalloc\|kcalloc\)(...)
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@depends on patch@
+type T;
+@@
+
+- (T *)
+  \(kmalloc\|kzalloc\|kcalloc\)(...)
+
+//----------------------------------------------------------
+//  For org and report mode
+//----------------------------------------------------------
+
+@r depends on org || report@
+type T;
+position p;
+@@
+
+ (T@p *)\(kmalloc\|kzalloc\|kcalloc\)(...)
+
+@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 k[cmz]alloc to (%s *) is useless." % (t)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 4/7] Add scripts/coccinelle/alloc/kzalloc-simple.cocci
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This semantic patch replaces a pair of calls to kmalloc and memset
by a single call to kzalloc.

It only looks for simple cases to avoid false positives.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/alloc/kzalloc-simple.cocci |   82 +++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/alloc/kzalloc-simple.cocci

diff --git a/scripts/coccinelle/alloc/kzalloc-simple.cocci b/scripts/coccinelle/alloc/kzalloc-simple.cocci
new file mode 100644
index 0000000..2eae828
--- /dev/null
+++ b/scripts/coccinelle/alloc/kzalloc-simple.cocci
@@ -0,0 +1,82 @@
+///
+/// kzalloc should be used rather than kmalloc followed by memset 0
+///
+// Confidence: High
+// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
+// Options: -no_includes -include_headers
+//
+// Keywords: kmalloc, kzalloc
+// Version min: < 2.6.12 kmalloc
+// Version min:   2.6.14 kzalloc
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@depends on context@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+@@
+
+* x = (T)kmalloc(E1,E2);
+  if ((x==NULL) || ...) S
+* memset((T2)x,0,E1);
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@depends on patch@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+@@
+
+- x = (T)kmalloc(E1,E2);
++ x = kzalloc(E1,E2);
+  if ((x==NULL) || ...) S
+- memset((T2)x,0,E1);
+
+//----------------------------------------------------------
+//  For org mode
+//----------------------------------------------------------
+
+@r depends on org || report@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+position p;
+@@
+
+ x = (T)kmalloc@p(E1,E2);
+ if ((x==NULL) || ...) S
+ memset((T2)x,0,E1);
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="%s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 4/7] Add scripts/coccinelle/alloc/kzalloc-simple.cocci
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This semantic patch replaces a pair of calls to kmalloc and memset
by a single call to kzalloc.

It only looks for simple cases to avoid false positives.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/alloc/kzalloc-simple.cocci |   82 +++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/alloc/kzalloc-simple.cocci

diff --git a/scripts/coccinelle/alloc/kzalloc-simple.cocci b/scripts/coccinelle/alloc/kzalloc-simple.cocci
new file mode 100644
index 0000000..2eae828
--- /dev/null
+++ b/scripts/coccinelle/alloc/kzalloc-simple.cocci
@@ -0,0 +1,82 @@
+///
+/// kzalloc should be used rather than kmalloc followed by memset 0
+///
+// Confidence: High
+// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
+// Options: -no_includes -include_headers
+//
+// Keywords: kmalloc, kzalloc
+// Version min: < 2.6.12 kmalloc
+// Version min:   2.6.14 kzalloc
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@depends on context@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+@@
+
+* x = (T)kmalloc(E1,E2);
+  if ((x=NULL) || ...) S
+* memset((T2)x,0,E1);
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@depends on patch@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+@@
+
+- x = (T)kmalloc(E1,E2);
++ x = kzalloc(E1,E2);
+  if ((x=NULL) || ...) S
+- memset((T2)x,0,E1);
+
+//----------------------------------------------------------
+//  For org mode
+//----------------------------------------------------------
+
+@r depends on org || report@
+type T, T2;
+expression x;
+expression E1,E2;
+statement S;
+position p;
+@@
+
+ x = (T)kmalloc@p(E1,E2);
+ if ((x=NULL) || ...) S
+ memset((T2)x,0,E1);
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="%s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 5/7] Add scripts/coccinelle/resource_size.cocci
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This semantic patch replaces explicit computations
of resource size by a call to resource_size.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/resource_size.cocci |   93 ++++++++++++++++++++++++++++++++
 1 files changed, 93 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/resource_size.cocci

diff --git a/scripts/coccinelle/resource_size.cocci b/scripts/coccinelle/resource_size.cocci
new file mode 100644
index 0000000..1935a58
--- /dev/null
+++ b/scripts/coccinelle/resource_size.cocci
@@ -0,0 +1,93 @@
+///
+/// Use resource_size function on resource object
+/// instead of explicit computation.
+///
+//  Confidence: High
+//  Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.  GPLv2.
+//  Copyright: (C) 2009, 2010 Julia Lawall, DIKU.  GPLv2.
+//  Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+//  URL: http://coccinelle.lip6.fr/
+//  Options:
+//
+//  Keywords: resource_size
+//  Version min: 2.6.27 resource_size
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@r_context depends on context && !patch && !org@
+struct resource *res;
+@@
+
+* (res->end - res->start) + 1
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@r_patch depends on !context && patch && !org@
+struct resource *res;
+@@
+
+- (res->end - res->start) + 1
++ resource_size(res)
+
+//----------------------------------------------------------
+//  For org mode
+//----------------------------------------------------------
+
+
+@r_org depends on !context && !patch && (org || report)@
+struct resource *res;
+position p;
+@@
+
+ (res->end@p - res->start) + 1
+
+@rbad_org depends on !context && !patch && (org || report)@
+struct resource *res;
+position p != r_org.p;
+@@
+
+ res->end@p - res->start
+
+@script:python depends on org@
+p << r_org.p;
+x << r_org.res;
+@@
+
+msg="ERROR with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r_org.p;
+x << r_org.res;
+@@
+
+msg="ERROR: Missing resource_size with %s" % (x)
+coccilib.report.print_report(p[0], msg)
+
+@script:python depends on org@
+p << rbad_org.p;
+x << rbad_org.res;
+@@
+
+msg="WARNING with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << rbad_org.p;
+x << rbad_org.res;
+@@
+
+msg="WARNING: Suspicious code. resource_size is maybe missing with %s" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 5/7] Add scripts/coccinelle/resource_size.cocci
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

This semantic patch replaces explicit computations
of resource size by a call to resource_size.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/resource_size.cocci |   93 ++++++++++++++++++++++++++++++++
 1 files changed, 93 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/resource_size.cocci

diff --git a/scripts/coccinelle/resource_size.cocci b/scripts/coccinelle/resource_size.cocci
new file mode 100644
index 0000000..1935a58
--- /dev/null
+++ b/scripts/coccinelle/resource_size.cocci
@@ -0,0 +1,93 @@
+///
+/// Use resource_size function on resource object
+/// instead of explicit computation.
+///
+//  Confidence: High
+//  Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.  GPLv2.
+//  Copyright: (C) 2009, 2010 Julia Lawall, DIKU.  GPLv2.
+//  Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+//  URL: http://coccinelle.lip6.fr/
+//  Options:
+//
+//  Keywords: resource_size
+//  Version min: 2.6.27 resource_size
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+//----------------------------------------------------------
+//  For context mode
+//----------------------------------------------------------
+
+@r_context depends on context && !patch && !org@
+struct resource *res;
+@@
+
+* (res->end - res->start) + 1
+
+//----------------------------------------------------------
+//  For patch mode
+//----------------------------------------------------------
+
+@r_patch depends on !context && patch && !org@
+struct resource *res;
+@@
+
+- (res->end - res->start) + 1
++ resource_size(res)
+
+//----------------------------------------------------------
+//  For org mode
+//----------------------------------------------------------
+
+
+@r_org depends on !context && !patch && (org || report)@
+struct resource *res;
+position p;
+@@
+
+ (res->end@p - res->start) + 1
+
+@rbad_org depends on !context && !patch && (org || report)@
+struct resource *res;
+position p != r_org.p;
+@@
+
+ res->end@p - res->start
+
+@script:python depends on org@
+p << r_org.p;
+x << r_org.res;
+@@
+
+msg="ERROR with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r_org.p;
+x << r_org.res;
+@@
+
+msg="ERROR: Missing resource_size with %s" % (x)
+coccilib.report.print_report(p[0], msg)
+
+@script:python depends on org@
+p << rbad_org.p;
+x << rbad_org.res;
+@@
+
+msg="WARNING with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << rbad_org.p;
+x << rbad_org.res;
+@@
+
+msg="WARNING: Suspicious code. resource_size is maybe missing with %s" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 6/7] Add scripts/coccinelle/err_cast.cocci
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

Add a Coccinelle file to use the ERR_CAST function

Before the release 2.6.25, one had to use ERR_PTR(PTR_ERR(...))  to
convert the pointer type of an error. Since then, the function
ERR_CAST has been available for that purpose.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/err_cast.cocci |   56 +++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/err_cast.cocci

diff --git a/scripts/coccinelle/err_cast.cocci b/scripts/coccinelle/err_cast.cocci
new file mode 100644
index 0000000..2ce1150
--- /dev/null
+++ b/scripts/coccinelle/err_cast.cocci
@@ -0,0 +1,56 @@
+///
+/// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...))
+///
+// Confidence: High
+// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2009, 2010 Julia Lawall, DIKU.  GPLv2.
+// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/
+// Options:
+//
+// Keywords: ERR_PTR, PTR_ERR, ERR_CAST
+// Version min: 2.6.25
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+
+@ depends on context && !patch && !org && !report@
+expression x;
+@@
+
+* ERR_PTR(PTR_ERR(x))
+
+@ depends on !context && patch && !org && !report @
+expression x;
+@@
+
+- ERR_PTR(PTR_ERR(x))
++ ERR_CAST(x)
+
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING ERR_CAST can be used with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING: ERR_CAST can be used with %s" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 6/7] Add scripts/coccinelle/err_cast.cocci
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

Add a Coccinelle file to use the ERR_CAST function

Before the release 2.6.25, one had to use ERR_PTR(PTR_ERR(...))  to
convert the pointer type of an error. Since then, the function
ERR_CAST has been available for that purpose.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/err_cast.cocci |   56 +++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/err_cast.cocci

diff --git a/scripts/coccinelle/err_cast.cocci b/scripts/coccinelle/err_cast.cocci
new file mode 100644
index 0000000..2ce1150
--- /dev/null
+++ b/scripts/coccinelle/err_cast.cocci
@@ -0,0 +1,56 @@
+///
+/// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...))
+///
+// Confidence: High
+// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2009, 2010 Julia Lawall, DIKU.  GPLv2.
+// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/
+// Options:
+//
+// Keywords: ERR_PTR, PTR_ERR, ERR_CAST
+// Version min: 2.6.25
+//
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+
+@ depends on context && !patch && !org && !report@
+expression x;
+@@
+
+* ERR_PTR(PTR_ERR(x))
+
+@ depends on !context && patch && !org && !report @
+expression x;
+@@
+
+- ERR_PTR(PTR_ERR(x))
++ ERR_CAST(x)
+
+@r depends on !context && !patch && (org || report)@
+expression x;
+position p;
+@@
+
+ ERR_PTR@p(PTR_ERR(x))
+
+@script:python depends on org@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING ERR_CAST can be used with %s" % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+coccilib.org.print_todo(p[0], msg_safe)
+
+@script:python depends on report@
+p << r.p;
+x << r.x;
+@@
+
+msg="WARNING: ERR_CAST can be used with %s" % (x)
+coccilib.report.print_report(p[0], msg)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 7/7] Add scripts/coccinelle/deref_null.cocci
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-06 15:15   ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

Add a Coccinelle file to identify the dereferences of NULL variables

This semantic patch identifies when a variable is known to be NULL
after a test, but it is still dereferenced later.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/deref_null.cocci |  293 +++++++++++++++++++++++++++++++++++
 1 files changed, 293 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/deref_null.cocci

diff --git a/scripts/coccinelle/deref_null.cocci b/scripts/coccinelle/deref_null.cocci
new file mode 100644
index 0000000..9969d76
--- /dev/null
+++ b/scripts/coccinelle/deref_null.cocci
@@ -0,0 +1,293 @@
+///
+/// A variable is dereference under a NULL test.
+/// Even though it is know to be NULL.
+///
+// Confidence: Moderate
+// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
+// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/
+// Comments: -I ... -all_includes can give more complete results
+// Options:
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+@initialize:python depends on !context && patch && !org && !report@
+
+import sys
+print >> sys.stderr, "This semantic patch does not support the 'patch' mode."
+
+@depends on patch@
+@@
+
+this_rule_should_never_matches();
+
+@ifm depends on !patch@
+expression *E;
+statement S1,S2;
+position p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...) S1 else S2
+
+// The following two rules are separate, because both can match a single
+// expression in different ways
+@pr1 depends on !patch expression@
+expression *ifm.E;
+identifier f;
+position p1;
+@@
+
+ (E != NULL && ...) ? <+...E->f@p1...+> : ...
+
+@pr2 depends on !patch expression@
+expression *ifm.E;
+identifier f;
+position p2;
+@@
+
+(
+  (E != NULL) && ... && <+...E->f@p2...+>
+|
+  (E == NULL) || ... || <+...E->f@p2...+>
+|
+ sizeof(<+...E->f@p2...+>)
+)
+
+// For org and report modes
+
+@r depends on !context && !patch && (org || report) exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+ E->f@p // bad use
+)
+  ... when any
+  return ...;
+}
+else S3
+
+@script:python depends on !context && !patch && !org && report@
+p << r.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+coccilib.report.print_report(p[0], msg)
+cocci.include_match(False)
+
+@script:python depends on !context && !patch && org && !report@
+p << r.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+cocci.print_main(msg_safe,p)
+cocci.include_match(False)
+
+@s depends on !context && !patch && (org || report) exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+ E->f@p // bad use
+)
+  ... when any
+}
+else S3
+
+@script:python depends on !context && !patch && !org && report@
+p << s.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+coccilib.report.print_report(p[0], msg)
+
+@script:python depends on !context && !patch && org && !report@
+p << s.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+cocci.print_main(msg_safe,p)
+
+// For context mode
+
+@depends on context && !patch && !org && !report exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+* E->f@p // bad use
+)
+  ... when any
+  return ...;
+}
+else S3
+
+// The following three rules are duplicates of ifm, pr1 and pr2 respectively.
+// It is need because the previous rule as already made a "change".
+
+@ifm1 depends on !patch@
+expression *E;
+statement S1,S2;
+position p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...) S1 else S2
+
+@pr11 depends on !patch expression@
+expression *ifm1.E;
+identifier f;
+position p1;
+@@
+
+ (E != NULL && ...) ? <+...E->f@p1...+> : ...
+
+@pr12 depends on !patch expression@
+expression *ifm1.E;
+identifier f;
+position p2;
+@@
+
+(
+  (E != NULL) && ... && <+...E->f@p2...+>
+|
+  (E == NULL) || ... || <+...E->f@p2...+>
+|
+ sizeof(<+...E->f@p2...+>)
+)
+
+@depends on context && !patch && !org && !report exists@
+expression subE <= ifm1.E;
+expression *ifm1.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr11.p1,pr12.p2};
+position ifm1.p1;
+@@
+
+if@p1 ((E == NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+* E->f@p // bad use
+)
+  ... when any
+}
+else S3
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH 7/7] Add scripts/coccinelle/deref_null.cocci
@ 2010-06-06 15:15   ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-06 15:15 UTC (permalink / raw)
  To: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt
  Cc: Nicolas Palix

Add a Coccinelle file to identify the dereferences of NULL variables

This semantic patch identifies when a variable is known to be NULL
after a test, but it is still dereferenced later.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/deref_null.cocci |  293 +++++++++++++++++++++++++++++++++++
 1 files changed, 293 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/deref_null.cocci

diff --git a/scripts/coccinelle/deref_null.cocci b/scripts/coccinelle/deref_null.cocci
new file mode 100644
index 0000000..9969d76
--- /dev/null
+++ b/scripts/coccinelle/deref_null.cocci
@@ -0,0 +1,293 @@
+///
+/// A variable is dereference under a NULL test.
+/// Even though it is know to be NULL.
+///
+// Confidence: Moderate
+// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
+// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/
+// Comments: -I ... -all_includes can give more complete results
+// Options:
+
+virtual context
+virtual patch
+virtual org
+virtual report
+
+@initialize:python depends on !context && patch && !org && !report@
+
+import sys
+print >> sys.stderr, "This semantic patch does not support the 'patch' mode."
+
+@depends on patch@
+@@
+
+this_rule_should_never_matches();
+
+@ifm depends on !patch@
+expression *E;
+statement S1,S2;
+position p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...) S1 else S2
+
+// The following two rules are separate, because both can match a single
+// expression in different ways
+@pr1 depends on !patch expression@
+expression *ifm.E;
+identifier f;
+position p1;
+@@
+
+ (E != NULL && ...) ? <+...E->f@p1...+> : ...
+
+@pr2 depends on !patch expression@
+expression *ifm.E;
+identifier f;
+position p2;
+@@
+
+(
+  (E != NULL) && ... && <+...E->f@p2...+>
+|
+  (E = NULL) || ... || <+...E->f@p2...+>
+|
+ sizeof(<+...E->f@p2...+>)
+)
+
+// For org and report modes
+
+@r depends on !context && !patch && (org || report) exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+ E->f@p // bad use
+)
+  ... when any
+  return ...;
+}
+else S3
+
+@script:python depends on !context && !patch && !org && report@
+p << r.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+coccilib.report.print_report(p[0], msg)
+cocci.include_match(False)
+
+@script:python depends on !context && !patch && org && !report@
+p << r.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+cocci.print_main(msg_safe,p)
+cocci.include_match(False)
+
+@s depends on !context && !patch && (org || report) exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+ E->f@p // bad use
+)
+  ... when any
+}
+else S3
+
+@script:python depends on !context && !patch && !org && report@
+p << s.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+coccilib.report.print_report(p[0], msg)
+
+@script:python depends on !context && !patch && org && !report@
+p << s.p;
+p1 << ifm.p1;
+x << ifm.E;
+@@
+
+msg="ERROR: %s is NULL but dereferenced." % (x)
+msg_safe=msg.replace("[","@(").replace("]",")")
+cocci.print_main(msg_safe,p)
+
+// For context mode
+
+@depends on context && !patch && !org && !report exists@
+expression subE <= ifm.E;
+expression *ifm.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr1.p1,pr2.p2};
+position ifm.p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+* E->f@p // bad use
+)
+  ... when any
+  return ...;
+}
+else S3
+
+// The following three rules are duplicates of ifm, pr1 and pr2 respectively.
+// It is need because the previous rule as already made a "change".
+
+@ifm1 depends on !patch@
+expression *E;
+statement S1,S2;
+position p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...) S1 else S2
+
+@pr11 depends on !patch expression@
+expression *ifm1.E;
+identifier f;
+position p1;
+@@
+
+ (E != NULL && ...) ? <+...E->f@p1...+> : ...
+
+@pr12 depends on !patch expression@
+expression *ifm1.E;
+identifier f;
+position p2;
+@@
+
+(
+  (E != NULL) && ... && <+...E->f@p2...+>
+|
+  (E = NULL) || ... || <+...E->f@p2...+>
+|
+ sizeof(<+...E->f@p2...+>)
+)
+
+@depends on context && !patch && !org && !report exists@
+expression subE <= ifm1.E;
+expression *ifm1.E;
+expression E1,E2;
+identifier f;
+statement S1,S2,S3,S4;
+iterator iter;
+position p!={pr11.p1,pr12.p2};
+position ifm1.p1;
+@@
+
+if@p1 ((E = NULL && ...) || ...)
+{
+  ... when != if (...) S1 else S2
+(
+ iter(subE,...) S4 // no use
+|
+ list_remove_head(E2,subE,...)
+|
+ subE = E1
+|
+ for(subE = E1;...;...) S4
+|
+ subE++
+|
+ ++subE
+|
+ --subE
+|
+ subE--
+|
+ &subE
+|
+* E->f@p // bad use
+)
+  ... when any
+}
+else S3
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-06 15:15   ` Nicolas Palix
@ 2010-06-06 18:16     ` Sam Ravnborg
  -1 siblings, 0 replies; 36+ messages in thread
From: Sam Ravnborg @ 2010-06-06 18:16 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Am?rico Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

On Sun, Jun 06, 2010 at 05:15:01PM +0200, Nicolas Palix wrote:
> A 'coccicheck' target is added. It can be called with four different
> modes. Each one generates a different kind of output, i.e. context,
> patch, org, report, according to the corresponding mode to be
> activated.
> 
> The new target calls the 'coccicheck' front-end in the 'scripts'
> directory with the MODE argument. Every SmPL file in the
> subdirectories of 'scripts/coccinelle' is then given to the front-end
> and applied to the entire source tree.
> 
> The four modes behave as follows:
> 
> 'report' generates a list in the following format:
>   file:line:column-column: message
> 
> 'patch' proposes a fix, when possible.
> 
> 'context' highlights lines of interest and their context in a
> diff-like style. Lines of interest are indicated with '-'.
> 
> 'org' generates a report in the Org mode format of Emacs.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

Hi Nicolas.

This is almost what I had in mind - thanks.

Most importantly it no longer add all the stuff
to the top-level Makefile but defer this to a script.

If/when we decide to move all the checkers to scripts/*
we can do the last adjustments.

Acked-by: Sam Ravnborg <sam@ravnborg.org>

	Sam

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-06 18:16     ` Sam Ravnborg
  0 siblings, 0 replies; 36+ messages in thread
From: Sam Ravnborg @ 2010-06-06 18:16 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Am?rico Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

On Sun, Jun 06, 2010 at 05:15:01PM +0200, Nicolas Palix wrote:
> A 'coccicheck' target is added. It can be called with four different
> modes. Each one generates a different kind of output, i.e. context,
> patch, org, report, according to the corresponding mode to be
> activated.
> 
> The new target calls the 'coccicheck' front-end in the 'scripts'
> directory with the MODE argument. Every SmPL file in the
> subdirectories of 'scripts/coccinelle' is then given to the front-end
> and applied to the entire source tree.
> 
> The four modes behave as follows:
> 
> 'report' generates a list in the following format:
>   file:line:column-column: message
> 
> 'patch' proposes a fix, when possible.
> 
> 'context' highlights lines of interest and their context in a
> diff-like style. Lines of interest are indicated with '-'.
> 
> 'org' generates a report in the Org mode format of Emacs.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

Hi Nicolas.

This is almost what I had in mind - thanks.

Most importantly it no longer add all the stuff
to the top-level Makefile but defer this to a script.

If/when we decide to move all the checkers to scripts/*
we can do the last adjustments.

Acked-by: Sam Ravnborg <sam@ravnborg.org>

	Sam

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-06 18:16     ` Sam Ravnborg
  (?)
@ 2010-06-07 12:35       ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-07 12:35 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Am?rico Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

>From 3765ca033cd6ffe8a1044bc5bbcb9264de042f57 Mon Sep 17 00:00:00 2001
From: Nicolas Palix <npalix@diku.dk>
Date: Mon, 7 Jun 2010 14:28:41 +0200
Subject: [PATCH 1/7] Add a target to use the Coccinelle checker

A 'coccicheck' target is added. It can be called with four different
modes. Each one generates a different kind of output, i.e. context,
patch, org, report, according to the corresponding mode to be
activated.

The new target calls the 'coccicheck' front-end in the 'scripts'
directory with the MODE argument. Every SmPL file in the
subdirectories of 'scripts/coccinelle' is then given to the front-end
and applied to the entire source tree.

The four modes behave as follows:

'report' generates a list in the following format:
  file:line:column-column: message

'patch' proposes a fix, when possible.

'context' highlights lines of interest and their context in a
diff-like style. Lines of interest are indicated with '-'.

'org' generates a report in the Org mode format of Emacs.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---

I figure out that the support for "C=1" and "C=2" was missing
in the previous patch. This new version adds it.

Sorry, for the inconvenience.


 MAINTAINERS           |   10 ++++++
 Makefile              |   10 ++++--
 scripts/Makefile.help |    3 ++
 scripts/coccicheck    |   80 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 3 deletions(-)
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck

diff --git a/MAINTAINERS b/MAINTAINERS
index 67accd7..5b3c95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1569,6 +1569,16 @@ L:	platform-driver-x86@vger.kernel.org
 S:	Supported
 F:	drivers/platform/x86/classmate-laptop.c
 
+COCCINELLE/Semantic Patches (SmPL)
+M:	Julia Lawall <julia@diku.dk>
+M:	Gilles Muller <Gilles.Muller@lip6.fr>
+M:	Nicolas Palix <npalix@diku.dk>
+L:	cocci@diku.dk (moderated for non-subscribers)
+W:	http://coccinelle.lip6.fr/
+S:	Supported
+F:	scripts/coccinelle/
+F:	scripts/coccicheck
+
 CODA FILE SYSTEM
 M:	Jan Harkes <jaharkes@cs.cmu.edu>
 M:	coda@cs.cmu.edu
diff --git a/Makefile b/Makefile
index 654c31a..09d9d08 100644
--- a/Makefile
+++ b/Makefile
@@ -412,7 +412,7 @@ endif
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags help %docs check% coccicheck \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1279,8 +1279,9 @@ help:
 	@echo  '  includecheck    - Check for duplicate included header files'
 	@echo  '  export_report   - List the usages of all exported symbols'
 	@echo  '  headers_check   - Sanity check on exported headers'
-	@echo  '  headerdep       - Detect inclusion cycles in headers'; \
-	 echo  ''
+	@echo  '  headerdep       - Detect inclusion cycles in headers'
+	@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
+	@echo  ''
 	@echo  'Kernel packaging:'
 	@$(MAKE) $(build)=$(package-dir) help
 	@echo  ''
@@ -1439,6 +1440,9 @@ versioncheck:
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
 
+coccicheck:
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
+
 namespacecheck:
 	$(PERL) $(srctree)/scripts/namespace.pl
 
diff --git a/scripts/Makefile.help b/scripts/Makefile.help
new file mode 100644
index 0000000..d03608f
--- /dev/null
+++ b/scripts/Makefile.help
@@ -0,0 +1,3 @@
+
+checker-help:
+	@echo  '  coccicheck      - Check with Coccinelle.'
diff --git a/scripts/coccicheck b/scripts/coccicheck
new file mode 100755
index 0000000..0d83b6f
--- /dev/null
+++ b/scripts/coccicheck
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+SPATCH="`which ${SPATCH:=spatch}`"
+
+if [ "$C" = "1" -o "$C" = "2" ]; then
+    ONLINE=1
+
+# This requires Coccinelle >= 0.2.3
+#    FLAGS="-ignore_unknown_options -very_quiet"
+#    OPTIONS=$*
+
+# Workaround for Coccinelle < 0.2.3
+    FLAGS="-I $srctree/include -very_quiet"
+    shift $(( $# - 1 ))
+    OPTIONS=$1
+else
+    ONLINE=0
+    FLAGS="-very_quiet"
+fi
+
+if [ ! -x "$SPATCH" ]; then
+    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
+    exit 1
+fi
+
+if [ "$MODE" = "" ] ; then
+    if [ "$ONLINE" = "0" ] ; then
+	echo 'You have not explicitly specify the mode to use. Fallback to "report".'
+	echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
+	echo 'Available modes are: report, patch, context, org'
+    fi
+    MODE="report"
+fi
+
+if [ "$ONLINE" = "0" ] ; then
+    echo ''
+    echo 'Please check for false positives in the output before submitting a patch.'
+    echo 'When using "patch" mode, carefully review the patch before submitting it.'
+    echo ''
+fi
+
+coccinelle () {
+    COCCI="$1"
+
+    OPT=`grep "Option" $COCCI | cut -d':' -f2`
+
+#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
+#
+#    $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
+
+    if [ "$ONLINE" = "0" ] ; then
+
+	FILE=`echo $COCCI | sed "s|$DIR/||"`
+
+	echo "Processing `basename $COCCI` with option(s) \"$OPT\""
+	echo 'Message example to submit a patch:'
+
+	sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
+
+	echo ' The semantic patch that makes this change is available'
+	echo " in $FILE."
+	echo ''
+	echo ' More information about semantic patching is available at'
+	echo ' http://coccinelle.lip6.fr/'
+	echo ''
+
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1
+    else
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
+    fi
+
+}
+
+if [ "$COCCI" = "" ] ; then
+    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
+	coccinelle $f
+    done
+else
+    coccinelle $COCCI
+fi
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-07 12:35       ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-07 12:35 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Am?rico Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

From 3765ca033cd6ffe8a1044bc5bbcb9264de042f57 Mon Sep 17 00:00:00 2001
From: Nicolas Palix <npalix@diku.dk>
Date: Mon, 7 Jun 2010 14:28:41 +0200
Subject: [PATCH 1/7] Add a target to use the Coccinelle checker

A 'coccicheck' target is added. It can be called with four different
modes. Each one generates a different kind of output, i.e. context,
patch, org, report, according to the corresponding mode to be
activated.

The new target calls the 'coccicheck' front-end in the 'scripts'
directory with the MODE argument. Every SmPL file in the
subdirectories of 'scripts/coccinelle' is then given to the front-end
and applied to the entire source tree.

The four modes behave as follows:

'report' generates a list in the following format:
  file:line:column-column: message

'patch' proposes a fix, when possible.

'context' highlights lines of interest and their context in a
diff-like style. Lines of interest are indicated with '-'.

'org' generates a report in the Org mode format of Emacs.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---

I figure out that the support for "C=1" and "C=2" was missing
in the previous patch. This new version adds it.

Sorry, for the inconvenience.


 MAINTAINERS           |   10 ++++++
 Makefile              |   10 ++++--
 scripts/Makefile.help |    3 ++
 scripts/coccicheck    |   80 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 3 deletions(-)
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck

diff --git a/MAINTAINERS b/MAINTAINERS
index 67accd7..5b3c95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1569,6 +1569,16 @@ L:	platform-driver-x86@vger.kernel.org
 S:	Supported
 F:	drivers/platform/x86/classmate-laptop.c
 
+COCCINELLE/Semantic Patches (SmPL)
+M:	Julia Lawall <julia@diku.dk>
+M:	Gilles Muller <Gilles.Muller@lip6.fr>
+M:	Nicolas Palix <npalix@diku.dk>
+L:	cocci@diku.dk (moderated for non-subscribers)
+W:	http://coccinelle.lip6.fr/
+S:	Supported
+F:	scripts/coccinelle/
+F:	scripts/coccicheck
+
 CODA FILE SYSTEM
 M:	Jan Harkes <jaharkes@cs.cmu.edu>
 M:	coda@cs.cmu.edu
diff --git a/Makefile b/Makefile
index 654c31a..09d9d08 100644
--- a/Makefile
+++ b/Makefile
@@ -412,7 +412,7 @@ endif
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags help %docs check% coccicheck \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1279,8 +1279,9 @@ help:
 	@echo  '  includecheck    - Check for duplicate included header files'
 	@echo  '  export_report   - List the usages of all exported symbols'
 	@echo  '  headers_check   - Sanity check on exported headers'
-	@echo  '  headerdep       - Detect inclusion cycles in headers'; \
-	 echo  ''
+	@echo  '  headerdep       - Detect inclusion cycles in headers'
+	@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
+	@echo  ''
 	@echo  'Kernel packaging:'
 	@$(MAKE) $(build)=$(package-dir) help
 	@echo  ''
@@ -1439,6 +1440,9 @@ versioncheck:
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
 
+coccicheck:
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
+
 namespacecheck:
 	$(PERL) $(srctree)/scripts/namespace.pl
 
diff --git a/scripts/Makefile.help b/scripts/Makefile.help
new file mode 100644
index 0000000..d03608f
--- /dev/null
+++ b/scripts/Makefile.help
@@ -0,0 +1,3 @@
+
+checker-help:
+	@echo  '  coccicheck      - Check with Coccinelle.'
diff --git a/scripts/coccicheck b/scripts/coccicheck
new file mode 100755
index 0000000..0d83b6f
--- /dev/null
+++ b/scripts/coccicheck
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+SPATCH="`which ${SPATCH:=spatch}`"
+
+if [ "$C" = "1" -o "$C" = "2" ]; then
+    ONLINE=1
+
+# This requires Coccinelle >= 0.2.3
+#    FLAGS="-ignore_unknown_options -very_quiet"
+#    OPTIONS=$*
+
+# Workaround for Coccinelle < 0.2.3
+    FLAGS="-I $srctree/include -very_quiet"
+    shift $(( $# - 1 ))
+    OPTIONS=$1
+else
+    ONLINE=0
+    FLAGS="-very_quiet"
+fi
+
+if [ ! -x "$SPATCH" ]; then
+    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
+    exit 1
+fi
+
+if [ "$MODE" = "" ] ; then
+    if [ "$ONLINE" = "0" ] ; then
+	echo 'You have not explicitly specify the mode to use. Fallback to "report".'
+	echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
+	echo 'Available modes are: report, patch, context, org'
+    fi
+    MODE="report"
+fi
+
+if [ "$ONLINE" = "0" ] ; then
+    echo ''
+    echo 'Please check for false positives in the output before submitting a patch.'
+    echo 'When using "patch" mode, carefully review the patch before submitting it.'
+    echo ''
+fi
+
+coccinelle () {
+    COCCI="$1"
+
+    OPT=`grep "Option" $COCCI | cut -d':' -f2`
+
+#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
+#
+#    $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
+
+    if [ "$ONLINE" = "0" ] ; then
+
+	FILE=`echo $COCCI | sed "s|$DIR/||"`
+
+	echo "Processing `basename $COCCI` with option(s) \"$OPT\""
+	echo 'Message example to submit a patch:'
+
+	sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
+
+	echo ' The semantic patch that makes this change is available'
+	echo " in $FILE."
+	echo ''
+	echo ' More information about semantic patching is available at'
+	echo ' http://coccinelle.lip6.fr/'
+	echo ''
+
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1
+    else
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
+    fi
+
+}
+
+if [ "$COCCI" = "" ] ; then
+    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
+	coccinelle $f
+    done
+else
+    coccinelle $COCCI
+fi
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-07 12:35       ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-07 12:35 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Am?rico Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

From 3765ca033cd6ffe8a1044bc5bbcb9264de042f57 Mon Sep 17 00:00:00 2001
From: Nicolas Palix <npalix@diku.dk>
Date: Mon, 7 Jun 2010 14:28:41 +0200
Subject: [PATCH 1/7] Add a target to use the Coccinelle checker

A 'coccicheck' target is added. It can be called with four different
modes. Each one generates a different kind of output, i.e. context,
patch, org, report, according to the corresponding mode to be
activated.

The new target calls the 'coccicheck' front-end in the 'scripts'
directory with the MODE argument. Every SmPL file in the
subdirectories of 'scripts/coccinelle' is then given to the front-end
and applied to the entire source tree.

The four modes behave as follows:

'report' generates a list in the following format:
  file:line:column-column: message

'patch' proposes a fix, when possible.

'context' highlights lines of interest and their context in a
diff-like style. Lines of interest are indicated with '-'.

'org' generates a report in the Org mode format of Emacs.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---

I figure out that the support for "C=1" and "C=2" was missing
in the previous patch. This new version adds it.

Sorry, for the inconvenience.


 MAINTAINERS           |   10 ++++++
 Makefile              |   10 ++++--
 scripts/Makefile.help |    3 ++
 scripts/coccicheck    |   80 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 3 deletions(-)
 create mode 100644 scripts/Makefile.help
 create mode 100755 scripts/coccicheck

diff --git a/MAINTAINERS b/MAINTAINERS
index 67accd7..5b3c95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1569,6 +1569,16 @@ L:	platform-driver-x86@vger.kernel.org
 S:	Supported
 F:	drivers/platform/x86/classmate-laptop.c
 
+COCCINELLE/Semantic Patches (SmPL)
+M:	Julia Lawall <julia@diku.dk>
+M:	Gilles Muller <Gilles.Muller@lip6.fr>
+M:	Nicolas Palix <npalix@diku.dk>
+L:	cocci@diku.dk (moderated for non-subscribers)
+W:	http://coccinelle.lip6.fr/
+S:	Supported
+F:	scripts/coccinelle/
+F:	scripts/coccicheck
+
 CODA FILE SYSTEM
 M:	Jan Harkes <jaharkes@cs.cmu.edu>
 M:	coda@cs.cmu.edu
diff --git a/Makefile b/Makefile
index 654c31a..09d9d08 100644
--- a/Makefile
+++ b/Makefile
@@ -412,7 +412,7 @@ endif
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags help %docs check% coccicheck \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1279,8 +1279,9 @@ help:
 	@echo  '  includecheck    - Check for duplicate included header files'
 	@echo  '  export_report   - List the usages of all exported symbols'
 	@echo  '  headers_check   - Sanity check on exported headers'
-	@echo  '  headerdep       - Detect inclusion cycles in headers'; \
-	 echo  ''
+	@echo  '  headerdep       - Detect inclusion cycles in headers'
+	@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
+	@echo  ''
 	@echo  'Kernel packaging:'
 	@$(MAKE) $(build)=$(package-dir) help
 	@echo  ''
@@ -1439,6 +1440,9 @@ versioncheck:
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
 
+coccicheck:
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
+
 namespacecheck:
 	$(PERL) $(srctree)/scripts/namespace.pl
 
diff --git a/scripts/Makefile.help b/scripts/Makefile.help
new file mode 100644
index 0000000..d03608f
--- /dev/null
+++ b/scripts/Makefile.help
@@ -0,0 +1,3 @@
+
+checker-help:
+	@echo  '  coccicheck      - Check with Coccinelle.'
diff --git a/scripts/coccicheck b/scripts/coccicheck
new file mode 100755
index 0000000..0d83b6f
--- /dev/null
+++ b/scripts/coccicheck
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+SPATCH="`which ${SPATCH:=spatch}`"
+
+if [ "$C" = "1" -o "$C" = "2" ]; then
+    ONLINE=1
+
+# This requires Coccinelle >= 0.2.3
+#    FLAGS="-ignore_unknown_options -very_quiet"
+#    OPTIONS=$*
+
+# Workaround for Coccinelle < 0.2.3
+    FLAGS="-I $srctree/include -very_quiet"
+    shift $(( $# - 1 ))
+    OPTIONS=$1
+else
+    ONLINE=0
+    FLAGS="-very_quiet"
+fi
+
+if [ ! -x "$SPATCH" ]; then
+    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
+    exit 1
+fi
+
+if [ "$MODE" = "" ] ; then
+    if [ "$ONLINE" = "0" ] ; then
+	echo 'You have not explicitly specify the mode to use. Fallback to "report".'
+	echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
+	echo 'Available modes are: report, patch, context, org'
+    fi
+    MODE="report"
+fi
+
+if [ "$ONLINE" = "0" ] ; then
+    echo ''
+    echo 'Please check for false positives in the output before submitting a patch.'
+    echo 'When using "patch" mode, carefully review the patch before submitting it.'
+    echo ''
+fi
+
+coccinelle () {
+    COCCI="$1"
+
+    OPT=`grep "Option" $COCCI | cut -d':' -f2`
+
+#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
+#
+#    $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
+
+    if [ "$ONLINE" = "0" ] ; then
+
+	FILE=`echo $COCCI | sed "s|$DIR/||"`
+
+	echo "Processing `basename $COCCI` with option(s) \"$OPT\""
+	echo 'Message example to submit a patch:'
+
+	sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
+
+	echo ' The semantic patch that makes this change is available'
+	echo " in $FILE."
+	echo ''
+	echo ' More information about semantic patching is available at'
+	echo ' http://coccinelle.lip6.fr/'
+	echo ''
+
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1
+    else
+	$SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
+    fi
+
+}
+
+if [ "$COCCI" = "" ] ; then
+    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
+	coccinelle $f
+    done
+else
+    coccinelle $COCCI
+fi
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH 0/7] Add some checks to be used with Coccinelle
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-10 11:52   ` Joerg Roedel
  -1 siblings, 0 replies; 36+ messages in thread
From: Joerg Roedel @ 2010-06-10 11:52 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Jan Engelhardt

On Sun, Jun 06, 2010 at 05:15:00PM +0200, Nicolas Palix wrote:
> This patch series adds a front-end to use Coccinelle.  It also
> includes a documentation file describing how to use the new
> 'coccicheck' target. Finally, some SmPL examples are provided.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

Looks good to me. Hope we will see lot of more scripts in the future :-)

Acked-by: Joerg Roedel <joerg.roedel@amd.com>


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 0/7] Add some checks to be used with Coccinelle
@ 2010-06-10 11:52   ` Joerg Roedel
  0 siblings, 0 replies; 36+ messages in thread
From: Joerg Roedel @ 2010-06-10 11:52 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Jan Engelhardt

On Sun, Jun 06, 2010 at 05:15:00PM +0200, Nicolas Palix wrote:
> This patch series adds a front-end to use Coccinelle.  It also
> includes a documentation file describing how to use the new
> 'coccicheck' target. Finally, some SmPL examples are provided.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

Looks good to me. Hope we will see lot of more scripts in the future :-)

Acked-by: Joerg Roedel <joerg.roedel@amd.com>


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 0/7] Add some checks to be used with Coccinelle
  2010-06-06 15:15 ` Nicolas Palix
@ 2010-06-11 22:02   ` Michal Marek
  -1 siblings, 0 replies; 36+ messages in thread
From: Michal Marek @ 2010-06-11 22:02 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Sam Ravnborg, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Américo Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

On 6.6.2010 17:15, Nicolas Palix wrote:
> This patch series adds a front-end to use Coccinelle.  It also
> includes a documentation file describing how to use the new
> 'coccicheck' target. Finally, some SmPL examples are provided.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

I see all the points raised are addressed now, so I applied this.

Michal

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 0/7] Add some checks to be used with Coccinelle
@ 2010-06-11 22:02   ` Michal Marek
  0 siblings, 0 replies; 36+ messages in thread
From: Michal Marek @ 2010-06-11 22:02 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Sam Ravnborg, Julia Lawall, Gilles Muller,
	linux-kernel, linux-kbuild, cocci, Wolfram Sang, Kernel Janitors,
	Américo Wang, Andy Isaacson, Linus Torvalds, Pekka Enberg,
	walter harms, Joerg Roedel, Jan Engelhardt

On 6.6.2010 17:15, Nicolas Palix wrote:
> This patch series adds a front-end to use Coccinelle.  It also
> includes a documentation file describing how to use the new
> 'coccicheck' target. Finally, some SmPL examples are provided.
> 
> Signed-off-by: Nicolas Palix <npalix@diku.dk>
> Signed-off-by: Julia Lawall <julia@diku.dk>

I see all the points raised are addressed now, so I applied this.

Michal

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-06 15:15   ` Nicolas Palix
@ 2010-06-30 18:58     ` Kulikov Vasiliy
  -1 siblings, 0 replies; 36+ messages in thread
From: Kulikov Vasiliy @ 2010-06-30 18:58 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

Hi,

On Sun, Jun 06, 2010 at 17:15 +0200, Nicolas Palix wrote:
> +    echo ' The semantic patch that makes this change is available'
> +    echo " in $FILE."
> +    echo ''
> +    echo ' More information about semantic patching is available at'
> +    echo ' http://coccinelle.lip6.fr/'
> +    echo ''
> +
> +    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR

Here I've got output:

/usr/lib/coccinelle/spatch: unknown option `-very_quiet'.
Usage: spatch -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]
Options are:
[...]


I use ubuntu Lucid 10.04 as said in Documentation/coccinelle.txt.

$ LANG=C apt-cache policy coccinelle
[...]
  Installed: 0.2.0.deb-1ubuntu2
[...]


If I delete -very_quiet then It runs OK, but output is not ommited:

init_defs_builtins: /usr/share/coccinelle/standard.h
HANDLING: /home/vasya/dev/linux-next/security/min_addr.c
HANDLING: /home/vasya/dev/linux-next/security/keys/proc.c
HANDLING: /home/vasya/dev/linux-next/security/keys/keyring.c
HANDLING: /home/vasya/dev/linux-next/security/keys/gc.c
HANDLING: /home/vasya/dev/linux-next/security/keys/process_keys.c
HANDLING: /home/vasya/dev/linux-next/security/keys/request_key_auth.c
[...]


> +if [ "$COCCI" = "" ] ; then
> +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> +	coccinelle $f $srctree;
> +    done
> +else
> +    coccinelle $COCCI $srctree
> +fi

I think it is more usefull to use $M instead of $srctree to run simple
'make coccicheck'.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-30 18:58     ` Kulikov Vasiliy
  0 siblings, 0 replies; 36+ messages in thread
From: Kulikov Vasiliy @ 2010-06-30 18:58 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

Hi,

On Sun, Jun 06, 2010 at 17:15 +0200, Nicolas Palix wrote:
> +    echo ' The semantic patch that makes this change is available'
> +    echo " in $FILE."
> +    echo ''
> +    echo ' More information about semantic patching is available at'
> +    echo ' http://coccinelle.lip6.fr/'
> +    echo ''
> +
> +    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR

Here I've got output:

/usr/lib/coccinelle/spatch: unknown option `-very_quiet'.
Usage: spatch -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]
Options are:
[...]


I use ubuntu Lucid 10.04 as said in Documentation/coccinelle.txt.

$ LANG=C apt-cache policy coccinelle
[...]
  Installed: 0.2.0.deb-1ubuntu2
[...]


If I delete -very_quiet then It runs OK, but output is not ommited:

init_defs_builtins: /usr/share/coccinelle/standard.h
HANDLING: /home/vasya/dev/linux-next/security/min_addr.c
HANDLING: /home/vasya/dev/linux-next/security/keys/proc.c
HANDLING: /home/vasya/dev/linux-next/security/keys/keyring.c
HANDLING: /home/vasya/dev/linux-next/security/keys/gc.c
HANDLING: /home/vasya/dev/linux-next/security/keys/process_keys.c
HANDLING: /home/vasya/dev/linux-next/security/keys/request_key_auth.c
[...]


> +if [ "$COCCI" = "" ] ; then
> +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> +	coccinelle $f $srctree;
> +    done
> +else
> +    coccinelle $COCCI $srctree
> +fi

I think it is more usefull to use $M instead of $srctree to run simple
'make coccicheck'.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-30 18:58     ` Kulikov Vasiliy
@ 2010-06-30 21:52       ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-30 21:52 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> Hi,
> 
> On Sun, Jun 06, 2010 at 17:15 +0200, Nicolas Palix wrote:
> > +    echo ' The semantic patch that makes this change is available'
> > +    echo " in $FILE."
> > +    echo ''
> > +    echo ' More information about semantic patching is available at'
> > +    echo ' http://coccinelle.lip6.fr/'
> > +    echo ''
> > +
> > +    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
> 
> Here I've got output:
> 
> /usr/lib/coccinelle/spatch: unknown option `-very_quiet'.
> Usage: spatch -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]
> Options are:
> [...]
> 
> 
> I use ubuntu Lucid 10.04 as said in Documentation/coccinelle.txt.
> 
> $ LANG=C apt-cache policy coccinelle
> [...]
>   Installed: 0.2.0.deb-1ubuntu2
> [...]
> 
> 
> If I delete -very_quiet then It runs OK, but output is not ommited:

Indeed, I just checked that. This option has been added in 0.2.1
which was not ported from Debian before the feature freeze of Ubuntu Lucid :(

> 
> init_defs_builtins: /usr/share/coccinelle/standard.h
> HANDLING: /home/vasya/dev/linux-next/security/min_addr.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/proc.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/keyring.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/gc.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/process_keys.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/request_key_auth.c
> [...]
> 
> 
> > +if [ "$COCCI" = "" ] ; then
> > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > +	coccinelle $f $srctree;
> > +    done
> > +else
> > +    coccinelle $COCCI $srctree
> > +fi
> 
> I think it is more usefull to use $M instead of $srctree to run simple
> 'make coccicheck'.

What is the purpose of $M ?

I submitted an incremental patch to add support for $C.


> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Nicolas Palix
Tel: (+33) 1 44 27 87 25
Tel: (+33) 6 81 07 91 72
Web: http://www.diku.dk/~npalix/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-06-30 21:52       ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-06-30 21:52 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> Hi,
> 
> On Sun, Jun 06, 2010 at 17:15 +0200, Nicolas Palix wrote:
> > +    echo ' The semantic patch that makes this change is available'
> > +    echo " in $FILE."
> > +    echo ''
> > +    echo ' More information about semantic patching is available at'
> > +    echo ' http://coccinelle.lip6.fr/'
> > +    echo ''
> > +
> > +    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
> 
> Here I've got output:
> 
> /usr/lib/coccinelle/spatch: unknown option `-very_quiet'.
> Usage: spatch -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]
> Options are:
> [...]
> 
> 
> I use ubuntu Lucid 10.04 as said in Documentation/coccinelle.txt.
> 
> $ LANG=C apt-cache policy coccinelle
> [...]
>   Installed: 0.2.0.deb-1ubuntu2
> [...]
> 
> 
> If I delete -very_quiet then It runs OK, but output is not ommited:

Indeed, I just checked that. This option has been added in 0.2.1
which was not ported from Debian before the feature freeze of Ubuntu Lucid :(

> 
> init_defs_builtins: /usr/share/coccinelle/standard.h
> HANDLING: /home/vasya/dev/linux-next/security/min_addr.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/proc.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/keyring.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/gc.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/process_keys.c
> HANDLING: /home/vasya/dev/linux-next/security/keys/request_key_auth.c
> [...]
> 
> 
> > +if [ "$COCCI" = "" ] ; then
> > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > +	coccinelle $f $srctree;
> > +    done
> > +else
> > +    coccinelle $COCCI $srctree
> > +fi
> 
> I think it is more usefull to use $M instead of $srctree to run simple
> 'make coccicheck'.

What is the purpose of $M ?

I submitted an incremental patch to add support for $C.


> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Nicolas Palix
Tel: (+33) 1 44 27 87 25
Tel: (+33) 6 81 07 91 72
Web: http://www.diku.dk/~npalix/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-30 21:52       ` Nicolas Palix
  (?)
@ 2010-07-02 13:52         ` Kulikov Vasiliy
  -1 siblings, 0 replies; 36+ messages in thread
From: Kulikov Vasiliy @ 2010-07-02 13:52 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Wed, Jun 30, 2010 at 23:52 +0200, Nicolas Palix wrote:
> On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> > > +if [ "$COCCI" = "" ] ; then
> > > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > > +	coccinelle $f $srctree;
> > > +    done
> > > +else
> > > +    coccinelle $COCCI $srctree
> > > +fi
> > 
> > I think it is more usefull to use $M instead of $srctree to run simple
> > 'make coccicheck'.
> 
> What is the purpose of $M ?
> 
> I submitted an incremental patch to add support for $C.

>From root Makefile:
# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence

So, I compile all local modules as smth like
make -C ../../.. M=$PWD CONFIG_SMTH=m modules

If coccinelle is started as 'coccinelle $COCCI $M' then it checks only in
directory tree with $M root.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-07-02 13:52         ` Kulikov Vasiliy
  0 siblings, 0 replies; 36+ messages in thread
From: Kulikov Vasiliy @ 2010-07-02 13:52 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Wed, Jun 30, 2010 at 23:52 +0200, Nicolas Palix wrote:
> On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> > > +if [ "$COCCI" = "" ] ; then
> > > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > > +	coccinelle $f $srctree;
> > > +    done
> > > +else
> > > +    coccinelle $COCCI $srctree
> > > +fi
> > 
> > I think it is more usefull to use $M instead of $srctree to run simple
> > 'make coccicheck'.
> 
> What is the purpose of $M ?
> 
> I submitted an incremental patch to add support for $C.

From root Makefile:
# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence

So, I compile all local modules as smth like
make -C ../../.. M=$PWD CONFIG_SMTH=m modules

If coccinelle is started as 'coccinelle $COCCI $M' then it checks only in
directory tree with $M root.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-07-02 13:52         ` Kulikov Vasiliy
  0 siblings, 0 replies; 36+ messages in thread
From: Kulikov Vasiliy @ 2010-07-02 13:52 UTC (permalink / raw)
  To: Nicolas Palix
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Wed, Jun 30, 2010 at 23:52 +0200, Nicolas Palix wrote:
> On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> > > +if [ "$COCCI" = "" ] ; then
> > > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > > +	coccinelle $f $srctree;
> > > +    done
> > > +else
> > > +    coccinelle $COCCI $srctree
> > > +fi
> > 
> > I think it is more usefull to use $M instead of $srctree to run simple
> > 'make coccicheck'.
> 
> What is the purpose of $M ?
> 
> I submitted an incremental patch to add support for $C.

From root Makefile:
# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence

So, I compile all local modules as smth like
make -C ../../.. M=$PWD CONFIG_SMTH=m modules

If coccinelle is started as 'coccinelle $COCCI $M' then it checks only in
directory tree with $M root.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-07-02 13:52         ` Kulikov Vasiliy
@ 2010-07-02 14:30           ` Nicolas Palix
  -1 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-07-02 14:30 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Friday 02 July 2010 15:52:50 Kulikov Vasiliy wrote:
> On Wed, Jun 30, 2010 at 23:52 +0200, Nicolas Palix wrote:
> > On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> > > > +if [ "$COCCI" = "" ] ; then
> > > > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > > > +	coccinelle $f $srctree;
> > > > +    done
> > > > +else
> > > > +    coccinelle $COCCI $srctree
> > > > +fi
> > > 
> > > I think it is more usefull to use $M instead of $srctree to run simple
> > > 'make coccicheck'.
> > 
> > What is the purpose of $M ?
> > 
> > I submitted an incremental patch to add support for $C.
> 
> From root Makefile:
> # Use make M=dir to specify directory of external module to build
> # Old syntax make ... SUBDIRS=$PWD is still supported
> # Setting the environment variable KBUILD_EXTMOD take precedence
> 
> So, I compile all local modules as smth like
> make -C ../../.. M=$PWD CONFIG_SMTH=m modules
> 
> If coccinelle is started as 'coccinelle $COCCI $M' then it checks only in
> directory tree with $M root.

That would be great indeed. And we can still use $srctree as a default
value if $M is not set. Coccinelle already support this scheme with the
combination of -dir and -patch, so the paths in the generated patches/messages
can be fixed.

Kulikov, would you like to make the patch ?


> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Nicolas Palix
Web: http://www.diku.dk/~npalix/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-07-02 14:30           ` Nicolas Palix
  0 siblings, 0 replies; 36+ messages in thread
From: Nicolas Palix @ 2010-07-02 14:30 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Randy Dunlap, Roland Dreier, Joe Perches, Andrew Morton,
	David S. Miller, Michal Marek, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On Friday 02 July 2010 15:52:50 Kulikov Vasiliy wrote:
> On Wed, Jun 30, 2010 at 23:52 +0200, Nicolas Palix wrote:
> > On Wednesday 30 June 2010 20:58:54 Kulikov Vasiliy wrote:
> > > > +if [ "$COCCI" = "" ] ; then
> > > > +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
> > > > +	coccinelle $f $srctree;
> > > > +    done
> > > > +else
> > > > +    coccinelle $COCCI $srctree
> > > > +fi
> > > 
> > > I think it is more usefull to use $M instead of $srctree to run simple
> > > 'make coccicheck'.
> > 
> > What is the purpose of $M ?
> > 
> > I submitted an incremental patch to add support for $C.
> 
> From root Makefile:
> # Use make M=dir to specify directory of external module to build
> # Old syntax make ... SUBDIRS=$PWD is still supported
> # Setting the environment variable KBUILD_EXTMOD take precedence
> 
> So, I compile all local modules as smth like
> make -C ../../.. M=$PWD CONFIG_SMTH=m modules
> 
> If coccinelle is started as 'coccinelle $COCCI $M' then it checks only in
> directory tree with $M root.

That would be great indeed. And we can still use $srctree as a default
value if $M is not set. Coccinelle already support this scheme with the
combination of -dir and -patch, so the paths in the generated patches/messages
can be fixed.

Kulikov, would you like to make the patch ?


> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Nicolas Palix
Web: http://www.diku.dk/~npalix/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
  2010-06-30 18:58     ` Kulikov Vasiliy
@ 2010-07-02 20:11       ` Michal Marek
  -1 siblings, 0 replies; 36+ messages in thread
From: Michal Marek @ 2010-07-02 20:11 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Nicolas Palix, Randy Dunlap, Roland Dreier, Joe Perches,
	Andrew Morton, David S. Miller, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On 30.6.2010 20:58, Kulikov Vasiliy wrote:
>> +if [ "$COCCI" = "" ] ; then
>> +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
>> +	coccinelle $f $srctree;
>> +    done
>> +else
>> +    coccinelle $COCCI $srctree
>> +fi
> 
> I think it is more usefull to use $M instead of $srctree to run simple
> 'make coccicheck'.

Good idea, but
1) The right variable to look for is $KBUILD_EXTMOD
2) If this is not set, the script should check files in $srctree as before

Michal

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH 1/7] Add a target to use the Coccinelle checker
@ 2010-07-02 20:11       ` Michal Marek
  0 siblings, 0 replies; 36+ messages in thread
From: Michal Marek @ 2010-07-02 20:11 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: Nicolas Palix, Randy Dunlap, Roland Dreier, Joe Perches,
	Andrew Morton, David S. Miller, Sam Ravnborg, Julia Lawall,
	Gilles Muller, linux-kernel, linux-kbuild, cocci, Wolfram Sang,
	Kernel Janitors, Américo Wang, Andy Isaacson,
	Linus Torvalds, Pekka Enberg, walter harms, Joerg Roedel,
	Jan Engelhardt

On 30.6.2010 20:58, Kulikov Vasiliy wrote:
>> +if [ "$COCCI" = "" ] ; then
>> +    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
>> +	coccinelle $f $srctree;
>> +    done
>> +else
>> +    coccinelle $COCCI $srctree
>> +fi
> 
> I think it is more usefull to use $M instead of $srctree to run simple
> 'make coccicheck'.

Good idea, but
1) The right variable to look for is $KBUILD_EXTMOD
2) If this is not set, the script should check files in $srctree as before

Michal

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2010-07-02 20:58 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-06 15:15 [PATCH 0/7] Add some checks to be used with Coccinelle Nicolas Palix
2010-06-06 15:15 ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 1/7] Add a target to use the Coccinelle checker Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 18:16   ` Sam Ravnborg
2010-06-06 18:16     ` Sam Ravnborg
2010-06-07 12:35     ` Nicolas Palix
2010-06-07 12:35       ` Nicolas Palix
2010-06-07 12:35       ` Nicolas Palix
2010-06-30 18:58   ` Kulikov Vasiliy
2010-06-30 18:58     ` Kulikov Vasiliy
2010-06-30 21:52     ` Nicolas Palix
2010-06-30 21:52       ` Nicolas Palix
2010-07-02 13:52       ` Kulikov Vasiliy
2010-07-02 13:52         ` Kulikov Vasiliy
2010-07-02 13:52         ` Kulikov Vasiliy
2010-07-02 14:30         ` Nicolas Palix
2010-07-02 14:30           ` Nicolas Palix
2010-07-02 20:11     ` Michal Marek
2010-07-02 20:11       ` Michal Marek
2010-06-06 15:15 ` [PATCH 2/7] Add Documentation/coccinelle.txt Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 3/7] Add scripts/coccinelle/alloc/drop_kmalloc_cast.cocci Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 4/7] Add scripts/coccinelle/alloc/kzalloc-simple.cocci Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 5/7] Add scripts/coccinelle/resource_size.cocci Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 6/7] Add scripts/coccinelle/err_cast.cocci Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-06 15:15 ` [PATCH 7/7] Add scripts/coccinelle/deref_null.cocci Nicolas Palix
2010-06-06 15:15   ` Nicolas Palix
2010-06-10 11:52 ` [PATCH 0/7] Add some checks to be used with Coccinelle Joerg Roedel
2010-06-10 11:52   ` Joerg Roedel
2010-06-11 22:02 ` Michal Marek
2010-06-11 22:02   ` Michal Marek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.