diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b1651d00cc8fe14f0bf160afbf0af72925f0eb51..07408029b7f8fc528172c00f9e3554d73ae1771c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -504,7 +504,7 @@ ocaml-versions-nightly: image: 'ocaml/opam:ubuntu-20.04-ocaml-$OCAML' script: - sudo apt update - - opam pin . -n + - opam pin . -n -k path - opam depext frama-c --with-test - opam install --jobs 2 frama-c --with-test --with-doc - frama-c --plugins diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md new file mode 100644 index 0000000000000000000000000000000000000000..5330533764638ae9061ad5edb167490a6ba8f53e --- /dev/null +++ b/ACKNOWLEDGEMENTS.md @@ -0,0 +1,35 @@ +# Acknowledgements + +The development of Frama-C has been fuelled by many collaborative projects, +notably at French and European level. Below is a list of the most important +ones + +## European projects + +- [SecOPERA](https://www.secopera.eu) (2023-2025) +- [Medsecurance](https://www.medsecurance.org/) (2023-2025) +- [EnsureSec](https://www.ensuresec.eu/index.html) (2020-2022) +- [Sparta](https://www.sparta.eu/) (2019-2022) +- [Decoder](https://www.decoder-project.eu) (2019-2022) +- [Vessedia](https://cordis.europa.eu/project/id/731453) (2017-2020) +- [Stance](https://cordis.europa.eu/project/id/317753) (2012-2016) + +## French projects + +### ANR + +- [OptiTrust](https://anr.fr/Projet-ANR-22-CE25-0017) (2022-2026) +- [CoMeMov](https://anr.fr/Project-ANR-22-CE25-0018) (2022-2025) +- [U3CAT](https://www.frama-c.com/u3cat/) (2009-2012) +- [Device-Soft](https://anr.fr/Project-ANR-09-CARN-0006) (2009-2011) +- [CAT](https://anr.fr/Projet-ANR-05-RNTL-0003) (2006-2009) + +### PEPR + +- [SecurEval](https://www.pepr-secureval.com/) (2022-2027) + +### Others + +- [LEIA](https://list.cea.fr/fr/21-septembre-2021-leia-automatise-lanalyse-logicielle-pour-garantir-la-securite-des-objets-connectes/) (2021-2022) +- [INGOPCS](https://www.s2opc.com/ingopcs/) (2016-2018) +- [Hi-Lite](https://www.open-do.org/projects/hi-lite/index.html) (2010-2013) diff --git a/ALL_VERSIONS b/ALL_VERSIONS index 1b2b1d941b716157fdd8030ab63f26fe823d0e5d..b1b8812d34378cbf5905a0aadc8c1ed3459cedfe 100644 --- a/ALL_VERSIONS +++ b/ALL_VERSIONS @@ -1,5 +1,6 @@ Version number Date of release Notes ============== =============== ===== +29.0 (Copper) 2024, June 6 28.1 (Nickel) 2024, March 24 Bugs fixed 28.0 (Nickel) 2023, November 29 27.1 (Cobalt) 2023, July 18 diff --git a/Changelog b/Changelog index 217c2c3d43c25c5dd0a168ef1eb34ebf095d42e7..b35148dd49c1d72bf82366c745ec2459f9d32dda 100644 --- a/Changelog +++ b/Changelog @@ -22,16 +22,28 @@ Open Source Release <next-release> Open Source Release 29.0 (Copper) ############################################################################### +- Ivette [2024-05-03] Fix performance issues on large codebases. - Kernel [2024-04-30] new warning category too-large-array, allowing to use array > SIZE_MAX by changing its status (default is error). +- Eva [2024-04-26] Improve builtins memcpy, memmove and memset when + arguments are imprecise. o Dev [2024-04-22] Remove frama-c-build-scripts.sh; add a section in the user manual about how to manually replace it. -! Kernel [2024-04-19] Change format of custom_defs field in machdep schema and allow #undefining builtin macros in the command-line. +- Eva [2024-04-18] Remove support for deprecated WIDEN_HINTS loop pragma. + Use ACSL extension "widen_hints" instead. o Kernel [2024-04-17] Remove deprecated funcs Extlib.string_{pre,suf}fix - Alias [2024-04-16] Fix analysis results in the presence of structures. Complete rework of the API. Improved documentation. Fix stack overflow in case of a cyclic graph. +- Eva [2024-04-10] Reduce pointer values according to ACSL predicate + \base_addr. +-* Eva [2024-04-10] Fix a crash when running successive analyses using + the -eva-domains-function parameter. +- Ivette [2024-04-09] New notifications at the bottom-right of the main + window. Some components are highlighted in the bottom bar when + they are updated but are not currently visible. - Kernel [2024-04-04] Avoid ambiguous pretty-printing when C labels match the name of an ACSL built-in label (fix #@1359) -! Kernel [2024-04-02] Systematically abort when a function is redeclared @@ -41,13 +53,31 @@ o Kernel [2024-04-17] Remove deprecated funcs Extlib.string_{pre,suf}fix o Kernel [2024-04-02] Annotations.{fold,iter}_behaviors now pass full behaviors to the iterated function. To iter on fragments split by behavior and emitter, use {fold,iter}_behaviors_by_emitter. +- Eva [2024-03-29] Reduce pointer values according to ACSL predicate + valid_string and valid_read_string. o! Kernel [2024-03-29] Refactor current location handling mechanism +o Ivette [2024-03-29] Upgrade to node 20 and electron 28. Use vite instead + of webpack. Upgrade many dependencies. +- Ivette [2024-03-28] In the Eva values table, show values before/after + statements with annotation, as values can be reduced after them. +- Ivette [2024-03-26] Add feedback when the user requests the evaluation + of a custom term. - Kernel [2024-03-26] Introduce \plugin:: prefix for ACSL extensions, unknown extensions can be safely ignored when the plug-in that handles them is not available +- Ivette [2024-03-20] Add shortcut to select next/previous tab. +- Ivette [2024-03-14] Complete redesign of the main view. Components and + views can be selected in the left sidebar (the right sidebar has + been removed). The top bar contains tabs of the currently selected + views. Components can be docked in the bottom bar, to be shown or + hidden on a simple click. -* Variadic [2024-03-07] Make sure that generated functions have fresh names o! Kernel [2024-03-07] More coherent naming of functions determining if a symbol is a Frama-C built-in. +- Eva [2024-03-04] Better reporting of imprecise "garbled mix" values + (resulting from imprecise or unsupported operations on addresses) + through more relevant messages and a compact summary at the end of + the analysis, enabled by default. -* Kernel [2024-03-04] Accept conditional expr whose 2d and 3d operands have type void, as per C11 6.5.15§3 -* Kernel [2024-02-22] When an array is declared with a fixed length l, @@ -57,6 +87,8 @@ o! Kernel [2024-01-29] Db is now mostly empty, the only remaining value is Db.Main.extend which is deprecated and replaced by Boot.Main.extend. Features related to asynchronous interactions are now handled in module Async +- Ivette [2023-11-24] Global variables and types are listed in the sidebar. + Global variables can be filtered according to some criteria. ############################################################################### Open Source Release 28.1 (Nickel) diff --git a/doc/eva/examples/merge.c b/doc/eva/examples/merge.c index dbc936c0106f585d7be057c220175149277362d2..838b22d29bfc57cb8caac47c92652fb972db4f68 100644 --- a/doc/eva/examples/merge.c +++ b/doc/eva/examples/merge.c @@ -1,5 +1,5 @@ int x,y; -char t[8]; +char t[10]; int main(int c) { diff --git a/doc/eva/examples/misa_write.c b/doc/eva/examples/misa_write.c new file mode 100644 index 0000000000000000000000000000000000000000..42680662405636ebdc3bed11cee23100db34f4f6 --- /dev/null +++ b/doc/eva/examples/misa_write.c @@ -0,0 +1,7 @@ +int x; +int *t[2]; + +int main(int i){ + int **ptr = (int **) ((unsigned long) t + i); + *ptr = &x; +} diff --git a/doc/eva/main.tex b/doc/eva/main.tex index 76628e4e00deb03c73726dddb65a3185d6edb710..13521e3d5c25894cc60705fc550480620d063806 100644 --- a/doc/eva/main.tex +++ b/doc/eva/main.tex @@ -1337,8 +1337,20 @@ some of these approximations. Most origins are of the form \lstinline|Cause L|, where \lstinline|L| is an (optional) line or the application indicating where the approximation took place. Origin causes are one of the following: + +\subsubsection{Arithmetic operation} +The origin \lstinline$Arithmetic L$ denotes arithmetic operations over +addresses, whose result cannot be precisely represented by the analyzer. +\csource{examples/ari.c} +In this example, the return value for \lstinline|f| is: + +\begin{logs} +{{ garbled mix of &{x; y} (origin: Arithmetic {ari.c:4}) }} +\end{logs} + \subsubsection{Misaligned read} -The origin \lstinline$Misaligned L$ indicates that + +The origin \lstinline$Misaligned read L$ indicates that misaligned reads prevented the computation to be precise. A misaligned read is a memory read-access where the bits read were not previously written as a single write that modified the whole set of @@ -1347,7 +1359,7 @@ bits exactly. An example of a program leading to a misaligned read is the following: \csource{examples/misa.c} The value returned by the function \lstinline|main| is\\ -\lstinline|{{ garbled mix of &{ x; y } (origin: Misaligned { misa.c:6 }) }}|.\\ +\lstinline|{{ garbled mix of &{x; y} (origin: Misaligned read {misa.c:6}) }}|.\\ The analyzer is by default configured for a 64-bit architecture, and that consequently the read memory access is not an out-of-bound access. If it was, an alarm would be emitted, and the @@ -1359,6 +1371,21 @@ but due to the offset of six bytes, the 32-bit word read is made of the last two bytes from \lstinline|t[0]| and the first two bytes from \lstinline|t[1]|. +\subsubsection{Misaligned writes} + +The origin \lstinline$Misaligned write L$ indicates that the interpretation of +a misaligned write to an imprecise location has created a garbled mix at this +memory location. + +An example of a program where a misaligned write creates a garbled mix +is the following: +\csource{examples/misa_write.c} + +The interpretation of the last assignment by the analysis writes +the imprecise value +\lstinline|{{ garbled mix of &{x} (origin: Misaligned write {misa.c:6}) }}| +into the array \lstinline|t|. + \subsubsection{Call to an unknown function} The origin \lstinline$Library function L$ arises from the interpretation of a function specification, when an \lstinline|assigns| clause applies to @@ -1402,18 +1429,6 @@ called well values. Computations that are imprecise because of a well value are marked as \lstinline|origin: Well|. -\subsubsection{Arithmetic operation} -The origin \lstinline$Arithmetic L$ -indicates that arithmetic operations -take place without the analyzer being able to represent the result -precisely. -\csource{examples/ari.c} -In this example, the return value for \lstinline|f| is: - -\begin{logs} -{{ garbled mix of &{ x; y } (origin: Arithmetic { ari.c:4 }) }} -\end{logs} - \section{What is checked by \Eva{}}\label{obligations} \Eva{} warns about possible run-time errors in the analyzed diff --git a/opam b/opam index b6ccdc6d1f41725cce55e759abefaea57791c9a7..41a6d62294c5f4f4477826a838817b71ad41c7dd 100644 --- a/opam +++ b/opam @@ -75,7 +75,7 @@ authors: [ homepage: "https://frama-c.com/" license: "LGPL-2.1-only" dev-repo: "git+https://git.frama-c.com/pub/frama-c.git" -doc: "http://frama-c.com/download/user-manual-29.0-beta-Copper.pdf" +doc: "http://frama-c.com/download/user-manual-29.0-Copper.pdf" bug-reports: "https://git.frama-c.com/pub/frama-c/issues" tags: [ "deductive" diff --git a/releases/29.0.md b/releases/29.0.md index d408385573df3b1bc4fa48a5582ba137c330f122..5207c9a8e39a34c997d7ebc8a360a172a6a6f21d 100644 --- a/releases/29.0.md +++ b/releases/29.0.md @@ -23,7 +23,8 @@ - Extended support for Ivette # Ivette -- Revamped workspace (tabs, views, dock, alerts, …) +- Revamped workspace (tabs, views, dock, alerts, notifications, …) - Types and Globals navigation - Better feedback on Eva values evaluation - Extended support for WP +- Improve performances