sandboxed-api/sandboxed_api/sandbox2/testcases/close_fds.cc
Wiktor Garbacz 8562306c97 Add CloseAllFDsExcept test.
Move VecStringToCharPtrArr before fork, so that it cannot deadlock when other thread holds allocation lock.

PiperOrigin-RevId: 414661912
Change-Id: Ie8aa5c36693e6f86c69d67a1da51b7e7ff1ec30b
2021-12-07 02:23:23 -08:00

33 lines
749 B
C++

#include <fcntl.h>
#include <linux/fs.h>
#include <unistd.h>
#include <cerrno>
#include <glog/logging.h>
#include "absl/container/flat_hash_set.h"
#include "absl/strings/numbers.h"
#include "sandboxed_api/sandbox2/sanitizer.h"
bool IsFdOpen(int fd) {
int ret = fcntl(fd, F_GETFD);
if (ret == -1) {
CHECK(errno == EBADF);
return false;
}
return true;
}
int main(int argc, char* argv[]) {
absl::flat_hash_set<int> exceptions;
for (int i = 0; i < argc; ++i) {
int fd;
CHECK(absl::SimpleAtoi(argv[i], &fd));
exceptions.insert(fd);
}
CHECK(sandbox2::sanitizer::CloseAllFDsExcept(exceptions).ok());
for (int i = 0; i < INR_OPEN_MAX; i++) {
CHECK_EQ(IsFdOpen(i), exceptions.find(i) != exceptions.end());
}
}