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

alloc_cast.cocci (3642B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/// Remove casting the values returned by memory allocation functions
      3/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc.
      4///
      5//# This makes an effort to find cases of casting of values returned by
      6//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,
      7//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes
      8//# the casting as it is not required. The result in the patch case may
      9//# need some reformatting.
     10//
     11// Confidence: High
     12// Copyright: (C) 2014 Himangi Saraogi
     13// Copyright: (C) 2017 Himanshu Jha
     14// Comments:
     15// Options: --no-includes --include-headers
     16//
     17
     18virtual context
     19virtual patch
     20virtual org
     21virtual report
     22
     23@initialize:python@
     24@@
     25import re
     26pattern = '__'
     27m = re.compile(pattern)
     28
     29@r1 depends on context || patch@
     30type T;
     31@@
     32
     33  (T *)
     34  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
     35   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
     36   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
     37   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
     38   pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
     39   kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
     40
     41//----------------------------------------------------------
     42//  For context mode
     43//----------------------------------------------------------
     44
     45@script:python depends on context@
     46t << r1.T;
     47@@
     48
     49if m.search(t) != None:
     50        cocci.include_match(False)
     51
     52@depends on context && r1@
     53type r1.T;
     54@@
     55
     56* (T *)
     57  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
     58   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
     59   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
     60   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
     61   pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
     62   kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
     63
     64//----------------------------------------------------------
     65//  For patch mode
     66//----------------------------------------------------------
     67
     68@script:python depends on patch@
     69t << r1.T;
     70@@
     71
     72if m.search(t) != None:
     73        cocci.include_match(False)
     74
     75@depends on patch && r1@
     76type r1.T;
     77@@
     78
     79- (T *)
     80  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
     81   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
     82   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
     83   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
     84   pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
     85   kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
     86
     87//----------------------------------------------------------
     88//  For org and report mode
     89//----------------------------------------------------------
     90
     91@r2 depends on org || report@
     92type T;
     93position p;
     94@@
     95
     96 (T@p *)
     97  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
     98   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
     99   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
    100   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
    101   pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
    102   kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
    103
    104@script:python depends on org@
    105p << r2.p;
    106t << r2.T;
    107@@
    108
    109if m.search(t) != None:
    110	cocci.include_match(False)
    111else:
    112	coccilib.org.print_safe_todo(p[0], t)
    113
    114@script:python depends on report@
    115p << r2.p;
    116t << r2.T;
    117@@
    118
    119if m.search(t) != None:
    120	cocci.include_match(False)
    121else:
    122	msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)
    123	coccilib.report.print_report(p[0], msg)