__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
// SPDX-License-Identifier: GPL-2.0-only
///
/// Use kfree_sensitive, kvfree_sensitive rather than memset or
/// memzero_explicit followed by kfree.
///
// Confidence: High
// Copyright: (C) 2020 Denis Efremov ISPRAS
// Options: --no-includes --include-headers
//
// Keywords: kfree_sensitive, kvfree_sensitive
//
virtual context
virtual patch
virtual org
virtual report
@initialize:python@
@@
# kmalloc_oob_in_memset uses memset to explicitly trigger out-of-bounds access
filter = frozenset(['kmalloc_oob_in_memset',
'kfree_sensitive', 'kvfree_sensitive'])
def relevant(p):
return not (filter & {el.current_element for el in p})
@cond@
position ok;
@@
if (...)
\(memset@ok\|memzero_explicit@ok\)(...);
@r depends on !patch forall@
expression E;
position p : script:python() { relevant(p) };
position m != cond.ok;
type T;
@@
(
* memset@m((T)E, 0, ...);
|
* memzero_explicit@m((T)E, ...);
)
... when != E
when strict
* \(kfree\|vfree\|kvfree\)(E)@p;
@rp_memzero depends on patch@
expression E, size;
position p : script:python() { relevant(p) };
position m != cond.ok;
type T;
@@
- memzero_explicit@m((T)E, size);
... when != E
when strict
(
- kfree(E)@p;
+ kfree_sensitive(E);
|
- \(vfree\|kvfree\)(E)@p;
+ kvfree_sensitive(E, size);
)
@rp_memset depends on patch@
expression E, size;
position p : script:python() { relevant(p) };
position m != cond.ok;
type T;
@@
- memset@m((T)E, 0, size);
... when != E
when strict
(
- kfree(E)@p;
+ kfree_sensitive(E);
|
- \(vfree\|kvfree\)(E)@p;
+ kvfree_sensitive(E, size);
)
@script:python depends on report@
p << r.p;
m << r.m;
@@
msg = "WARNING opportunity for kfree_sensitive/kvfree_sensitive (memset at line %s)"
coccilib.report.print_report(p[0], msg % (m[0].line))
@script:python depends on org@
p << r.p;
m << r.m;
@@
msg = "WARNING opportunity for kfree_sensitive/kvfree_sensitive (memset at line %s)"
coccilib.org.print_todo(p[0], msg % (m[0].line))
| 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 |
|