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

Implement side task #483

Merged
merged 27 commits into from
Sep 23, 2021
Merged

Implement side task #483

merged 27 commits into from
Sep 23, 2021

Conversation

kvinwang
Copy link
Collaborator

@kvinwang kvinwang commented Sep 16, 2021

Steps:

  • Support async IO in enclave
    Approches tried:

    • ❌ Port tokio to enclave. (Heavily using multi-threading things make it hard to port)
    • ❌ Implement a tiny http-client. (Not easy to implement a production quality async runtime)
    • ✅ Port async-std to enclave.
      The code is simpler than tokio. I have made much effort on letting the libstd support async stuffs. Finally failed due to that the futex syscall is impossible to be implemented in a C abi function in enclave. Tried a dirty hack on futex and got a working http client in SW mode, but I don't think it will work in HW mode.
      The next step is to modify the async-std to get rid of using futex.
      Update: httpclient works now after patched several of it's dependencies. 🎉
  • Script to check unsupported syscalls.
    Difficulties:

    • The syscall number is a arg of the syscall function. So we need some sort of asm logic analysis.
    • Some calls are indrect calling into a GLOBAL_OFFSET_TABLE offset which is dynamically resolved by the runtime linker.

    Done, solved with the latest version of radare2.

  • Implement a side task framework

Note:
surf uses getaddrinfo to resolve DNS which might block the exacutor.

Usage demos:

Low level way

Use AsyncSideTask

@kvinwang kvinwang marked this pull request as ready for review September 22, 2021 10:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants