wasmtime icon indicating copy to clipboard operation
wasmtime copied to clipboard

shared memory: no way to report memory growth failure

Open abrown opened this issue 3 years ago • 4 comments

In certain cases, a shared memory will not have an associated store. A ResourceLimiter is attached to a store to not only constrain the resources use but also accept certain error scenarios, e.g., when a memory growth operation fails. If memory growth fails for a shared memory, some code should handle the error but as of #4187 there is no mechanism to do so.

abrown avatar Jun 07 '22 18:06 abrown

@alexcrichton, should the resolution of this just be to return an error if no Store (and thus ResourceLimiter) are available? E.g.:

if new_byte_size > max {
  if let Some(store) = store {
    store.memory_grow_failed(&format_err!("Memory maximum size exceeded"));
  } else {
    bail!("Memory maximum size exceeded");
  }
  return Ok(None);
}

abrown avatar Jun 30 '22 19:06 abrown

I don't think so because that would translate to a trap rather than a -1 return value from memory.grow. Additionally the more worrisome case for me is this one where there's no embedder-defined way to limit the growth of a shared memory like there is a way to limit the growth of a non-shared memory.

alexcrichton avatar Jun 30 '22 20:06 alexcrichton

Hm. I had originally thought that a) the ResourceLimiter would have to be disconnected from a Store or b) the shared memory would have to be associated with a store--neither of these seems great... or easy. What do you think?

abrown avatar Jun 30 '22 21:06 abrown

I don't personally know how best to solve this, and I suspect that reusing what we have today probably won't cut it and this'll need some sort of new abstraction or something like that.

alexcrichton avatar Jul 01 '22 15:07 alexcrichton