Blame view

kernel/linux-rt-4.4.41/scripts/coccinelle/api/d_find_alias.cocci 1.24 KB
5113f6f70   김현기   kernel add
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
  /// Make sure calls to d_find_alias() have a corresponding call to dput().
  //
  // Keywords: d_find_alias, dput
  //
  // Confidence: Moderate
  // URL: http://coccinelle.lip6.fr/
  // Options: --include-headers
  
  virtual context
  virtual org
  virtual patch
  virtual report
  
  @r exists@
  local idexpression struct dentry *dent;
  expression E, E1;
  statement S1, S2;
  position p1, p2;
  @@
  (
  	if (!(dent@p1 = d_find_alias(...))) S1
  |
  	dent@p1 = d_find_alias(...)
  )
  
  <...when != dput(dent)
      when != if (...) { <+... dput(dent) ...+> }
      when != true !dent || ...
      when != dent = E
      when != E = dent
  if (!dent || ...) S2
  ...>
  (
  	return <+...dent...+>;
  |
  	return @p2 ...;
  |
  	dent@p2 = E1;
  |
  	E1 = dent;
  )
  
  @depends on context@
  local idexpression struct dentry *r.dent;
  position r.p1,r.p2;
  @@
  * dent@p1 = ...
    ...
  (
  * return@p2 ...;
  |
  * dent@p2
  )
  
  
  @script:python depends on org@
  p1 << r.p1;
  p2 << r.p2;
  @@
  cocci.print_main("Missing call to dput()",p1)
  cocci.print_secs("",p2)
  
  @depends on patch@
  local idexpression struct dentry *r.dent;
  position r.p2;
  @@
  (
  + dput(dent);
    return @p2 ...;
  |
  + dput(dent);
    dent@p2 = ...;
  )
  
  @script:python depends on report@
  p1 << r.p1;
  p2 << r.p2;
  @@
  msg = "Missing call to dput() at line %s."
  coccilib.report.print_report(p1[0], msg % (p2[0].line))