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

swap.cocci (1517B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2///
      3/// Check for opencoded swap() implementation.
      4///
      5// Confidence: High
      6// Copyright: (C) 2021 Denis Efremov ISPRAS
      7// Options: --no-includes --include-headers
      8//
      9// Keywords: swap
     10//
     11
     12virtual patch
     13virtual org
     14virtual report
     15virtual context
     16
     17@rvar depends on !patch@
     18identifier tmp;
     19expression a, b;
     20type T;
     21position p;
     22@@
     23
     24(
     25* T tmp;
     26|
     27* T tmp = 0;
     28|
     29* T *tmp = NULL;
     30)
     31... when != tmp
     32* tmp = a;
     33* a = b;@p
     34* b = tmp;
     35... when != tmp
     36
     37@r depends on !patch@
     38identifier tmp;
     39expression a, b;
     40position p != rvar.p;
     41@@
     42
     43* tmp = a;
     44* a = b;@p
     45* b = tmp;
     46
     47@rpvar depends on patch@
     48identifier tmp;
     49expression a, b;
     50type T;
     51@@
     52
     53(
     54- T tmp;
     55|
     56- T tmp = 0;
     57|
     58- T *tmp = NULL;
     59)
     60... when != tmp
     61- tmp = a;
     62- a = b;
     63- b = tmp
     64+ swap(a, b)
     65  ;
     66... when != tmp
     67
     68@rp depends on patch@
     69identifier tmp;
     70expression a, b;
     71@@
     72
     73- tmp = a;
     74- a = b;
     75- b = tmp
     76+ swap(a, b)
     77  ;
     78
     79@depends on patch && (rpvar || rp)@
     80@@
     81
     82(
     83  for (...;...;...)
     84- {
     85	swap(...);
     86- }
     87|
     88  while (...)
     89- {
     90	swap(...);
     91- }
     92|
     93  if (...)
     94- {
     95	swap(...);
     96- }
     97)
     98
     99
    100@script:python depends on report@
    101p << r.p;
    102@@
    103
    104coccilib.report.print_report(p[0], "WARNING opportunity for swap()")
    105
    106@script:python depends on org@
    107p << r.p;
    108@@
    109
    110coccilib.org.print_todo(p[0], "WARNING opportunity for swap()")
    111
    112@script:python depends on report@
    113p << rvar.p;
    114@@
    115
    116coccilib.report.print_report(p[0], "WARNING opportunity for swap()")
    117
    118@script:python depends on org@
    119p << rvar.p;
    120@@
    121
    122coccilib.org.print_todo(p[0], "WARNING opportunity for swap()")