error-use-after-free.cocci (1362B)
1 // Find and fix trivial use-after-free of Error objects 2 // 3 // Copyright (c) 2020 Virtuozzo International GmbH. 4 // 5 // This program is free software; you can redistribute it and/or 6 // modify it under the terms of the GNU General Public License as 7 // published by the Free Software Foundation; either version 2 of the 8 // License, or (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with this program. If not, see 17 // <http://www.gnu.org/licenses/>. 18 // 19 // How to use: 20 // spatch --sp-file scripts/coccinelle/error-use-after-free.cocci \ 21 // --macro-file scripts/cocci-macro-file.h --in-place \ 22 // --no-show-diff ( FILES... | --use-gitgrep . ) 23 24 @ exists@ 25 identifier fn, fn2; 26 expression err; 27 @@ 28 29 fn(...) 30 { 31 <... 32 ( 33 error_free(err); 34 + err = NULL; 35 | 36 error_report_err(err); 37 + err = NULL; 38 | 39 error_reportf_err(err, ...); 40 + err = NULL; 41 | 42 warn_report_err(err); 43 + err = NULL; 44 | 45 warn_reportf_err(err, ...); 46 + err = NULL; 47 ) 48 ... when != err = NULL 49 when != exit(...) 50 fn2(..., err, ...) 51 ...> 52 }