Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Goblint server mode crashes with unexpected requests #983

Closed
5 tasks done
FeldrinH opened this issue Feb 11, 2023 · 1 comment · Fixed by #990
Closed
5 tasks done

Goblint server mode crashes with unexpected requests #983

FeldrinH opened this issue Feb 11, 2023 · 1 comment · Fixed by #990
Assignees
Milestone

Comments

@FeldrinH
Copy link
Collaborator

FeldrinH commented Feb 11, 2023

Goblint server mode seems to be very prone to crashing when presented with unexpected requests. This is problematic for GobPie because it means the server has to be restarted, which means all analysis needs to be run again with no way to reuse previous results.

So far I have encountered crashes in the following cases:

  • analyze when there is a syntax error in the C code crashes with Parsing errorFatal error: exception GoblintCil__Frontc.ParseError("Parse error")
  • analyze when config has not been loaded crashes with Fatal error: exception Failure("No suitable function to start from."). (In GobPie this can happen when running an analysis with an invalid goblint.json file.)
  • node_state with a node id that does not exist in the analysis results crashes the server with Fatal error: exception Not_found. (In GobPie this can happen when requesting node state for a node in the CFG of a function that is never called.)
  • node_state when analysis has not run crashes with Fatal error: exception File "src/framework/control.ml", line 45, characters 76-82: Assertion failed. (This should not be possible in current GobPie but it could happen if the rules around running analyses and restarting are changed.)
  • functions when analysis has not run crashes with Fatal error: exception Invalid_argument("Option.get"). (This should not be possible in current GobPie but it could happen if the rules around running analyses and restarting are changed.)

The last three are particularly problematic because they can crash the server while running a request that should only read data and thus one might reasonably expect them to never affect the server in any way.

(All issues encountered with Goblint built from commit 3d4e7ad)

@michael-schwarz
Copy link
Member

Most of these should potentially be quite easy to fix by catching the appropriate exceptions in server.ml and returning appropriate error messages via json-RPC.

@sim642 sim642 self-assigned this Feb 15, 2023
@sim642 sim642 added this to the v2.2.0 milestone Apr 5, 2023
sim642 added a commit to sim642/opam-repository that referenced this issue Sep 13, 2023
CHANGES:

* Add `setjmp`/`longjmp` analysis (goblint/analyzer#887, goblint/analyzer#970, goblint/analyzer#1015, goblint/analyzer#1019).
* Refactor race analysis to lazy distribution (goblint/analyzer#1084, goblint/analyzer#1089, goblint/analyzer#1136, goblint/analyzer#1016).
* Add thread-unsafe library function call analysis (goblint/analyzer#723, goblint/analyzer#1082).
* Add mutex type analysis and mutex API analysis (goblint/analyzer#800, goblint/analyzer#839, goblint/analyzer#1073).
* Add interval set domain and string literals domain (goblint/analyzer#901, goblint/analyzer#966, goblint/analyzer#994, goblint/analyzer#1048).
* Add affine equalities analysis (goblint/analyzer#592).
* Add use-after-free analysis (goblint/analyzer#1050, goblint/analyzer#1114).
* Add dead code elimination transformation (goblint/analyzer#850, goblint/analyzer#979).
* Add taint analysis for partial contexts (goblint/analyzer#553, goblint/analyzer#952).
* Add YAML witness validation via unassume (goblint/analyzer#796, goblint/analyzer#977, goblint/analyzer#1044, goblint/analyzer#1045, goblint/analyzer#1124).
* Add incremental analysis rename detection (goblint/analyzer#774, goblint/analyzer#777).
* Fix address sets unsoundness (goblint/analyzer#822, goblint/analyzer#967, goblint/analyzer#564, goblint/analyzer#1032, goblint/analyzer#998, goblint/analyzer#1031).
* Fix thread escape analysis unsoundness (goblint/analyzer#939, goblint/analyzer#984, goblint/analyzer#1074, goblint/analyzer#1078).
* Fix many incremental analysis issues (goblint/analyzer#627, goblint/analyzer#836, goblint/analyzer#835, goblint/analyzer#841, goblint/analyzer#932, goblint/analyzer#678, goblint/analyzer#942, goblint/analyzer#949, goblint/analyzer#950, goblint/analyzer#957, goblint/analyzer#955, goblint/analyzer#954, goblint/analyzer#960, goblint/analyzer#959, goblint/analyzer#1004, goblint/analyzer#558, goblint/analyzer#1010, goblint/analyzer#1091).
* Fix server mode for abstract debugging (goblint/analyzer#983, goblint/analyzer#990, goblint/analyzer#997, goblint/analyzer#1000, goblint/analyzer#1001, goblint/analyzer#1013, goblint/analyzer#1018, goblint/analyzer#1017, goblint/analyzer#1026, goblint/analyzer#1027).
* Add documentation for configuration JSON schema and OCaml API (goblint/analyzer#999, goblint/analyzer#1054, goblint/analyzer#1055, goblint/analyzer#1053).
* Add many library function specifications (goblint/analyzer#962, goblint/analyzer#996, goblint/analyzer#1028, goblint/analyzer#1079, goblint/analyzer#1121, goblint/analyzer#1135, goblint/analyzer#1138).
* Add OCaml 5.0 support (goblint/analyzer#1003, goblint/analyzer#945, goblint/analyzer#1162).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants