Blame view

kernel/linux-rt-4.4.41/scripts/coccinelle/api/simple_open.cocci 1.18 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
  /// Remove an open coded simple_open() function
  /// and replace file operations references to the function
  /// with simple_open() instead.
  ///
  // Confidence: High
  // Comments:
  // Options: --no-includes --include-headers
  
  virtual patch
  virtual report
  
  @ open depends on patch @
  identifier open_f != simple_open;
  identifier i, f;
  @@
  -int open_f(struct inode *i, struct file *f)
  -{
  (
  -if (i->i_private)
  -f->private_data = i->i_private;
  |
  -f->private_data = i->i_private;
  )
  -return 0;
  -}
  
  @ has_open depends on open @
  identifier fops;
  identifier open.open_f;
  @@
  struct file_operations fops = {
  ...,
  -.open = open_f,
  +.open = simple_open,
  ...
  };
  
  @ openr depends on report @
  identifier open_f != simple_open;
  identifier i, f;
  position p;
  @@
  int open_f@p(struct inode *i, struct file *f)
  {
  (
  if (i->i_private)
  f->private_data = i->i_private;
  |
  f->private_data = i->i_private;
  )
  return 0;
  }
  
  @ has_openr depends on openr @
  identifier fops;
  identifier openr.open_f;
  position p;
  @@
  struct file_operations fops = {
  ...,
  .open = open_f@p,
  ...
  };
  
  @script:python@
  pf << openr.p;
  ps << has_openr.p;
  @@
  
  coccilib.report.print_report(pf[0],"WARNING opportunity for simple_open, see also structure on line %s"%(ps[0].line))