You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@teaclave.apache.org by Baltasar Dinis <no...@github.com.INVALID> on 2021/03/24 13:12:05 UTC

[apache/incubator-teaclave-sgx-sdk] `HashMap` segfaults after few insertions (#331)

If a `HashMap` from `sgx_tstd` is created using `new` (or a `with_capacity` with a low value) it can only be inserted to a few times, after which it will segfault.

This is deeply concerning, and surprising (`HashMap` should survive this). As an immediate consequence, for instance, the provided `tlsserver` example only supports a few concurrent TLS sessions (because they are stored in a HashMap).

If it is created with `with_capacity`, some small values fail in the same fashion, after which it seems to be OK. However the minimum value to make this work seems to be contextual (!). This means that it may vary depending on the surrounding code (!).

Here's an example:
```rust
#![crate_name = "hashmap"]
#![crate_type = "staticlib"]
#![cfg_attr(not(target_env = "sgx"), no_std)]
#![cfg_attr(target_env = "sgx", feature(rustc_private))]

#[cfg(not(target_env = "sgx"))]
#[macro_use]
extern crate sgx_tstd as std;

use std::collections::HashMap;

#[no_mangle]
pub extern "C"
fn e_do() {
    let mut local_map = HashMap::with_capacity(2); // This could also be HashMap::new()

    for i in 0..1000 {
        local_map.insert(i, 42);
        eprintln!("l: inserted {}", i);
    }
}
```

On my machine, if the initial capacity is 8, it seems fine (but in some contexts, that capacity was lowered to 4, for some reason). It usually segfaults in a few (<20) insertions, but this is probably machine-dependant.



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/apache/incubator-teaclave-sgx-sdk/issues/331

Re: [apache/incubator-teaclave-sgx-sdk] `HashMap` segfaults after few insertions (#331)

Posted by Baltasar Dinis <no...@github.com.INVALID>.
Note: if there is a more complex value type, the increased capacity does not solve the problem.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/apache/incubator-teaclave-sgx-sdk/issues/331#issuecomment-805816160