1cabdff1aSopenharmony_ci/* Coverity Scan model 2cabdff1aSopenharmony_ci* 3cabdff1aSopenharmony_ci* Copyright (C) 2014 Red Hat, Inc. 4cabdff1aSopenharmony_ci* 5cabdff1aSopenharmony_ci* Authors: 6cabdff1aSopenharmony_ci* Markus Armbruster <armbru@redhat.com> 7cabdff1aSopenharmony_ci* Paolo Bonzini <pbonzini@redhat.com> 8cabdff1aSopenharmony_ci* 9cabdff1aSopenharmony_ci* This work is licensed under the terms of the GNU GPL, version 2 or, at your 10cabdff1aSopenharmony_ci* option, any later version. See the COPYING file in the top-level directory. 11cabdff1aSopenharmony_ci*/ 12cabdff1aSopenharmony_ci/* 13cabdff1aSopenharmony_ci* This is the source code for our Coverity user model file. The 14cabdff1aSopenharmony_ci* purpose of user models is to increase scanning accuracy by explaining 15cabdff1aSopenharmony_ci* code Coverity can't see (out of tree libraries) or doesn't 16cabdff1aSopenharmony_ci* sufficiently understand. Better accuracy means both fewer false 17cabdff1aSopenharmony_ci* positives and more true defects. Memory leaks in particular. 18cabdff1aSopenharmony_ci* 19cabdff1aSopenharmony_ci* - A model file can't import any header files. Some built-in primitives are 20cabdff1aSopenharmony_ci* available but not wchar_t, NULL etc. 21cabdff1aSopenharmony_ci* - Modeling doesn't need full structs and typedefs. Rudimentary structs 22cabdff1aSopenharmony_ci* and similar types are sufficient. 23cabdff1aSopenharmony_ci* - An uninitialized local variable signifies that the variable could be 24cabdff1aSopenharmony_ci* any value. 25cabdff1aSopenharmony_ci* 26cabdff1aSopenharmony_ci* The model file must be uploaded by an admin in the analysis settings of 27cabdff1aSopenharmony_ci* https://scan.coverity.com/projects/54 28cabdff1aSopenharmony_ci* 29cabdff1aSopenharmony_ci* above text is based on https://github.com/qemu/qemu/blob/master/scripts/coverity-model.c 30cabdff1aSopenharmony_ci*/ 31cabdff1aSopenharmony_ci 32cabdff1aSopenharmony_ci#define NULL (void *)0 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_ci// Based on https://scan.coverity.com/models 35cabdff1aSopenharmony_civoid *av_malloc(size_t size) { 36cabdff1aSopenharmony_ci int has_memory; 37cabdff1aSopenharmony_ci __coverity_negative_sink__(size); 38cabdff1aSopenharmony_ci if (has_memory) { 39cabdff1aSopenharmony_ci void *ptr = __coverity_alloc__(size); 40cabdff1aSopenharmony_ci __coverity_mark_as_uninitialized_buffer__(ptr); 41cabdff1aSopenharmony_ci __coverity_mark_as_afm_allocated__(ptr, "av_free"); 42cabdff1aSopenharmony_ci return ptr; 43cabdff1aSopenharmony_ci } else { 44cabdff1aSopenharmony_ci return 0; 45cabdff1aSopenharmony_ci } 46cabdff1aSopenharmony_ci} 47cabdff1aSopenharmony_ci 48cabdff1aSopenharmony_civoid *av_mallocz(size_t size) { 49cabdff1aSopenharmony_ci int has_memory; 50cabdff1aSopenharmony_ci __coverity_negative_sink__(size); 51cabdff1aSopenharmony_ci if (has_memory) { 52cabdff1aSopenharmony_ci void *ptr = __coverity_alloc__(size); 53cabdff1aSopenharmony_ci __coverity_writeall0__(ptr); 54cabdff1aSopenharmony_ci __coverity_mark_as_afm_allocated__(ptr, "av_free"); 55cabdff1aSopenharmony_ci return ptr; 56cabdff1aSopenharmony_ci } else { 57cabdff1aSopenharmony_ci return 0; 58cabdff1aSopenharmony_ci } 59cabdff1aSopenharmony_ci} 60cabdff1aSopenharmony_ci 61cabdff1aSopenharmony_civoid *av_realloc(void *ptr, size_t size) { 62cabdff1aSopenharmony_ci int has_memory; 63cabdff1aSopenharmony_ci __coverity_negative_sink__(size); 64cabdff1aSopenharmony_ci if (has_memory) { 65cabdff1aSopenharmony_ci __coverity_escape__(ptr); 66cabdff1aSopenharmony_ci ptr = __coverity_alloc__(size); 67cabdff1aSopenharmony_ci __coverity_writeall__(ptr); 68cabdff1aSopenharmony_ci __coverity_mark_as_afm_allocated__(ptr, "av_free"); 69cabdff1aSopenharmony_ci return ptr; 70cabdff1aSopenharmony_ci } else { 71cabdff1aSopenharmony_ci return 0; 72cabdff1aSopenharmony_ci } 73cabdff1aSopenharmony_ci} 74cabdff1aSopenharmony_ci 75cabdff1aSopenharmony_civoid *av_free(void *ptr) { 76cabdff1aSopenharmony_ci __coverity_free__(ptr); 77cabdff1aSopenharmony_ci __coverity_mark_as_afm_freed__(ptr, "av_free"); 78cabdff1aSopenharmony_ci} 79cabdff1aSopenharmony_ci 80