diff options
author | Nicolas Palix <npalix@diku.dk> | 2010-08-24 17:39:07 +0200 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-08-31 11:37:54 +0200 |
commit | 034174598bc8ffd9586432852502e368a43ef0f1 (patch) | |
tree | f49d60d39b1a7c7b67d27d09c54214f5e76172c0 /scripts/coccinelle | |
parent | 0426a97c4b672166cbcfdc7b18466d4f207f7a36 (diff) | |
download | lwn-034174598bc8ffd9586432852502e368a43ef0f1.tar.gz lwn-034174598bc8ffd9586432852502e368a43ef0f1.zip |
Coccinelle: Add api/memdup_user
Use kmemdup_user rather than duplicating its implementation
This is a little bit restricted to reduce false positives
Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'scripts/coccinelle')
-rw-r--r-- | scripts/coccinelle/api/memdup_user.cocci | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/scripts/coccinelle/api/memdup_user.cocci b/scripts/coccinelle/api/memdup_user.cocci new file mode 100644 index 000000000000..72ce012e878a --- /dev/null +++ b/scripts/coccinelle/api/memdup_user.cocci @@ -0,0 +1,35 @@ +/// Use kmemdup_user rather than duplicating its implementation +/// This is a little bit restricted to reduce false positives +/// +// Confidence: High +// 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: +// Options: -no_includes -include_headers + +virtual patch + +@@ +expression from,to,size,flag; +position p; +identifier l1,l2; +@@ + +- to = \(kmalloc@p\|kzalloc@p\)(size,flag); ++ to = memdup_user(from,size); + if ( +- to==NULL ++ IS_ERR(to) + || ...) { + <+... when != goto l1; +- -ENOMEM ++ PTR_ERR(to) + ...+> + } +- if (copy_from_user(to, from, size) != 0) { +- <+... when != goto l2; +- -EFAULT +- ...+> +- } |