1 // SPDX-License-Identifier: GPL-2.0-only
3 /// Use kfree_sensitive, kvfree_sensitive rather than memset or
4 /// memzero_explicit followed by kfree.
7 // Copyright: (C) 2020 Denis Efremov ISPRAS
8 // Options: --no-includes --include-headers
10 // Keywords: kfree_sensitive, kvfree_sensitive
20 # kmalloc_oob_in_memset uses memset to explicitly trigger out-of-bounds access
21 filter = frozenset(['kmalloc_oob_in_memset',
22 'kfree_sensitive', 'kvfree_sensitive'])
25 return not (filter & {el.current_element for el in p})
32 \(memset@ok\|memzero_explicit@ok\)(...);
34 @r depends on !patch forall@
36 position p : script:python() { relevant(p) };
37 position m != cond.ok;
42 * memset@m((T)E, 0, ...);
44 * memzero_explicit@m((T)E, ...);
48 * \(kfree\|vfree\|kvfree\)(E)@p;
50 @rp_memzero depends on patch@
52 position p : script:python() { relevant(p) };
53 position m != cond.ok;
57 - memzero_explicit@m((T)E, size);
64 - \(vfree\|kvfree\)(E)@p;
65 + kvfree_sensitive(E, size);
68 @rp_memset depends on patch@
70 position p : script:python() { relevant(p) };
71 position m != cond.ok;
75 - memset@m((T)E, 0, size);
82 - \(vfree\|kvfree\)(E)@p;
83 + kvfree_sensitive(E, size);
86 @script:python depends on report@
91 msg = "WARNING opportunity for kfree_sensitive/kvfree_sensitive (memset at line %s)"
92 coccilib.report.print_report(p[0], msg % (m[0].line))
94 @script:python depends on org@
99 msg = "WARNING opportunity for kfree_sensitive/kvfree_sensitive (memset at line %s)"
100 coccilib.org.print_todo(p[0], msg % (m[0].line))