orangeC23 added the bug label to Issue #7264.
orangeC23 opened issue #7264:
Steps to Reproduce
(1) The cfile is :
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main() { const char* file_name = "Data/hello.txt"; int open_style= O_CREAT | O_RDWR; int fd = get_fd(file_name, open_style); fd_allocateLuGpoE0tKi(fd, file_name); snapshot(fd); return 0; } int fd_allocateLuGpoE0tKi (int fd, const char* file_name){ off_t start_value = 19; off_t len_value = 39; return fd_allocate(fd, file_name, start_value, len_value); } int get_fd(const char* file_name, int open_style){ // Open a file for reading int fd = open(file_name, open_style); if (fd == -1) { perror("Failed to open the file"); return 1; } return fd; } int fd_allocate (int fd, const char* filename, off_t start_value, off_t len_value){ if (posix_fallocate(fd, start_value, len_value) != 0) { perror("Error allocating file space"); close(fd); return 1; } printf("File '%s' created and allocated with %lld bytes of space.\n", filename, (long long)len_value); return fd; } int snapshot(int myfd){ printf("Enter snapshot\n"); struct stat file_info; if (fstat(myfd, &file_info) == -1) { perror("Error getting file attributes"); close(myfd); return 1; } printf("File Size: %lld bytes \n", (long long)file_info.st_size); printf("File Permissions: %o \n", file_info.st_mode & ~S_IFMT); printf("File Owner UID: %d \n", file_info.st_uid); printf("File Group GID: %d \n", file_info.st_gid); off_t cur_offset = lseek(myfd, 0, SEEK_CUR); if (cur_offset == -1) { perror("Error getting current offset"); } printf("Current offset: %lld \n", (long long)cur_offset); if (close(myfd) == -1) { perror("Error closing file"); return 1; } printf("Leave snapshot\n"); } (2)compile the c file into wasm: `./wasi-sdk-16.0/bin/clang --target=wasm32-unkown-wasi --sysroot=./wasi-sdk-16.0/share/wasi-sysroot test1.c -o test1.wasm` (3)exeute open.wasm wasmtime run --dir=./Data test1.wasm The permission of Data/hello.txt is 0600, user1 create the Data/hello.txt file before and user1 execute the Wasm file.
Expected Results
Other runtime print:
File 'Data/hello.txt' created and allocated with 39 bytes of space. Enter snapshot File Size: 58 bytes File Permissions: 0 File Owner UID: 0 File Group GID: 0 Current offset: 0 Leave snapshot
And the file size is change into 58.
Actual Results
wasmtime prints:
Error allocating file space: Success Enter snapshot Error getting file attributes: Bad file descriptor
And file size remains 30.
Versions and Environment
wasmtime 13.0.0
Operating system: Ubuntu 20.04Architecture: x86_64
orangeC23 edited issue #7264:
Steps to Reproduce
(1) The cfile is :
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main() { const char* file_name = "Data/hello.txt"; int open_style= O_CREAT | O_RDWR; int fd = get_fd(file_name, open_style); fd_allocateLuGpoE0tKi(fd, file_name); snapshot(fd); return 0; } int fd_allocateLuGpoE0tKi (int fd, const char* file_name){ off_t start_value = 19; off_t len_value = 39; return fd_allocate(fd, file_name, start_value, len_value); } int get_fd(const char* file_name, int open_style){ // Open a file for reading int fd = open(file_name, open_style); if (fd == -1) { perror("Failed to open the file"); return 1; } return fd; } int fd_allocate (int fd, const char* filename, off_t start_value, off_t len_value){ if (posix_fallocate(fd, start_value, len_value) != 0) { perror("Error allocating file space"); close(fd); return 1; } printf("File '%s' created and allocated with %lld bytes of space.\n", filename, (long long)len_value); return fd; } int snapshot(int myfd){ printf("Enter snapshot\n"); struct stat file_info; if (fstat(myfd, &file_info) == -1) { perror("Error getting file attributes"); close(myfd); return 1; } printf("File Size: %lld bytes \n", (long long)file_info.st_size); printf("File Permissions: %o \n", file_info.st_mode & ~S_IFMT); printf("File Owner UID: %d \n", file_info.st_uid); printf("File Group GID: %d \n", file_info.st_gid); off_t cur_offset = lseek(myfd, 0, SEEK_CUR); if (cur_offset == -1) { perror("Error getting current offset"); } printf("Current offset: %lld \n", (long long)cur_offset); if (close(myfd) == -1) { perror("Error closing file"); return 1; } printf("Leave snapshot\n"); }
(2)compile the c file into wasm:
./wasi-sdk-16.0/bin/clang --target=wasm32-unkown-wasi --sysroot=./wasi-sdk-16.0/share/wasi-sysroot test1.c -o test1.wasm
(3)exeute open.wasm
wasmtime run --dir=./Data test1.wasm
The permission of Data/hello.txt is 0600, user1 create the Data/hello.txt file before and user1 execute the Wasm file.Expected Results
Other runtime print:
File 'Data/hello.txt' created and allocated with 39 bytes of space. Enter snapshot File Size: 58 bytes File Permissions: 0 File Owner UID: 0 File Group GID: 0 Current offset: 0 Leave snapshot
And the file size is change into 58.
Actual Results
wasmtime prints:
Error allocating file space: Success Enter snapshot Error getting file attributes: Bad file descriptor
And file size remains 30.
Versions and Environment
wasmtime 13.0.0
Operating system: Ubuntu 20.04Architecture: x86_64
orangeC23 edited issue #7264:
Steps to Reproduce
(1) The cfile is :
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main() { const char* file_name = "Data/hello.txt"; int open_style= O_CREAT | O_RDWR; int fd = get_fd(file_name, open_style); fd_allocateLuGpoE0tKi(fd, file_name); snapshot(fd); return 0; } int fd_allocateLuGpoE0tKi (int fd, const char* file_name){ off_t start_value = 19; off_t len_value = 39; return fd_allocate(fd, file_name, start_value, len_value); } int get_fd(const char* file_name, int open_style){ // Open a file for reading int fd = open(file_name, open_style); if (fd == -1) { perror("Failed to open the file"); return 1; } return fd; } int fd_allocate (int fd, const char* filename, off_t start_value, off_t len_value){ if (posix_fallocate(fd, start_value, len_value) != 0) { perror("Error allocating file space"); close(fd); return 1; } printf("File '%s' created and allocated with %lld bytes of space.\n", filename, (long long)len_value); return fd; } int snapshot(int myfd){ printf("Enter snapshot\n"); struct stat file_info; if (fstat(myfd, &file_info) == -1) { perror("Error getting file attributes"); close(myfd); return 1; } printf("File Size: %lld bytes \n", (long long)file_info.st_size); printf("File Permissions: %o \n", file_info.st_mode & ~S_IFMT); printf("File Owner UID: %d \n", file_info.st_uid); printf("File Group GID: %d \n", file_info.st_gid); off_t cur_offset = lseek(myfd, 0, SEEK_CUR); if (cur_offset == -1) { perror("Error getting current offset"); } printf("Current offset: %lld \n", (long long)cur_offset); if (close(myfd) == -1) { perror("Error closing file"); return 1; } printf("Leave snapshot\n"); }
(2)compile the c file into wasm:
./wasi-sdk-16.0/bin/clang --target=wasm32-unkown-wasi --sysroot=./wasi-sdk-16.0/share/wasi-sysroot test1.c -o test1.wasm
(3)exeute open.wasm
wasmtime run --dir=./Data test1.wasm
The permission of Data/hello.txt is 0600 or 0700, user1 create the Data/hello.txt file before and user1 execute the Wasm file.Expected Results
Other runtime print:
File 'Data/hello.txt' created and allocated with 39 bytes of space. Enter snapshot File Size: 58 bytes File Permissions: 0 File Owner UID: 0 File Group GID: 0 Current offset: 0 Leave snapshot
And the file size is change into 58.
Actual Results
wasmtime prints:
Error allocating file space: Success Enter snapshot Error getting file attributes: Bad file descriptor
And file size remains 30.
Versions and Environment
wasmtime 13.0.0
Operating system: Ubuntu 20.04Architecture: x86_64
orangeC23 edited issue #7264:
Steps to Reproduce
(1) The cfile is :
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main() { const char* file_name = "Data/hello.txt"; int open_style= O_CREAT | O_RDWR; int fd = get_fd(file_name, open_style); fd_allocateLuGpoE0tKi(fd, file_name); snapshot(fd); return 0; } int fd_allocateLuGpoE0tKi (int fd, const char* file_name){ off_t start_value = 19; off_t len_value = 39; return fd_allocate(fd, file_name, start_value, len_value); } int get_fd(const char* file_name, int open_style){ // Open a file for reading int fd = open(file_name, open_style); if (fd == -1) { perror("Failed to open the file"); return 1; } return fd; } int fd_allocate (int fd, const char* filename, off_t start_value, off_t len_value){ if (posix_fallocate(fd, start_value, len_value) != 0) { perror("Error allocating file space"); close(fd); return 1; } printf("File '%s' created and allocated with %lld bytes of space.\n", filename, (long long)len_value); return fd; } int snapshot(int myfd){ printf("Enter snapshot\n"); struct stat file_info; if (fstat(myfd, &file_info) == -1) { perror("Error getting file attributes"); close(myfd); return 1; } printf("File Size: %lld bytes \n", (long long)file_info.st_size); printf("File Permissions: %o \n", file_info.st_mode & ~S_IFMT); printf("File Owner UID: %d \n", file_info.st_uid); printf("File Group GID: %d \n", file_info.st_gid); off_t cur_offset = lseek(myfd, 0, SEEK_CUR); if (cur_offset == -1) { perror("Error getting current offset"); } printf("Current offset: %lld \n", (long long)cur_offset); if (close(myfd) == -1) { perror("Error closing file"); return 1; } printf("Leave snapshot\n"); }
(2)compile the c file into wasm:
./wasi-sdk-16.0/bin/clang --target=wasm32-unkown-wasi --sysroot=./wasi-sdk-16.0/share/wasi-sysroot test1.c -o test1.wasm
(3)exeute open.wasm
wasmtime run --dir=./Data test1.wasm
The permission of Data/hello.txt is 0600 or 0700, user1 create the Data/hello.txt file before and user1 execute the Wasm file.Expected Results
Other runtime print:
File 'Data/hello.txt' created and allocated with 39 bytes of space. Enter snapshot File Size: 58 bytes File Permissions: 0 File Owner UID: 0 File Group GID: 0 Current offset: 0 Leave snapshot
And the file size is change into 58.
And using
gcc test1.c -o test1
and./test1
to execute also get this result.Actual Results
wasmtime prints:
Error allocating file space: Success Enter snapshot Error getting file attributes: Bad file descriptor
And file size remains 30.
Versions and Environment
wasmtime 13.0.0
Operating system: Ubuntu 20.04Architecture: x86_64
alexcrichton commented on issue #7264:
Thanks for the report! The reason this is happening is that
fd_allocate
is no longer supported. That's being removed from WASI and Wasmtime has preemptively adapted to the latest version of WASI. Other runtimes haven't caught up yet I suspect.
alexcrichton closed issue #7264:
Steps to Reproduce
(1) The cfile is :
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main() { const char* file_name = "Data/hello.txt"; int open_style= O_CREAT | O_RDWR; int fd = get_fd(file_name, open_style); fd_allocateLuGpoE0tKi(fd, file_name); snapshot(fd); return 0; } int fd_allocateLuGpoE0tKi (int fd, const char* file_name){ off_t start_value = 19; off_t len_value = 39; return fd_allocate(fd, file_name, start_value, len_value); } int get_fd(const char* file_name, int open_style){ // Open a file for reading int fd = open(file_name, open_style); if (fd == -1) { perror("Failed to open the file"); return 1; } return fd; } int fd_allocate (int fd, const char* filename, off_t start_value, off_t len_value){ if (posix_fallocate(fd, start_value, len_value) != 0) { perror("Error allocating file space"); close(fd); return 1; } printf("File '%s' created and allocated with %lld bytes of space.\n", filename, (long long)len_value); return fd; } int snapshot(int myfd){ printf("Enter snapshot\n"); struct stat file_info; if (fstat(myfd, &file_info) == -1) { perror("Error getting file attributes"); close(myfd); return 1; } printf("File Size: %lld bytes \n", (long long)file_info.st_size); printf("File Permissions: %o \n", file_info.st_mode & ~S_IFMT); printf("File Owner UID: %d \n", file_info.st_uid); printf("File Group GID: %d \n", file_info.st_gid); off_t cur_offset = lseek(myfd, 0, SEEK_CUR); if (cur_offset == -1) { perror("Error getting current offset"); } printf("Current offset: %lld \n", (long long)cur_offset); if (close(myfd) == -1) { perror("Error closing file"); return 1; } printf("Leave snapshot\n"); }
(2)compile the c file into wasm:
./wasi-sdk-16.0/bin/clang --target=wasm32-unkown-wasi --sysroot=./wasi-sdk-16.0/share/wasi-sysroot test1.c -o test1.wasm
(3)exeute open.wasm
wasmtime run --dir=./Data test1.wasm
The permission of Data/hello.txt is 0600 or 0700, user1 create the Data/hello.txt file before and user1 execute the Wasm file.Expected Results
Other runtime print:
File 'Data/hello.txt' created and allocated with 39 bytes of space. Enter snapshot File Size: 58 bytes File Permissions: 0 File Owner UID: 0 File Group GID: 0 Current offset: 0 Leave snapshot
And the file size is change into 58.
And using
gcc test1.c -o test1
and./test1
to execute also get this result.Actual Results
wasmtime prints:
Error allocating file space: Success Enter snapshot Error getting file attributes: Bad file descriptor
And file size remains 30.
Versions and Environment
wasmtime 13.0.0
Operating system: Ubuntu 20.04Architecture: x86_64
orangeC23 commented on issue #7264:
Thanks for your reply. How can I view the changes in WASI compared to before? Is there any documentation? Thank you!
alexcrichton commented on issue #7264:
You can follow the https://github.com/WebAssembly/WASI repository, but I don't believe changes are exhaustively mentioned yet. Such processes evolve over time and aren't present immediately.
orangeC23 commented on issue #7264:
Thanks !
Last updated: Dec 23 2024 at 13:07 UTC