====== Coverity ======
The %%FreeBSD%% Project uses the [[https://www.synopsys.com|Synopsys]] [[https://scan.coverity.com/|Coverity Scan]] service for static analysis of %%FreeBSD%% source code to identity security vulnerabilities and other code quality issues.
===== Getting Access =====
* Browse to [[https://scan.coverity.com/memberships/new?project_id=freebsd|FreeBSD Coverity Project Homepage]]
* Click //Sign Up//
\\
**Note 1**: At this time, we only provide access to view scan results to %%FreeBSD%% developers.\\
**Note 2**: If you are a %%FreeBSD%% developer, please register using your %%FreeBSD%%.org email address
===== Using Coverity Scan =====
If in doubt, do **not** classify any issues in the dashboard
* When fixing a Coverity issue:
- Check [[Bugzilla]] or [[Phabricator]] for existing issues or reports and assign yourself
- If an existing issue exists, ensure you include %%%%''%%PR: %%''%%%% in commit log messages
- Ensure you include %%%%''%%Coverity ID: %%''%%%% in commit log message
- Ensure all relevent stable/releng branches receive the change (MFC)
===== Improving Result Quality =====
Static code analysis has some limitations in its ability to understand certain dynamic operations. This limitation may result in falsely detecting defects. Since most false-positive defects are caused by few functions in your code base, Coverity allows you to tell the analysis engine to treat these functions differently. This is called a Modeling File. By providing a modeling file, most projects reduce their false-positive rate to the ballpark of 10%.
==== Modeling ====
* ''%%https://scan.coverity.com/Coverity Modeling Reference%%'' (This link is broken)
* [[https://scan.coverity.com/models|Models and Annotations]]
* [[https://community.synopsys.com/s/article/How-to-write-a-function-model-to-eliminate-a-false-positive-in-a-C-applilcation|Synopsys: How to write a function model to eliminate a false positive in a C application]]
==== Modeling File Examples ====
* [[https://github.com/python/cpython/blob/master/Misc/coverity_model.c|Python: Misc/coverity_model.c]]
* [[https://github.com/pks-t/libgit2/blob/master/script/user_model.c|libgit2: script/user_model.c]]
* [[https://github.com/qemu/qemu/blob/master/scripts/coverity-model.c|qemu: scripts/coverity-model.c]]
* [[https://github.com/jpirko/qemu_rocker_bpf/blob/master/scripts/coverity-model.c|qemu_rocker_pbf: scripts/coverity-model.c]]
* [[https://github.com/Xilinx/xen/blob/master/misc/coverity/model.c|Xen: misc/coverity/model.c]]
* [[https://github.com/FFmpeg/FFmpeg/blob/master/tools/coverity.c|FFmpeg: tools/coverity.c]]
* [[https://github.com/apache/trafficserver/blob/master/ci/coverity-model.cpp|Apache Trafficserver: ci/coverity-model.cpp]]
* [[https://github.com/neovim/neovim/blob/master/src/coverity-model.c|NeoVim: src/coverity-model.c]]
* [[https://github.com/ghc/ghc/blob/master/utils/coverity/model.c|ghc: utils/coverity/model.c]]
===== TODO =====
==== TAILQ Macro model ====
It seems that the TAILQ macros confuse Coverity. For example TAILQ_FIRST() seems to trigger a use after free error in //%%<%%list>.tqh_first// when entries are removed in a loop (loop by hand or with FOREACH). In particular, it does not recognize that TAILQ_REMOVE puts a new pointer in place and the pointer which previously aliases the tqh_first is not aliasing anymore, but is the only valid pointer.
Such cases should be marked as XXX (at the moment marked as IGNORE until we determine if it should be marked as a FALSE or if this should stay as IGNORE until a custom model is developed for this).
TODO: Model for TAILQ macros added to Modelling File
==== UMA Model ====
===== References =====
* [[https://devguide.python.org/coverity/|CPython DevGuide: Coverity]]
===== Contact =====
Coverity Administrators:
* KubilayKocak
* UlrichSpoerlein
* Email:
----
{{tag>Services Security}}