OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // For linux_syscall_support.h. This makes it safe to call embedded system | 5 // For linux_syscall_support.h. This makes it safe to call embedded system |
6 // calls when in seccomp mode. | 6 // calls when in seccomp mode. |
7 | 7 |
8 #include "components/breakpad/app/breakpad_linux.h" | 8 #include "components/breakpad/app/breakpad_linux.h" |
9 | 9 |
10 #include <fcntl.h> | 10 #include <fcntl.h> |
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
790 // Start constructing the message to send to the browser. | 790 // Start constructing the message to send to the browser. |
791 char distro[kDistroSize + 1] = {0}; | 791 char distro[kDistroSize + 1] = {0}; |
792 PopulateDistro(distro, NULL); | 792 PopulateDistro(distro, NULL); |
793 | 793 |
794 char b; // Dummy variable for sys_read below. | 794 char b; // Dummy variable for sys_read below. |
795 const char* b_addr = &b; // Get the address of |b| so we can create the | 795 const char* b_addr = &b; // Get the address of |b| so we can create the |
796 // expected /proc/[pid]/syscall content in the | 796 // expected /proc/[pid]/syscall content in the |
797 // browser to convert namespace tids. | 797 // browser to convert namespace tids. |
798 | 798 |
799 // The length of the control message: | 799 // The length of the control message: |
800 static const unsigned kControlMsgSize = sizeof(int); | 800 static const unsigned kControlMsgSize = sizeof(fds); |
801 static const unsigned kControlMsgSpaceSize = CMSG_SPACE(kControlMsgSize); | 801 static const unsigned kControlMsgSpaceSize = CMSG_SPACE(kControlMsgSize); |
802 static const unsigned kControlMsgLenSize = CMSG_LEN(kControlMsgSize); | 802 static const unsigned kControlMsgLenSize = CMSG_LEN(kControlMsgSize); |
803 | 803 |
804 struct kernel_msghdr msg; | 804 struct kernel_msghdr msg; |
805 my_memset(&msg, 0, sizeof(struct kernel_msghdr)); | 805 my_memset(&msg, 0, sizeof(struct kernel_msghdr)); |
806 struct kernel_iovec iov[kCrashIovSize]; | 806 struct kernel_iovec iov[kCrashIovSize]; |
807 iov[0].iov_base = const_cast<void*>(crash_context); | 807 iov[0].iov_base = const_cast<void*>(crash_context); |
808 iov[0].iov_len = crash_context_size; | 808 iov[0].iov_len = crash_context_size; |
809 iov[1].iov_base = distro; | 809 iov[1].iov_base = distro; |
810 iov[1].iov_len = kDistroSize + 1; | 810 iov[1].iov_len = kDistroSize + 1; |
(...skipping 19 matching lines...) Expand all Loading... |
830 msg.msg_iovlen = kCrashIovSize; | 830 msg.msg_iovlen = kCrashIovSize; |
831 char cmsg[kControlMsgSpaceSize]; | 831 char cmsg[kControlMsgSpaceSize]; |
832 my_memset(cmsg, 0, kControlMsgSpaceSize); | 832 my_memset(cmsg, 0, kControlMsgSpaceSize); |
833 msg.msg_control = cmsg; | 833 msg.msg_control = cmsg; |
834 msg.msg_controllen = sizeof(cmsg); | 834 msg.msg_controllen = sizeof(cmsg); |
835 | 835 |
836 struct cmsghdr *hdr = CMSG_FIRSTHDR(&msg); | 836 struct cmsghdr *hdr = CMSG_FIRSTHDR(&msg); |
837 hdr->cmsg_level = SOL_SOCKET; | 837 hdr->cmsg_level = SOL_SOCKET; |
838 hdr->cmsg_type = SCM_RIGHTS; | 838 hdr->cmsg_type = SCM_RIGHTS; |
839 hdr->cmsg_len = kControlMsgLenSize; | 839 hdr->cmsg_len = kControlMsgLenSize; |
840 ((int*)CMSG_DATA(hdr))[0] = fds[1]; | 840 ((int*) CMSG_DATA(hdr))[0] = fds[0]; |
| 841 ((int*) CMSG_DATA(hdr))[1] = fds[1]; |
841 | 842 |
842 if (HANDLE_EINTR(sys_sendmsg(server_fd_, &msg, 0)) < 0) { | 843 if (HANDLE_EINTR(sys_sendmsg(server_fd_, &msg, 0)) < 0) { |
843 static const char errmsg[] = "Failed to tell parent about crash.\n"; | 844 static const char errmsg[] = "Failed to tell parent about crash.\n"; |
844 WriteLog(errmsg, sizeof(errmsg) - 1); | 845 WriteLog(errmsg, sizeof(errmsg) - 1); |
845 IGNORE_RET(sys_close(fds[0])); | 846 IGNORE_RET(sys_close(fds[0])); |
846 IGNORE_RET(sys_close(fds[1])); | 847 IGNORE_RET(sys_close(fds[1])); |
847 return false; | 848 return false; |
848 } | 849 } |
849 IGNORE_RET(sys_close(fds[1])); | 850 IGNORE_RET(sys_close(fds[1])); |
850 | 851 |
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 } | 1629 } |
1629 } | 1630 } |
1630 } | 1631 } |
1631 #endif // OS_ANDROID | 1632 #endif // OS_ANDROID |
1632 | 1633 |
1633 bool IsCrashReporterEnabled() { | 1634 bool IsCrashReporterEnabled() { |
1634 return g_is_crash_reporter_enabled; | 1635 return g_is_crash_reporter_enabled; |
1635 } | 1636 } |
1636 | 1637 |
1637 } // namespace breakpad | 1638 } // namespace breakpad |
OLD | NEW |