__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
// SPDX-License-Identifier: GPL-2.0-only
///
/// Find if/else condition with kmalloc/vmalloc calls.
/// Suggest to use kvmalloc instead. Same for kvfree.
///
// Confidence: High
// Copyright: (C) 2020 Denis Efremov ISPRAS
// Options: --no-includes --include-headers
//

virtual patch
virtual report
virtual org
virtual context

@initialize:python@
@@
filter = frozenset(['kvfree'])

def relevant(p):
    return not (filter & {el.current_element for el in p})

@kvmalloc depends on !patch@
expression E, E1, size;
identifier flags;
binary operator cmp = {<=, <, ==, >, >=};
identifier x;
type T;
position p;
@@

(
* if (size cmp E1 || ...)@p {
    ...
*    E = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_node\|kzalloc_node\|
*          kmalloc_array\|kmalloc_array_node\|kcalloc_node\)
*          (..., size, \(flags\|GFP_KERNEL\|\(GFP_KERNEL\|flags\)|__GFP_NOWARN\), ...)
    ...
  } else {
    ...
*    E = \(vmalloc\|vzalloc\|vmalloc_node\|vzalloc_node\)(..., size, ...)
    ...
  }
|
* E = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_node\|kzalloc_node\|
*       kmalloc_array\|kmalloc_array_node\|kcalloc_node\)
*       (..., size, \(flags\|GFP_KERNEL\|\(GFP_KERNEL\|flags\)|__GFP_NOWARN\), ...)
  ... when != E = E1
      when != size = E1
      when any
* if (E == NULL)@p {
    ...
*   E = \(vmalloc\|vzalloc\|vmalloc_node\|vzalloc_node\)(..., size, ...)
    ...
  }
|
* T x = \(kmalloc\|kzalloc\|kcalloc\|kmalloc_node\|kzalloc_node\|
*         kmalloc_array\|kmalloc_array_node\|kcalloc_node\)
*         (..., size, \(flags\|GFP_KERNEL\|\(GFP_KERNEL\|flags\)|__GFP_NOWARN\), ...);
  ... when != x = E1
      when != size = E1
      when any
* if (x == NULL)@p {
    ...
*   x = \(vmalloc\|vzalloc\|vmalloc_node\|vzalloc_node\)(..., size, ...)
    ...
  }
)

@kvfree depends on !patch@
expression E;
position p : script:python() { relevant(p) };
@@

* if (is_vmalloc_addr(E))@p {
    ...
*   vfree(E)
    ...
  } else {
    ... when != krealloc(E, ...)
        when any
*   \(kfree\|kfree_sensitive\)(E)
    ...
  }

@depends on patch@
expression E, E1, size, node;
binary operator cmp = {<=, <, ==, >, >=};
identifier flags, x;
type T;
@@

