Hi Sean,

> Although its just 9 LOC, consider its impact on someone who is looking
> at
> the kernel's SGX support for the first time.  Questions they may have
> when
> looking at the vDSO code/documentation:
> 
>   - What's an exit handler?
>   - Why is an exit handler optional?  Don't I always want to handle
> exits?
>   - What value should my exit handler return?
>   - What should my exit handler do if it detects an error?
>   - Why would I want to preserve %rbp and not %rsp?
>   - Isn't it insecure to use the untrusted stack in my enclave?
> 
> AFAIK, the only reason to preserve %rbp instead of %rsp, i.e. support an
> "exit handler" callback, is to be able to implement an o-call scheme
> using
> the untrusted stack to pass data.  Every idea I came up with for using
> the
> callback, e.g. logging, handling stack corruptiong, testing hooks,
> etc...
> was at worst no more difficult to implement when using a barebones vDSO.
> 
> So, given the choice between a) documenting and maintaining all the
> baggage
> that comes with the exit handler and b) saying "go use signals", I chose
> option b.

Disagreed!

This API is NOT even x86_64 compatible and NOT intended to be used by average 
developers. Instead, this API will be used by SGX SDK vendors who have all the 
needed background/expertise. And flexibility is way more important to them than 
reduced documentation. Just imagine how much one needs to read to understand 
how SGX works, do you really think a function comprised of 20 or so LOC will be 
a big deal? 

Anyway, the documentation needed IMO will not exceed even 1 page, which will be 
way shorter than most of docs in kernel source tree. I'll be more than happy to 
help you out if that's out of your competence!

Regarding maintenance, I see an API may require maintenance for 2 possible 
categories of reasons: 1) its interface cannot satisfy emerging applications; 
or 2) the infrastructure it relies on has changed. Generally speaking, a more 
generic API with less assumption/dependence on other components will impose 
lower maintenance cost in the long run. Comparing our proposals, they share the 
same dependences (i.e. SGX ISA and vDSO extable) but mine is more generic (as 
yours could be implemented using mine as a subroutine). Thus, I bet your 
proposal will impose higher maintenance cost in the long run.

-Cedric

Reply via email to