Libraries: OpenSSL - GaloisInc/saw-script GitHub Wiki

SAW and OpenSSL

The following are a few things to keep in mind when using SAW with OpenSSL.

Memory management

As outlined in the manual, mutable global variables are not automatically initialized. OpenSSL's memory management functions (e.g. CRYPTO_malloc, CRYPTO_free, etc.) use several globals. Here's how to initialize (some of) them in your SAWscript:

let init_global name = do {
  crucible_points_to (crucible_global name) (crucible_global_initializer name);
};

let my_spec = do {
  // Used in OpenSSL memory management functions
  init_global "allow_customize";
  init_global "malloc_debug_func";
  init_global "malloc_ex_func";
  init_global "malloc_func";
  init_global "free_debug_func";
  init_global "free_func";
  init_global "digest_table";
  init_global "table_flags";

  // ...
}

Here's an example of an error you would see if one were uninitialized (saw was run with --verbose=5, --sim-verbose=5):

CRYPTO_malloc:
  $6 = resolveGlobal llvm_memory "malloc_debug_func" % 341:9
CRYPTO_malloc:
  $7 = load llvm_memory $6 bitvectorType 8 Alignment 3 % 341:9
Abort due to false assumption:
  Error during memory load: 
  Generic memory load error
  in CRYPTO_malloc at /build/openssl-1.0.2r/crypto/mem.c:341:9