Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
mariux64
/
linux
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
2
Pull requests
0
Actions
Projects
0
Wiki
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security
Insights
Files
7f904d7
Documentation
LICENSES
arch
block
certs
crypto
drivers
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
atomic
basic
coccinelle
api
alloc
alloc_cast.cocci
pool_zalloc-simple.cocci
zalloc-simple.cocci
debugfs
atomic_as_refcounter.cocci
check_bq27xxx_data.cocci
d_find_alias.cocci
err_cast.cocci
kstrdup.cocci
memdup.cocci
memdup_user.cocci
platform_no_drv_owner.cocci
pm_runtime.cocci
ptr_ret.cocci
resource_size.cocci
simple_open.cocci
stream_open.cocci
vma_pages.cocci
free
iterators
locks
misc
null
tests
dtc
gcc-plugins
gdb
genksyms
kconfig
ksymoops
mod
package
selinux
tracing
.gitignore
Kbuild.include
Kconfig.include
Lindent
Makefile
Makefile.asm-generic
Makefile.build
Makefile.clean
Makefile.dtbinst
Makefile.extrawarn
Makefile.gcc-plugins
Makefile.headersinst
Makefile.host
Makefile.kasan
Makefile.kcov
Makefile.lib
Makefile.modbuiltin
Makefile.modinst
Makefile.modpost
Makefile.modsign
Makefile.ubsan
adjust_autoksyms.sh
asn1_compiler.c
bin2c.c
bloat-o-meter
bootgraph.pl
bpf_helpers_doc.py
cc-can-link.sh
check_extable.sh
checkincludes.pl
checkkconfigsymbols.py
checkpatch.pl
checkstack.pl
checksyscalls.sh
checkversion.pl
clang-version.sh
cleanfile
cleanpatch
coccicheck
config
conmakehash.c
const_structs.checkpatch
decode_stacktrace.sh
decodecode
depmod.sh
diffconfig
documentation-file-ref-check
export_report.pl
extract-cert.c
extract-ikconfig
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux
extract_xc3028.pl
faddr2line
file-size.sh
find-unused-docs.sh
gcc-goto.sh
gcc-ld
gcc-plugin.sh
gcc-version.sh
gcc-x86_32-has-stack-protector.sh
gcc-x86_64-has-stack-protector.sh
gen_compile_commands.py
gen_ksymdeps.sh
get_dvb_firmware
get_maintainer.pl
gfp-translate
headerdep.pl
headers.sh
headers_check.pl
headers_install.sh
insert-sys-cert.c
kallsyms.c
kernel-doc
ld-version.sh
leaking_addresses.pl
link-vmlinux.sh
makelst
markup_oops.pl
mkcompile_h
mkmakefile
mksysmap
mkuboot.sh
module-common.lds
modules-check.sh
namespace.pl
objdiff
parse-maintainers.pl
patch-kernel
pnmtologo.c
profile2linkerlist.pl
prune-kernel
recordmcount.c
recordmcount.h
recordmcount.pl
setlocalversion
show_delta
sign-file.c
sortextable.c
sortextable.h
spdxcheck-test.sh
spdxcheck.py
spelling.txt
sphinx-pre-install
split-man.pl
stackdelta
stackusage
subarch.include
tags.sh
unifdef.c
ver_linux
xen-hypercalls.sh
xz_wrap.sh
security
sound
tools
usr
virt
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
README
Breadcrumbs
linux
/
scripts
/
coccinelle
/
api
/
alloc
/
zalloc-simple.cocci
Copy path
Blame
Blame
Latest commit
History
History
401 lines (339 loc) · 8.2 KB
Breadcrumbs
linux
/
scripts
/
coccinelle
/
api
/
alloc
/
zalloc-simple.cocci
Top
File metadata and controls
Code
Blame
401 lines (339 loc) · 8.2 KB
Raw
// SPDX-License-Identifier: GPL-2.0-only /// /// Use zeroing allocator rather than allocator followed by memset with 0 /// /// This considers some simple cases that are common and easy to validate /// Note in particular that there are no ...s in the rule, so all of the /// matched code has to be contiguous /// // Confidence: High // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. // Copyright: (C) 2017 Himanshu Jha // 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; statement S; @@ * x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\| kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\| devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|kvmalloc_node(E1,...)\); if ((x==NULL) || ...) S * memset((T2)x,0,E1); //---------------------------------------------------------- // For patch mode //---------------------------------------------------------- @depends on patch@ type T, T2; expression x; expression E1,E2,E3,E4; statement S; @@ ( - x = kmalloc(E1,E2); + x = kzalloc(E1,E2); | - x = (T *)kmalloc(E1,E2); + x = kzalloc(E1,E2); | - x = (T)kmalloc(E1,E2); + x = (T)kzalloc(E1,E2); | - x = vmalloc(E1); + x = vzalloc(E1); | - x = (T *)vmalloc(E1); + x = vzalloc(E1); | - x = (T)vmalloc(E1); + x = (T)vzalloc(E1); | - x = kmalloc_node(E1,E2,E3); + x = kzalloc_node(E1,E2,E3); | - x = (T *)kmalloc_node(E1,E2,E3); + x = kzalloc_node(E1,E2,E3); | - x = (T)kmalloc_node(E1,E2,E3); + x = (T)kzalloc_node(E1,E2,E3); | - x = kmem_cache_alloc(E3,E4); + x = kmem_cache_zalloc(E3,E4); | - x = (T *)kmem_cache_alloc(E3,E4); + x = kmem_cache_zalloc(E3,E4); | - x = (T)kmem_cache_alloc(E3,E4); + x = (T)kmem_cache_zalloc(E3,E4); | - x = kmem_alloc(E1,E2); + x = kmem_zalloc(E1,E2); | - x = (T *)kmem_alloc(E1,E2); + x = kmem_zalloc(E1,E2); | - x = (T)kmem_alloc(E1,E2); + x = (T)kmem_zalloc(E1,E2); | - x = devm_kmalloc(E2,E1,E3); + x = devm_kzalloc(E2,E1,E3); | - x = (T *)devm_kmalloc(E2,E1,E3); + x = devm_kzalloc(E2,E1,E3); | - x = (T)devm_kmalloc(E2,E1,E3); + x = (T)devm_kzalloc(E2,E1,E3); | - x = kvmalloc(E1,E2); + x = kvzalloc(E1,E2); | - x = (T *)kvmalloc(E1,E2); + x = kvzalloc(E1,E2); | - x = (T)kvmalloc(E1,E2); + x = (T)kvzalloc(E1,E2); | - x = kvmalloc_node(E1,E2,E3); + x = kvzalloc_node(E1,E2,E3); | - x = (T *)kvmalloc_node(E1,E2,E3); + x = kvzalloc_node(E1,E2,E3); | - x = (T)kvmalloc_node(E1,E2,E3); + x = (T)kvzalloc_node(E1,E2,E3); ) 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) //----------------------------------------------------------------- @r1 depends on org || report@ type T, T2; expression x; expression E1; statement S; position p; @@ x = (T)vmalloc@p(E1); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r1.p; x << r1.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r1.p; x << r1.x; @@ msg="WARNING: vzalloc should be used for %s, instead of vmalloc/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r2 depends on org || report@ type T, T2; expression x; expression E1,E2,E3,E4; statement S; position p; @@ x = (T)dma_alloc_coherent@p(E2,E1,E3,E4); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r2.p; x << r2.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r2.p; x << r2.x; @@ msg="WARNING: dma_alloc_coherent use in %s already zeroes out memory, so memset is not needed" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r3 depends on org || report@ type T, T2; expression x; expression E1,E2,E3; statement S; position p; @@ x = (T)kmalloc_node@p(E1,E2,E3); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r3.p; x << r3.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r3.p; x << r3.x; @@ msg="WARNING: kzalloc_node should be used for %s, instead of kmalloc_node/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r4 depends on org || report@ type T, T2; expression x; expression E1,E2,E3; statement S; position p; @@ x = (T)kmem_cache_alloc@p(E2,E3); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r4.p; x << r4.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r4.p; x << r4.x; @@ msg="WARNING: kmem_cache_zalloc should be used for %s, instead of kmem_cache_alloc/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r5 depends on org || report@ type T, T2; expression x; expression E1,E2; statement S; position p; @@ x = (T)kmem_alloc@p(E1,E2); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r5.p; x << r5.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r5.p; x << r5.x; @@ msg="WARNING: kmem_zalloc should be used for %s, instead of kmem_alloc/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r6 depends on org || report@ type T, T2; expression x; expression E1,E2,E3; statement S; position p; @@ x = (T)devm_kmalloc@p(E2,E1,E3); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r6.p; x << r6.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r6.p; x << r6.x; @@ msg="WARNING: devm_kzalloc should be used for %s, instead of devm_kmalloc/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r7 depends on org || report@ type T, T2; expression x; expression E1,E2; statement S; position p; @@ x = (T)kvmalloc@p(E1,E2); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r7.p; x << r7.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r7.p; x << r7.x; @@ msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x) coccilib.report.print_report(p[0], msg) //----------------------------------------------------------------- @r9 depends on org || report@ type T, T2; expression x; expression E1,E2,E3; statement S; position p; @@ x = (T)kvmalloc_node@p(E1,E2,E3); if ((x==NULL) || ...) S memset((T2)x,0,E1); @script:python depends on org@ p << r9.p; x << r9.x; @@ msg="%s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) @script:python depends on report@ p << r9.p; x << r9.x; @@ msg="WARNING: kvzalloc_node should be used for %s, instead of kvmalloc_node/memset" % (x) coccilib.report.print_report(p[0], msg)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
You can’t perform that action at this time.