-
Notifications
You must be signed in to change notification settings - Fork 21
Description
Hello, I am trying to write my first CloudABI program, following along with the tutorials. I have a Clang-based CloudABI toolchain installed, along with cloudabi-run.
hello.c:
#include <stdio.h>
int main(void) {
dprintf(1, "Hello World!\n");
}
cloudabi.yml:
%TAG ! tag:nuxi.nl,2015:cloudabi/
---
- !fd stdout
Trace:
$ x86_64-unknown-cloudabi-cc -o hello hello.c
$ cloudabi-run -e hello <cloudabi.yml
WARNING: Attempting to start executable using emulation.
Keep in mind that this emulation provides no actual sandboxing.
Though this is likely no problem for development and testing
purposes, using this emulator in production is strongly
discouraged.
So Hello World is never printed; no segmentation fault occurs, no error message about stdout access is presented. Furthermore, execution exits with a zero exit code, indicating "success".
Update
I looked at some more examples and see that file descriptor 1
appears to no longer work out of the box as stdout in CloudABI. I changed my code to:
#include <stdio.h>
#include <stdlib.h>
int m(int stdout) {
dprintf(stdout, "Hello World!\n");
return EXIT_SUCCESS;
}
#ifdef __CloudABI__
#include <argdata.h>
#include <program.h>
void program_main(const argdata_t *ad) {
int stdout;
argdata_get_fd(ad, &stdout);
#else
#include <unistd.h>
void main() {
int stdout = STDOUT_FILENO;
#endif
exit(m(stdout));
}
And am now able to build and run my lil app! This one is a polyglot, so it compiles and runs with either plain vanilla Clang or with CloudABI. Also, CloudABI appears to work with more modern Clang/LLVM/LLD versions, including v6.0. Could we update the documentation to reflect this?
Could we update the different per-OS tutorials to fix the stdout file descriptor part?
A larger question is why are guarded? I thought CloudABI was meant to protect sensitive components that can break a system. Do stdout/stderr somehow contribute to an increased attack surface?