Server IP : 172.67.216.182 / Your IP : 162.158.108.6 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/src/linux-headers-5.15.0-143/scripts/coccinelle/api/ |
Upload File : |
// SPDX-License-Identifier: GPL-2.0-only /// /// Check that kvmalloc'ed memory is freed by kfree functions, /// vmalloc'ed by vfree functions and kvmalloc'ed by kvfree /// functions. /// // Confidence: High // Copyright: (C) 2020 Denis Efremov ISPRAS // Options: --no-includes --include-headers // virtual patch virtual report virtual org virtual context @alloc@ expression E, E1; position kok, vok; @@ ( if (...) { ... E = \(kmalloc\|kzalloc\|krealloc\|kcalloc\| kmalloc_node\|kzalloc_node\|kmalloc_array\| kmalloc_array_node\|kcalloc_node\)(...)@kok ... } else { ... E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\| vzalloc_node\|vmalloc_exec\|vmalloc_32\| vmalloc_32_user\|__vmalloc\|__vmalloc_node_range\| __vmalloc_node\)(...)@vok ... } | E = \(kmalloc\|kzalloc\|krealloc\|kcalloc\|kmalloc_node\|kzalloc_node\| kmalloc_array\|kmalloc_array_node\|kcalloc_node\)(...)@kok ... when != E = E1 when any if (E == NULL) { ... E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\| vzalloc_node\|vmalloc_exec\|vmalloc_32\| vmalloc_32_user\|__vmalloc\|__vmalloc_node_range\| __vmalloc_node\)(...)@vok ... } ) @free@ expression E; position fok; @@ E = \(kvmalloc\|kvzalloc\|kvcalloc\|kvzalloc_node\|kvmalloc_node\| kvmalloc_array\)(...) ... kvfree(E)@fok @vfree depends on !patch@ expression E; position a != alloc.kok; position f != free.fok; @@ * E = \(kmalloc\|kzalloc\|krealloc\|kcalloc\|kmalloc_node\| * kzalloc_node\|kmalloc_array\|kmalloc_array_node\| * kcalloc_node\)(...)@a ... when != if (...) { ... E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\|vzalloc_node\|vmalloc_exec\|vmalloc_32\|vmalloc_32_user\|__vmalloc\|__vmalloc_node_range\|__vmalloc_node\)(...); ... } when != is_vmalloc_addr(E) when any * \(vfree\|vfree_atomic\|kvfree\)(E)@f @depends on patch exists@ expression E; position a != alloc.kok; position f != free.fok; @@ E = \(kmalloc\|kzalloc\|krealloc\|kcalloc\|kmalloc_node\| kzalloc_node\|kmalloc_array\|kmalloc_array_node\| kcalloc_node\)(...)@a ... when != if (...) { ... E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\|vzalloc_node\|vmalloc_exec\|vmalloc_32\|vmalloc_32_user\|__vmalloc\|__vmalloc_node_range\|__vmalloc_node\)(...); ... } when != is_vmalloc_addr(E) when any - \(vfree\|vfree_atomic\|kvfree\)(E)@f + kfree(E) @kfree depends on !patch@ expression E; position a != alloc.vok; position f != free.fok; @@ * E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\|vzalloc_node\| * vmalloc_exec\|vmalloc_32\|vmalloc_32_user\|__vmalloc\| * __vmalloc_node_range\|__vmalloc_node\)(...)@a ... when != is_vmalloc_addr(E) when any * \(kfree\|kfree_sensitive\|kvfree\)(E)@f @depends on patch exists@ expression E; position a != alloc.vok; position f != free.fok; @@ E = \(vmalloc\|vzalloc\|vmalloc_user\|vmalloc_node\|vzalloc_node\| vmalloc_exec\|vmalloc_32\|vmalloc_32_user\|__vmalloc\| __vmalloc_node_range\|__vmalloc_node\)(...)@a ... when != is_vmalloc_addr(E) when any - \(kfree\|kvfree\)(E)@f + vfree(E) @kvfree depends on !patch@ expression E; position a, f; @@ * E = \(kvmalloc\|kvzalloc\|kvcalloc\|kvzalloc_node\|kvmalloc_node\| * kvmalloc_array\)(...)@a ... when != is_vmalloc_addr(E) when any * \(kfree\|kfree_sensitive\|vfree\|vfree_atomic\)(E)@f @depends on patch exists@ expression E; @@ E = \(kvmalloc\|kvzalloc\|kvcalloc\|kvzalloc_node\|kvmalloc_node\| kvmalloc_array\)(...) ... when != is_vmalloc_addr(E) when any - \(kfree\|vfree\)(E) + kvfree(E) @kvfree_switch depends on !patch@ expression alloc.E; position f; @@ ... when != is_vmalloc_addr(E) when any * \(kfree\|kfree_sensitive\|vfree\|vfree_atomic\)(E)@f @depends on patch exists@ expression alloc.E; position f; @@ ... when != is_vmalloc_addr(E) when any ( - \(kfree\|vfree\)(E)@f + kvfree(E) | - kfree_sensitive(E)@f + kvfree_sensitive(E) ) @script: python depends on report@ a << vfree.a; f << vfree.f; @@ msg = "WARNING kmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.report.print_report(f[0], msg) @script: python depends on org@ a << vfree.a; f << vfree.f; @@ msg = "WARNING kmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.org.print_todo(f[0], msg) @script: python depends on report@ a << kfree.a; f << kfree.f; @@ msg = "WARNING vmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.report.print_report(f[0], msg) @script: python depends on org@ a << kfree.a; f << kfree.f; @@ msg = "WARNING vmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.org.print_todo(f[0], msg) @script: python depends on report@ a << kvfree.a; f << kvfree.f; @@ msg = "WARNING kvmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.report.print_report(f[0], msg) @script: python depends on org@ a << kvfree.a; f << kvfree.f; @@ msg = "WARNING kvmalloc is used to allocate this memory at line %s" % (a[0].line) coccilib.org.print_todo(f[0], msg) @script: python depends on report@ ka << alloc.kok; va << alloc.vok; f << kvfree_switch.f; @@ msg = "WARNING kmalloc (line %s) && vmalloc (line %s) are used to allocate this memory" % (ka[0].line, va[0].line) coccilib.report.print_report(f[0], msg) @script: python depends on org@ ka << alloc.kok; va << alloc.vok; f << kvfree_switch.f; @@ msg = "WARNING kmalloc (line %s) && vmalloc (line %s) are used to allocate this memory" % (ka[0].line, va[0].line) coccilib.org.print_todo(f[0], msg)