-
Notifications
You must be signed in to change notification settings - Fork 399
Open
Description
The sandbox does not set a limit on the size of the files created by the solution. This can lead to various problems.
- Causing an out-of-memory situation for the worker, if the sandboxes are kept in a big enough tmpfs (which happens in a lot of distributions that mount a tmpfs in /tmp).
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#define BS 8192
int main() {
int fd = open("output.txt", O_CREAT | O_WRONLY | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
char buf[BS] = {};
while(1)
write(fd, buf, BS);
}
- Allowing the user to somewhat bypass memory limits by creating a big file, then mmapping parts of it and using it as extra memory.
- Leaving a very big output.txt file, causing the worker to fail if there is no space left on the device, or to eat up a lot of memory (~4 times the size of the file). Using fallocate allows a program to allocate a lot of space in a very short time. For example, the following program
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
int fd = open("output.txt", O_CREAT | O_WRONLY | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
fallocate(fd, 0, 0, 10*1024*1024*1024l);
}
takes only two seconds to complete on my computer and creates a 10GB file.
Metadata
Metadata
Assignees
Labels
No labels