About

This is a prototype for plumbing Mojo into the NaCl sandbox. It is currently insecure (see below), does not provide a stable ABI (IRT support must be added), and does not support Mojo functions that return pointers (for example, MojoMapBuffer).

Using

To use this prototype run mojo/tools/mojob.py gn --nacl and then build and test as usual.

Run mojo/tools/mojob.py nacltest for additional nacl-specific tests.

Notes

generator/interface.py contains a programmatic description of the stable Mojo interface. This will need to be updated as the interface changes. Run generator/generate_nacl_bindings.py to generate the bindings that plumb this interface into the NaCl sandbox.

Security TODO

  • Separate trusted and untrusted Mojo handles.
  • Validate and copy option structures.
  • Protect untrusted buffers passed into Mojo:
    • NaClVmIoWillStart/HasEnded.
    • volatile accesses to untrusted memory (untrusted code could race).
  • Overflow checking in array bounds validation.