| // Find and fix trivial use-after-free of Error objects |
| // |
| // Copyright (c) 2020 Virtuozzo International GmbH. |
| // |
| // This program is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU General Public License as |
| // published by the Free Software Foundation; either version 2 of the |
| // License, or (at your option) any later version. |
| // |
| // This program is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| // |
| // You should have received a copy of the GNU General Public License |
| // along with this program. If not, see |
| // <http://www.gnu.org/licenses/>. |
| // |
| // How to use: |
| // spatch --sp-file scripts/coccinelle/error-use-after-free.cocci \ |
| // --macro-file scripts/cocci-macro-file.h --in-place \ |
| // --no-show-diff ( FILES... | --use-gitgrep . ) |
| |
| @ exists@ |
| identifier fn, fn2; |
| expression err; |
| @@ |
| |
| fn(...) |
| { |
| <... |
| ( |
| error_free(err); |
| + err = NULL; |
| | |
| error_report_err(err); |
| + err = NULL; |
| | |
| error_reportf_err(err, ...); |
| + err = NULL; |
| | |
| warn_report_err(err); |
| + err = NULL; |
| | |
| warn_reportf_err(err, ...); |
| + err = NULL; |
| ) |
| ... when != err = NULL |
| when != exit(...) |
| fn2(..., err, ...) |
| ...> |
| } |