aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-02-01 14:43:45 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-02-01 14:43:45 -0500
commita659f1598585071eed5c39485840b0f018c9f457 (patch)
tree9d785768a926c3dc2b42944b5851620684e00dba
parent06c8f7a7501ab3ae338a98ff8515b9f03160bea6 (diff)
parent1640eea35e8dcf0cb437f03c56868a97d0666df3 (diff)
Merge tag 'kbuild-misc-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild misc updates from Masahiro Yamada: - add snap-pkg target to create Linux kernel snap package - make out-of-tree creation of source packages fail correctly - improve and fix several semantic patches * tag 'kbuild-misc-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: Coccinelle: coccicheck: fix typo Coccinelle: memdup: drop spurious line Coccinelle: kzalloc-simple: Rename kzalloc-simple to zalloc-simple Coccinelle: ifnullfree: Trim the warning reported in report mode Coccinelle: alloc_cast: Add more memory allocating functions to the list Coccinelle: array_size: report even if include is missing Coccinelle: kzalloc-simple: Add all zero allocating functions kbuild: pkg: make out-of-tree rpm/deb-pkg build immediately fail scripts/package: snap-pkg target
-rw-r--r--.gitignore5
-rwxr-xr-xscripts/coccicheck2
-rw-r--r--scripts/coccinelle/api/alloc/alloc_cast.cocci92
-rw-r--r--scripts/coccinelle/api/alloc/kzalloc-simple.cocci86
-rw-r--r--scripts/coccinelle/api/alloc/zalloc-simple.cocci448
-rw-r--r--scripts/coccinelle/api/memdup.cocci1
-rw-r--r--scripts/coccinelle/free/ifnullfree.cocci2
-rw-r--r--scripts/coccinelle/misc/array_size.cocci4
-rw-r--r--scripts/package/Makefile26
-rw-r--r--scripts/package/snapcraft.template14
10 files changed, 565 insertions, 115 deletions
diff --git a/.gitignore b/.gitignore
index f6050b88e95b..705e09913dc2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,6 +66,11 @@ modules.builtin
66/debian/ 66/debian/
67 67
68# 68#
69# Snap directory (make snap-pkg)
70#
71/snap/
72
73#
69# tar directory (make tar*-pkg) 74# tar directory (make tar*-pkg)
70# 75#
71/tar-install/ 76/tar-install/
diff --git a/scripts/coccicheck b/scripts/coccicheck
index ecfac64b39fe..9fedca611b7f 100755
--- a/scripts/coccicheck
+++ b/scripts/coccicheck
@@ -177,7 +177,7 @@ coccinelle () {
177 REQ_NUM=$(echo $REQ | ${DIR}/scripts/ld-version.sh) 177 REQ_NUM=$(echo $REQ | ${DIR}/scripts/ld-version.sh)
178 if [ "$REQ_NUM" != "0" ] ; then 178 if [ "$REQ_NUM" != "0" ] ; then
179 if [ "$SPATCH_VERSION_NUM" -lt "$REQ_NUM" ] ; then 179 if [ "$SPATCH_VERSION_NUM" -lt "$REQ_NUM" ] ; then
180 echo "Skipping coccinele SmPL patch: $COCCI" 180 echo "Skipping coccinelle SmPL patch: $COCCI"
181 echo "You have coccinelle: $SPATCH_VERSION" 181 echo "You have coccinelle: $SPATCH_VERSION"
182 echo "This SmPL patch requires: $REQ" 182 echo "This SmPL patch requires: $REQ"
183 return 183 return
diff --git a/scripts/coccinelle/api/alloc/alloc_cast.cocci b/scripts/coccinelle/api/alloc/alloc_cast.cocci
index 6c308ee19b32..408ee3879f9b 100644
--- a/scripts/coccinelle/api/alloc/alloc_cast.cocci
+++ b/scripts/coccinelle/api/alloc/alloc_cast.cocci
@@ -5,10 +5,11 @@
5//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc, 5//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,
6//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes 6//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes
7//# the casting as it is not required. The result in the patch case may 7//# the casting as it is not required. The result in the patch case may
8//#need some reformatting. 8//# need some reformatting.
9// 9//
10// Confidence: High 10// Confidence: High
11// Copyright: 2014, Himangi Saraogi GPLv2. 11// Copyright: (C) 2014 Himangi Saraogi GPLv2.
12// Copyright: (C) 2017 Himanshu Jha GPLv2.
12// Comments: 13// Comments:
13// Options: --no-includes --include-headers 14// Options: --no-includes --include-headers
14// 15//
@@ -18,55 +19,104 @@ virtual patch
18virtual org 19virtual org
19virtual report 20virtual report
20 21
22@initialize:python@
23@@
24import re
25pattern = '__'
26m = re.compile(pattern)
27
28@r1 depends on context || patch@
29type T;
30@@
31
32 (T *)
33 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
34 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
35 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
36 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
37 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
38 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
39
21//---------------------------------------------------------- 40//----------------------------------------------------------
22// For context mode 41// For context mode
23//---------------------------------------------------------- 42//----------------------------------------------------------
24 43
25@depends on context@ 44@script:python depends on context@
26type T; 45t << r1.T;
46@@
47
48if m.search(t) != None:
49 cocci.include_match(False)
50
51@depends on context && r1@
52type r1.T;
27@@ 53@@
28 54
29* (T *) 55* (T *)
30 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 56 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
31 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) 57 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
58 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
59 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
60 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
61 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
32 62
33//---------------------------------------------------------- 63//----------------------------------------------------------
34// For patch mode 64// For patch mode
35//---------------------------------------------------------- 65//----------------------------------------------------------
36 66
37@depends on patch@ 67@script:python depends on patch@
38type T; 68t << r1.T;
69@@
70
71if m.search(t) != None:
72 cocci.include_match(False)
73
74@depends on patch && r1@
75type r1.T;
39@@ 76@@
40 77
41- (T *) 78- (T *)
42 (\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 79 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
43 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)) 80 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
81 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
82 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
83 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
84 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
44 85
45//---------------------------------------------------------- 86//----------------------------------------------------------
46// For org and report mode 87// For org and report mode
47//---------------------------------------------------------- 88//----------------------------------------------------------
48 89
49@r depends on org || report@ 90@r2 depends on org || report@
50type T; 91type T;
51position p; 92position p;
52@@ 93@@
53 94
54 (T@p *)\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 95 (T@p *)
55 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) 96 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
97 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
98 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
99 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
100 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
101 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
56 102
57@script:python depends on org@ 103@script:python depends on org@
58p << r.p; 104p << r2.p;
59t << r.T; 105t << r2.T;
60@@ 106@@
61 107
62coccilib.org.print_safe_todo(p[0], t) 108if m.search(t) != None:
109 cocci.include_match(False)
110else:
111 coccilib.org.print_safe_todo(p[0], t)
63 112
64@script:python depends on report@ 113@script:python depends on report@
65p << r.p; 114p << r2.p;
66t << r.T; 115t << r2.T;
67@@ 116@@
68 117
69msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) 118if m.search(t) != None:
70coccilib.report.print_report(p[0], msg) 119 cocci.include_match(False)
71 120else:
72 121 msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)
122 coccilib.report.print_report(p[0], msg)
diff --git a/scripts/coccinelle/api/alloc/kzalloc-simple.cocci b/scripts/coccinelle/api/alloc/kzalloc-simple.cocci
deleted file mode 100644
index 52c55e4fa67d..000000000000
--- a/scripts/coccinelle/api/alloc/kzalloc-simple.cocci
+++ /dev/null
@@ -1,86 +0,0 @@
1///
2/// Use kzalloc rather than kmalloc followed by memset with 0
3///
4/// This considers some simple cases that are common and easy to validate
5/// Note in particular that there are no ...s in the rule, so all of the
6/// matched code has to be contiguous
7///
8// Confidence: High
9// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2.
10// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2.
11// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
12// Options: --no-includes --include-headers
13//
14// Keywords: kmalloc, kzalloc
15// Version min: < 2.6.12 kmalloc
16// Version min: 2.6.14 kzalloc
17//
18
19virtual context
20virtual patch
21virtual org
22virtual report
23
24//----------------------------------------------------------
25// For context mode
26//----------------------------------------------------------
27
28@depends on context@
29type T, T2;
30expression x;
31expression E1,E2;
32statement S;
33@@
34
35* x = (T)kmalloc(E1,E2);
36 if ((x==NULL) || ...) S
37* memset((T2)x,0,E1);
38
39//----------------------------------------------------------
40// For patch mode
41//----------------------------------------------------------
42
43@depends on patch@
44type T, T2;
45expression x;
46expression E1,E2;
47statement S;
48@@
49
50- x = (T)kmalloc(E1,E2);
51+ x = kzalloc(E1,E2);
52 if ((x==NULL) || ...) S
53- memset((T2)x,0,E1);
54
55//----------------------------------------------------------
56// For org mode
57//----------------------------------------------------------
58
59@r depends on org || report@
60type T, T2;
61expression x;
62expression E1,E2;
63statement S;
64position p;
65@@
66
67 x = (T)kmalloc@p(E1,E2);
68 if ((x==NULL) || ...) S
69 memset((T2)x,0,E1);
70
71@script:python depends on org@
72p << r.p;
73x << r.x;
74@@
75
76msg="%s" % (x)
77msg_safe=msg.replace("[","@(").replace("]",")")
78coccilib.org.print_todo(p[0], msg_safe)
79
80@script:python depends on report@
81p << r.p;
82x << r.x;
83@@
84
85msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
86coccilib.report.print_report(p[0], msg)
diff --git a/scripts/coccinelle/api/alloc/zalloc-simple.cocci b/scripts/coccinelle/api/alloc/zalloc-simple.cocci
new file mode 100644
index 000000000000..92b20913055f
--- /dev/null
+++ b/scripts/coccinelle/api/alloc/zalloc-simple.cocci
@@ -0,0 +1,448 @@
1///
2/// Use zeroing allocator rather than allocator followed by memset with 0
3///
4/// This considers some simple cases that are common and easy to validate
5/// Note in particular that there are no ...s in the rule, so all of the
6/// matched code has to be contiguous
7///
8// Confidence: High
9// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2.
10// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2.
11// Copyright: (C) 2017 Himanshu Jha GPLv2.
12// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
13// Options: --no-includes --include-headers
14//
15// Keywords: kmalloc, kzalloc
16// Version min: < 2.6.12 kmalloc
17// Version min: 2.6.14 kzalloc
18//
19
20virtual context
21virtual patch
22virtual org
23virtual report
24
25//----------------------------------------------------------
26// For context mode
27//----------------------------------------------------------
28
29@depends on context@
30type T, T2;
31expression x;
32expression E1;
33statement S;
34@@
35
36* x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\|
37 kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\|
38 devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|pci_alloc_consistent(...,E1,...)\|
39 kvmalloc_node(E1,...)\);
40 if ((x==NULL) || ...) S
41* memset((T2)x,0,E1);
42
43//----------------------------------------------------------
44// For patch mode
45//----------------------------------------------------------
46
47@depends on patch@
48type T, T2;
49expression x;
50expression E1,E2,E3,E4;
51statement S;
52@@
53
54(
55- x = kmalloc(E1,E2);
56+ x = kzalloc(E1,E2);
57|
58- x = (T *)kmalloc(E1,E2);
59+ x = kzalloc(E1,E2);
60|
61- x = (T)kmalloc(E1,E2);
62+ x = (T)kzalloc(E1,E2);
63|
64- x = vmalloc(E1);
65+ x = vzalloc(E1);
66|
67- x = (T *)vmalloc(E1);
68+ x = vzalloc(E1);
69|
70- x = (T)vmalloc(E1);
71+ x = (T)vzalloc(E1);
72|
73- x = dma_alloc_coherent(E2,E1,E3,E4);
74+ x = dma_zalloc_coherent(E2,E1,E3,E4);
75|
76- x = (T *)dma_alloc_coherent(E2,E1,E3,E4);
77+ x = dma_zalloc_coherent(E2,E1,E3,E4);
78|
79- x = (T)dma_alloc_coherent(E2,E1,E3,E4);
80+ x = (T)dma_zalloc_coherent(E2,E1,E3,E4);
81|
82- x = kmalloc_node(E1,E2,E3);
83+ x = kzalloc_node(E1,E2,E3);
84|
85- x = (T *)kmalloc_node(E1,E2,E3);
86+ x = kzalloc_node(E1,E2,E3);
87|
88- x = (T)kmalloc_node(E1,E2,E3);
89+ x = (T)kzalloc_node(E1,E2,E3);
90|
91- x = kmem_cache_alloc(E3,E4);
92+ x = kmem_cache_zalloc(E3,E4);
93|
94- x = (T *)kmem_cache_alloc(E3,E4);
95+ x = kmem_cache_zalloc(E3,E4);
96|
97- x = (T)kmem_cache_alloc(E3,E4);
98+ x = (T)kmem_cache_zalloc(E3,E4);
99|
100- x = kmem_alloc(E1,E2);
101+ x = kmem_zalloc(E1,E2);
102|
103- x = (T *)kmem_alloc(E1,E2);
104+ x = kmem_zalloc(E1,E2);
105|
106- x = (T)kmem_alloc(E1,E2);
107+ x = (T)kmem_zalloc(E1,E2);
108|
109- x = devm_kmalloc(E2,E1,E3);
110+ x = devm_kzalloc(E2,E1,E3);
111|
112- x = (T *)devm_kmalloc(E2,E1,E3);
113+ x = devm_kzalloc(E2,E1,E3);
114|
115- x = (T)devm_kmalloc(E2,E1,E3);
116+ x = (T)devm_kzalloc(E2,E1,E3);
117|
118- x = kvmalloc(E1,E2);
119+ x = kvzalloc(E1,E2);
120|
121- x = (T *)kvmalloc(E1,E2);
122+ x = kvzalloc(E1,E2);
123|
124- x = (T)kvmalloc(E1,E2);
125+ x = (T)kvzalloc(E1,E2);
126|
127- x = pci_alloc_consistent(E2,E1,E3);
128+ x = pci_zalloc_consistent(E2,E1,E3);
129|
130- x = (T *)pci_alloc_consistent(E2,E1,E3);
131+ x = pci_zalloc_consistent(E2,E1,E3);
132|
133- x = (T)pci_alloc_consistent(E2,E1,E3);
134+ x = (T)pci_zalloc_consistent(E2,E1,E3);
135|
136- x = kvmalloc_node(E1,E2,E3);
137+ x = kvzalloc_node(E1,E2,E3);
138|
139- x = (T *)kvmalloc_node(E1,E2,E3);
140+ x = kvzalloc_node(E1,E2,E3);
141|
142- x = (T)kvmalloc_node(E1,E2,E3);
143+ x = (T)kvzalloc_node(E1,E2,E3);
144)
145 if ((x==NULL) || ...) S
146- memset((T2)x,0,E1);
147
148//----------------------------------------------------------
149// For org mode
150//----------------------------------------------------------
151
152@r depends on org || report@
153type T, T2;
154expression x;
155expression E1,E2;
156statement S;
157position p;
158@@
159
160 x = (T)kmalloc@p(E1,E2);
161 if ((x==NULL) || ...) S
162 memset((T2)x,0,E1);
163
164@script:python depends on org@
165p << r.p;
166x << r.x;
167@@
168
169msg="%s" % (x)
170msg_safe=msg.replace("[","@(").replace("]",")")
171coccilib.org.print_todo(p[0], msg_safe)
172
173@script:python depends on report@
174p << r.p;
175x << r.x;
176@@
177
178msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
179coccilib.report.print_report(p[0], msg)
180
181//-----------------------------------------------------------------
182@r1 depends on org || report@
183type T, T2;
184expression x;
185expression E1;
186statement S;
187position p;
188@@
189
190 x = (T)vmalloc@p(E1);
191 if ((x==NULL) || ...) S
192 memset((T2)x,0,E1);
193
194@script:python depends on org@
195p << r1.p;
196x << r1.x;
197@@
198
199msg="%s" % (x)
200msg_safe=msg.replace("[","@(").replace("]",")")
201coccilib.org.print_todo(p[0], msg_safe)
202
203@script:python depends on report@
204p << r1.p;
205x << r1.x;
206@@
207
208msg="WARNING: vzalloc should be used for %s, instead of vmalloc/memset" % (x)
209coccilib.report.print_report(p[0], msg)
210
211//-----------------------------------------------------------------
212@r2 depends on org || report@
213type T, T2;
214expression x;
215expression E1,E2,E3,E4;
216statement S;
217position p;
218@@
219
220 x = (T)dma_alloc_coherent@p(E2,E1,E3,E4);
221 if ((x==NULL) || ...) S
222 memset((T2)x,0,E1);
223
224@script:python depends on org@
225p << r2.p;
226x << r2.x;
227@@
228
229msg="%s" % (x)
230msg_safe=msg.replace("[","@(").replace("]",")")
231coccilib.org.print_todo(p[0], msg_safe)
232
233@script:python depends on report@
234p << r2.p;
235x << r2.x;
236@@
237
238msg="WARNING: dma_zalloc_coherent should be used for %s, instead of dma_alloc_coherent/memset" % (x)
239coccilib.report.print_report(p[0], msg)
240
241//-----------------------------------------------------------------
242@r3 depends on org || report@
243type T, T2;
244expression x;
245expression E1,E2,E3;
246statement S;
247position p;
248@@
249
250 x = (T)kmalloc_node@p(E1,E2,E3);
251 if ((x==NULL) || ...) S
252 memset((T2)x,0,E1);
253
254@script:python depends on org@
255p << r3.p;
256x << r3.x;
257@@
258
259msg="%s" % (x)
260msg_safe=msg.replace("[","@(").replace("]",")")
261coccilib.org.print_todo(p[0], msg_safe)
262
263@script:python depends on report@
264p << r3.p;
265x << r3.x;
266@@
267
268msg="WARNING: kzalloc_node should be used for %s, instead of kmalloc_node/memset" % (x)
269coccilib.report.print_report(p[0], msg)
270
271//-----------------------------------------------------------------
272@r4 depends on org || report@
273type T, T2;
274expression x;
275expression E1,E2,E3;
276statement S;
277position p;
278@@
279
280 x = (T)kmem_cache_alloc@p(E2,E3);
281 if ((x==NULL) || ...) S
282 memset((T2)x,0,E1);
283
284@script:python depends on org@
285p << r4.p;
286x << r4.x;
287@@
288
289msg="%s" % (x)
290msg_safe=msg.replace("[","@(").replace("]",")")
291coccilib.org.print_todo(p[0], msg_safe)
292
293@script:python depends on report@
294p << r4.p;
295x << r4.x;
296@@
297
298msg="WARNING: kmem_cache_zalloc should be used for %s, instead of kmem_cache_alloc/memset" % (x)
299coccilib.report.print_report(p[0], msg)
300
301//-----------------------------------------------------------------
302@r5 depends on org || report@
303type T, T2;
304expression x;
305expression E1,E2;
306statement S;
307position p;
308@@
309
310 x = (T)kmem_alloc@p(E1,E2);
311 if ((x==NULL) || ...) S
312 memset((T2)x,0,E1);
313
314@script:python depends on org@
315p << r5.p;
316x << r5.x;
317@@
318
319msg="%s" % (x)
320msg_safe=msg.replace("[","@(").replace("]",")")
321coccilib.org.print_todo(p[0], msg_safe)
322
323@script:python depends on report@
324p << r5.p;
325x << r5.x;
326@@
327
328msg="WARNING: kmem_zalloc should be used for %s, instead of kmem_alloc/memset" % (x)
329coccilib.report.print_report(p[0], msg)
330
331//-----------------------------------------------------------------
332@r6 depends on org || report@
333type T, T2;
334expression x;
335expression E1,E2,E3;
336statement S;
337position p;
338@@
339
340 x = (T)devm_kmalloc@p(E2,E1,E3);
341 if ((x==NULL) || ...) S
342 memset((T2)x,0,E1);
343
344@script:python depends on org@
345p << r6.p;
346x << r6.x;
347@@
348
349msg="%s" % (x)
350msg_safe=msg.replace("[","@(").replace("]",")")
351coccilib.org.print_todo(p[0], msg_safe)
352
353@script:python depends on report@
354p << r6.p;
355x << r6.x;
356@@
357
358msg="WARNING: devm_kzalloc should be used for %s, instead of devm_kmalloc/memset" % (x)
359coccilib.report.print_report(p[0], msg)
360
361//-----------------------------------------------------------------
362@r7 depends on org || report@
363type T, T2;
364expression x;
365expression E1,E2;
366statement S;
367position p;
368@@
369
370 x = (T)kvmalloc@p(E1,E2);
371 if ((x==NULL) || ...) S
372 memset((T2)x,0,E1);
373
374@script:python depends on org@
375p << r7.p;
376x << r7.x;
377@@
378
379msg="%s" % (x)
380msg_safe=msg.replace("[","@(").replace("]",")")
381coccilib.org.print_todo(p[0], msg_safe)
382
383@script:python depends on report@
384p << r7.p;
385x << r7.x;
386@@
387
388msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x)
389coccilib.report.print_report(p[0], msg)
390
391//-----------------------------------------------------------------
392@r8 depends on org || report@
393type T, T2;
394expression x;
395expression E1,E2,E3;
396statement S;
397position p;
398@@
399
400 x = (T)pci_alloc_consistent@p(E2,E1,E3);
401 if ((x==NULL) || ...) S
402 memset((T2)x,0,E1);
403
404@script:python depends on org@
405p << r8.p;
406x << r8.x;
407@@
408
409msg="%s" % (x)
410msg_safe=msg.replace("[","@(").replace("]",")")
411coccilib.org.print_todo(p[0], msg_safe)
412
413@script:python depends on report@
414p << r8.p;
415x << r8.x;
416@@
417
418msg="WARNING: pci_zalloc_consistent should be used for %s, instead of pci_alloc_consistent/memset" % (x)
419coccilib.report.print_report(p[0], msg)
420//-----------------------------------------------------------------
421@r9 depends on org || report@
422type T, T2;
423expression x;
424expression E1,E2,E3;
425statement S;
426position p;
427@@
428
429 x = (T)kvmalloc_node@p(E1,E2,E3);
430 if ((x==NULL) || ...) S
431 memset((T2)x,0,E1);
432
433@script:python depends on org@
434p << r9.p;
435x << r9.x;
436@@
437
438msg="%s" % (x)
439msg_safe=msg.replace("[","@(").replace("]",")")
440coccilib.org.print_todo(p[0], msg_safe)
441
442@script:python depends on report@
443p << r9.p;
444x << r9.x;
445@@
446
447msg="WARNING: kvzalloc_node should be used for %s, instead of kvmalloc_node/memset" % (x)
448coccilib.report.print_report(p[0], msg)
diff --git a/scripts/coccinelle/api/memdup.cocci b/scripts/coccinelle/api/memdup.cocci
index 3d1aa71b7579..1249b727644b 100644
--- a/scripts/coccinelle/api/memdup.cocci
+++ b/scripts/coccinelle/api/memdup.cocci
@@ -49,7 +49,6 @@ statement S;
49@@ 49@@
50 50
51* to = \(kmalloc@p\|kzalloc@p\)(size,flag); 51* to = \(kmalloc@p\|kzalloc@p\)(size,flag);
52 to = kmemdup(from,size,flag);
53 if (to==NULL || ...) S 52 if (to==NULL || ...) S
54* memcpy(to, from, size); 53* memcpy(to, from, size);
55 54
diff --git a/scripts/coccinelle/free/ifnullfree.cocci b/scripts/coccinelle/free/ifnullfree.cocci
index 14a4cd98e83b..a70e123cb12b 100644
--- a/scripts/coccinelle/free/ifnullfree.cocci
+++ b/scripts/coccinelle/free/ifnullfree.cocci
@@ -55,5 +55,5 @@ cocci.print_main("NULL check before that freeing function is not needed", p)
55p << r.p; 55p << r.p;
56@@ 56@@
57 57
58msg = "WARNING: NULL check before freeing functions like kfree, debugfs_remove, debugfs_remove_recursive or usb_free_urb is not needed. Maybe consider reorganizing relevant code to avoid passing NULL values." 58msg = "WARNING: NULL check before some freeing functions is not needed."
59coccilib.report.print_report(p[0], msg) 59coccilib.report.print_report(p[0], msg)
diff --git a/scripts/coccinelle/misc/array_size.cocci b/scripts/coccinelle/misc/array_size.cocci
index 6ec05710b017..09520f0941f0 100644
--- a/scripts/coccinelle/misc/array_size.cocci
+++ b/scripts/coccinelle/misc/array_size.cocci
@@ -72,13 +72,13 @@ position p;
72 (sizeof(E)@p /sizeof(T)) 72 (sizeof(E)@p /sizeof(T))
73) 73)
74 74
75@script:python depends on i&&org@ 75@script:python depends on org@
76p << r.p; 76p << r.p;
77@@ 77@@
78 78
79coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") 79coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
80 80
81@script:python depends on i&&report@ 81@script:python depends on report@
82p << r.p; 82p << r.p;
83@@ 83@@
84 84
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
index c23534925b38..9fbcf5ed0ca7 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -32,10 +32,14 @@ MKSPEC := $(srctree)/scripts/package/mkspec
32 32
33quiet_cmd_src_tar = TAR $(2).tar.gz 33quiet_cmd_src_tar = TAR $(2).tar.gz
34 cmd_src_tar = \ 34 cmd_src_tar = \
35set -e; \
35if test "$(objtree)" != "$(srctree)"; then \ 36if test "$(objtree)" != "$(srctree)"; then \
36 echo "Building source tarball is not possible outside the"; \ 37 echo >&2; \
37 echo "kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \ 38 echo >&2 " ERROR:"; \
38 echo "binrpm-pkg or bindeb-pkg target instead."; \ 39 echo >&2 " Building source tarball is not possible outside the"; \
40 echo >&2 " kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \
41 echo >&2 " binrpm-pkg or bindeb-pkg target instead."; \
42 echo >&2; \
39 false; \ 43 false; \
40fi ; \ 44fi ; \
41$(srctree)/scripts/setlocalversion --save-scmversion; \ 45$(srctree)/scripts/setlocalversion --save-scmversion; \
@@ -94,6 +98,21 @@ bindeb-pkg: FORCE
94 98
95clean-dirs += $(objtree)/debian/ 99clean-dirs += $(objtree)/debian/
96 100
101# snap-pkg
102# ---------------------------------------------------------------------------
103snap-pkg: FORCE
104 rm -rf $(objtree)/snap
105 mkdir $(objtree)/snap
106 $(MAKE) clean
107 $(call cmd,src_tar,$(KERNELPATH))
108 sed "s@KERNELRELEASE@$(KERNELRELEASE)@; \
109 s@SRCTREE@$(shell realpath $(KERNELPATH).tar.gz)@" \
110 $(srctree)/scripts/package/snapcraft.template > \
111 $(objtree)/snap/snapcraft.yaml
112 cd $(objtree)/snap && \
113 snapcraft --target-arch=$(UTS_MACHINE)
114
115clean-dirs += $(objtree)/snap/
97 116
98# tarball targets 117# tarball targets
99# --------------------------------------------------------------------------- 118# ---------------------------------------------------------------------------
@@ -138,6 +157,7 @@ help: FORCE
138 @echo ' binrpm-pkg - Build only the binary kernel RPM package' 157 @echo ' binrpm-pkg - Build only the binary kernel RPM package'
139 @echo ' deb-pkg - Build both source and binary deb kernel packages' 158 @echo ' deb-pkg - Build both source and binary deb kernel packages'
140 @echo ' bindeb-pkg - Build only the binary kernel deb package' 159 @echo ' bindeb-pkg - Build only the binary kernel deb package'
160 @echo ' snap-pkg - Build only the binary kernel snap package (will connect to external hosts)'
141 @echo ' tar-pkg - Build the kernel as an uncompressed tarball' 161 @echo ' tar-pkg - Build the kernel as an uncompressed tarball'
142 @echo ' targz-pkg - Build the kernel as a gzip compressed tarball' 162 @echo ' targz-pkg - Build the kernel as a gzip compressed tarball'
143 @echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball' 163 @echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'
diff --git a/scripts/package/snapcraft.template b/scripts/package/snapcraft.template
new file mode 100644
index 000000000000..626d278e4a5a
--- /dev/null
+++ b/scripts/package/snapcraft.template
@@ -0,0 +1,14 @@
1name: kernel
2version: KERNELRELEASE
3summary: Linux kernel
4description: The upstream Linux kernel
5grade: stable
6confinement: strict
7type: kernel
8
9parts:
10 kernel:
11 plugin: kernel
12 source: SRCTREE
13 source-type: tar
14 kernel-with-firmware: false