(
- if (size cmp E1)
-    E = kmalloc(size, flags);
- else
-    E = vmalloc(size);
+ E = kvmalloc(size, flags);
|
- if (size cmp E1)
-    E = kmalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- else
-    E = vmalloc(size);
+ E = kvmalloc(size, GFP_KERNEL);
|
- E = kmalloc(size, flags | __GFP_NOWARN);
- if (E == NULL)
-   E = vmalloc(size);
+ E = kvmalloc(size, flags);
|
- E = kmalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- if (E == NULL)
-   E = vmalloc(size);
+ E = kvmalloc(size, GFP_KERNEL);
|
- T x = kmalloc(size, flags | __GFP_NOWARN);
- if (x == NULL)
-   x = vmalloc(size);
+ T x = kvmalloc(size, flags);
|
- T x = kmalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- if (x == NULL)
-   x = vmalloc(size);
+ T x = kvmalloc(size, GFP_KERNEL);
|
- if (size cmp E1)
-    E = kzalloc(size, flags);
- else
-    E = vzalloc(size);
+ E = kvzalloc(size, flags);
|
- if (size cmp E1)
-    E = kzalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- else
-    E = vzalloc(size);
+ E = kvzalloc(size, GFP_KERNEL);
|
- E = kzalloc(size, flags | __GFP_NOWARN);
- if (E == NULL)
-   E = vzalloc(size);
+ E = kvzalloc(size, flags);
|
- E = kzalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- if (E == NULL)
-   E = vzalloc(size);
+ E = kvzalloc(size, GFP_KERNEL);
|
- T x = kzalloc(size, flags | __GFP_NOWARN);
- if (x == NULL)
-   x = vzalloc(size);
+ T x = kvzalloc(size, flags);
|
- T x = kzalloc(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\));
- if (x == NULL)
-   x = vzalloc(size);
+ T x = kvzalloc(size, GFP_KERNEL);
|
- if (size cmp E1)
-    E = kmalloc_node(size, flags, node);
- else
-    E = vmalloc_node(size, node);
+ E = kvmalloc_node(size, flags, node);
|
- if (size cmp E1)
-    E = kmalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- else
-    E = vmalloc_node(size, node);
+ E = kvmalloc_node(size, GFP_KERNEL, node);
|
- E = kmalloc_node(size, flags | __GFP_NOWARN, node);
- if (E == NULL)
-   E = vmalloc_node(size, node);
+ E = kvmalloc_node(size, flags, node);
|
- E = kmalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- if (E == NULL)
-   E = vmalloc_node(size, node);
+ E = kvmalloc_node(size, GFP_KERNEL, node);
|
- T x = kmalloc_node(size, flags | __GFP_NOWARN, node);
- if (x == NULL)
-   x = vmalloc_node(size, node);
+ T x = kvmalloc_node(size, flags, node);
|
- T x = kmalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- if (x == NULL)
-   x = vmalloc_node(size, node);
+ T x = kvmalloc_node(size, GFP_KERNEL, node);
|
- if (size cmp E1)
-    E = kvzalloc_node(size, flags, node);
- else
-    E = vzalloc_node(size, node);
+ E = kvzalloc_node(size, flags, node);
|
- if (size cmp E1)
-    E = kvzalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- else
-    E = vzalloc_node(size, node);
+ E = kvzalloc_node(size, GFP_KERNEL, node);
|
- E = kvzalloc_node(size, flags | __GFP_NOWARN, node);
- if (E == NULL)
-   E = vzalloc_node(size, node);
+ E = kvzalloc_node(size, flags, node);
|
- E = kvzalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- if (E == NULL)
-   E = vzalloc_node(size, node);
+ E = kvzalloc_node(size, GFP_KERNEL, node);
|
- T x = kvzalloc_node(size, flags | __GFP_NOWARN, node);
- if (x == NULL)
-   x = vzalloc_node(size, node);
+ T x = kvzalloc_node(size, flags, node);
|
- T x = kvzalloc_node(size, \(GFP_KERNEL\|GFP_KERNEL|__GFP_NOWARN\), node);
- if (x == NULL)
-   x = vzalloc_node(size, node);
+ T x = kvzalloc_node(size, GFP_KERNEL, node);
)

@depends on patch@
expression E;
position p : script:python() { relevant(p) };
@@

- if (is_vmalloc_addr(E))@p
-   vfree(E);
- else
-   kfree(E);
+ kvfree(E);

@script: python depends on report@
p << kvmalloc.p;
@@

coccilib.report.print_report(p[0], "WARNING opportunity for kvmalloc")

@script: python depends on org@
p << kvmalloc.p;
@@

coccilib.org.print_todo(p[0], "WARNING opportunity for kvmalloc")

@script: python depends on report@
p << kvfree.p;
@@

coccilib.report.print_report(p[0], "WARNING opportunity for kvfree")

@script: python depends on org@
p << kvfree.p;
@@

coccilib.org.print_todo(p[0], "WARNING opportunity for kvfree")

Filemanager

Name Type Size Permission Actions
alloc Folder 0755
atomic_as_refcounter.cocci File 2.27 KB 0644
check_bq27xxx_data.cocci File 3.48 KB 0644
d_find_alias.cocci File 1.3 KB 0644
device_attr_show.cocci File 1.06 KB 0644
err_cast.cocci File 1.11 KB 0644
kfree_mismatch.cocci File 5.56 KB 0644
kfree_sensitive.cocci File 1.91 KB 0644
kstrdup.cocci File 2.44 KB 0644
kvmalloc.cocci File 6.14 KB 0644
memdup.cocci File 1.36 KB 0644
memdup_user.cocci File 2.6 KB 0644
platform_get_irq.cocci File 1.22 KB 0644
platform_no_drv_owner.cocci File 3.81 KB 0644
pm_runtime.cocci File 2.39 KB 0644
resource_size.cocci File 2.1 KB 0644
simple_open.cocci File 1.21 KB 0644
stream_open.cocci File 7.67 KB 0644
string_choices.cocci File 5.9 KB 0644
vma_pages.cocci File 1.48 KB 0644
Filemanager