summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/zygote_main_linux.cc18
-rw-r--r--sandbox/linux/suid/sandbox.cc22
2 files changed, 5 insertions, 35 deletions
diff --git a/chrome/browser/zygote_main_linux.cc b/chrome/browser/zygote_main_linux.cc
index 9b8ef98..08f730e 100644
--- a/chrome/browser/zygote_main_linux.cc
+++ b/chrome/browser/zygote_main_linux.cc
@@ -221,29 +221,15 @@ static bool MaybeEnterChroot() {
}
char reply;
- std::vector<int> fds;
- if (!base::RecvMsg(fd, &reply, 1, &fds)) {
+ if (HANDLE_EINTR(read(fd, &reply, 1)) != 1) {
LOG(ERROR) << "Failed to read from chroot pipe: " << errno;
return false;
}
+
if (reply != kChrootMeSuccess) {
LOG(ERROR) << "Error code reply from chroot helper";
- for (size_t i = 0; i < fds.size(); ++i)
- HANDLE_EINTR(close(fds[i]));
- return false;
- }
- if (fds.size() != 1) {
- LOG(ERROR) << "Bad number of file descriptors from chroot helper";
- for (size_t i = 0; i < fds.size(); ++i)
- HANDLE_EINTR(close(fds[i]));
- return false;
- }
- if (fchdir(fds[0]) == -1) {
- LOG(ERROR) << "Failed to chdir to root directory: " << errno;
- HANDLE_EINTR(close(fds[0]));
return false;
}
- HANDLE_EINTR(close(fds[0]));
static const int kMagicSandboxIPCDescriptor = 5;
SkiaFontConfigUseIPCImplementation(kMagicSandboxIPCDescriptor);
diff --git a/sandbox/linux/suid/sandbox.cc b/sandbox/linux/suid/sandbox.cc
index abd066c..0119882 100644
--- a/sandbox/linux/suid/sandbox.cc
+++ b/sandbox/linux/suid/sandbox.cc
@@ -78,8 +78,7 @@ static int CloneChrootHelperProcess() {
}
rmdir(temp_dir);
- fchown(chroot_dir_fd, 0, 0);
- fchmod(chroot_dir_fd, 0555);
+ fchown(chroot_dir_fd, 0 /* root */, 0 /* root */);
// We share our files structure with an untrusted process. As a security in
// depth measure, we make sure that we can't open anything by mistake.
@@ -108,6 +107,7 @@ static int CloneChrootHelperProcess() {
if (fchdir(chroot_dir_fd))
FatalError("Cannot chdir into chroot temp directory");
+ fchmod(chroot_dir_fd, 0000 /* no-access */);
struct stat st;
if (stat(".", &st))
@@ -124,23 +124,7 @@ static int CloneChrootHelperProcess() {
const char reply = kMsgChrootSuccessful;
do {
- struct msghdr msg = {0};
- struct iovec iov = {(char *) &reply, 1};
-
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
-
- char control_buffer[CMSG_SPACE(sizeof(int))];
- msg.msg_control = control_buffer;
- msg.msg_controllen = sizeof(control_buffer);
- struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- cmsg->cmsg_len = CMSG_LEN(sizeof(int));
- memcpy(CMSG_DATA(cmsg), &chroot_dir_fd, sizeof(int));
- msg.msg_controllen = cmsg->cmsg_len;
-
- bytes = sendmsg(sv[0], &msg, 0);
+ bytes = write(sv[0], &reply, 1);
} while (bytes == -1 && errno == EINTR);
if (bytes != 1)