cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

flexible_array.cocci (1821B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2///
      3/// Zero-length and one-element arrays are deprecated, see
      4/// Documentation/process/deprecated.rst
      5/// Flexible-array members should be used instead.
      6///
      7//
      8// Confidence: High
      9// Copyright: (C) 2020 Denis Efremov ISPRAS.
     10// Comments:
     11// Options: --no-includes --include-headers
     12
     13virtual context
     14virtual report
     15virtual org
     16virtual patch
     17
     18@initialize:python@
     19@@
     20def relevant(positions):
     21    for p in positions:
     22        if "uapi" in p.file:
     23             return False
     24    return True
     25
     26@r depends on !patch@
     27identifier name, array;
     28type T;
     29position p : script:python() { relevant(p) };
     30@@
     31
     32(
     33  struct name {
     34    ...
     35*   T array@p[\(0\|1\)];
     36  };
     37|
     38  struct {
     39    ...
     40*   T array@p[\(0\|1\)];
     41  };
     42|
     43  union name {
     44    ...
     45*   T array@p[\(0\|1\)];
     46  };
     47|
     48  union {
     49    ...
     50*   T array@p[\(0\|1\)];
     51  };
     52)
     53
     54@only_field depends on patch@
     55identifier name, array;
     56type T;
     57position q;
     58@@
     59
     60(
     61  struct name {@q
     62    T array[0];
     63  };
     64|
     65  struct {@q
     66    T array[0];
     67  };
     68)
     69
     70@depends on patch@
     71identifier name, array;
     72type T;
     73position p : script:python() { relevant(p) };
     74// position @q with rule "only_field" simplifies
     75// handling of bitfields, arrays, etc.
     76position q != only_field.q;
     77@@
     78
     79(
     80  struct name {@q
     81    ...
     82    T array@p[
     83-       0
     84    ];
     85  };
     86|
     87  struct {@q
     88    ...
     89    T array@p[
     90-       0
     91    ];
     92  };
     93)
     94
     95@script: python depends on report@
     96p << r.p;
     97@@
     98
     99msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
    100coccilib.report.print_report(p[0], msg)
    101
    102@script: python depends on org@
    103p << r.p;
    104@@
    105
    106msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
    107coccilib.org.print_todo(p[0], msg)