diff options
author | Josh Gao <jmgao@google.com> | 2017-03-01 17:23:22 -0800 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2017-03-09 11:26:05 -0800 |
commit | e1aa0ca58a2a356039047ffcc8a98d85d1bce8ed (patch) | |
tree | 46c90399acd3b3fa76538e26b528ee005cbb8872 /debuggerd/util.cpp | |
parent | 4e5e797d26272dc08b6336def8d7878443881f0e (diff) |
debuggerd_handler: implement missing fallback functionality.
Allow the fallback implementation to dump traces and create tombstones
in seccomped processes.
Bug: http://b/35858739
Test: debuggerd -b `pidof media.codec`; killall -ABRT media.codec
Change-Id: I381b283de39a66d8900f1c320d32497d6f2b4ec4
Diffstat (limited to 'debuggerd/util.cpp')
-rw-r--r-- | debuggerd/util.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/debuggerd/util.cpp b/debuggerd/util.cpp index 738abdf7b..4c015d70a 100644 --- a/debuggerd/util.cpp +++ b/debuggerd/util.cpp @@ -22,8 +22,13 @@ #include <android-base/unique_fd.h> #include <cutils/sockets.h> +#include <debuggerd/protocol.h> -ssize_t send_fd(int sockfd, const void* data, size_t len, android::base::unique_fd fd) { +#include "private/libc_logging.h" + +using android::base::unique_fd; + +ssize_t send_fd(int sockfd, const void* data, size_t len, unique_fd fd) { char cmsg_buf[CMSG_SPACE(sizeof(int))]; iovec iov = { .iov_base = const_cast<void*>(data), .iov_len = len }; @@ -39,8 +44,7 @@ ssize_t send_fd(int sockfd, const void* data, size_t len, android::base::unique_ return TEMP_FAILURE_RETRY(sendmsg(sockfd, &msg, 0)); } -ssize_t recv_fd(int sockfd, void* _Nonnull data, size_t len, - android::base::unique_fd* _Nullable out_fd) { +ssize_t recv_fd(int sockfd, void* _Nonnull data, size_t len, unique_fd* _Nullable out_fd) { char cmsg_buf[CMSG_SPACE(sizeof(int))]; iovec iov = { .iov_base = const_cast<void*>(data), .iov_len = len }; @@ -61,7 +65,7 @@ ssize_t recv_fd(int sockfd, void* _Nonnull data, size_t len, return -1; } - android::base::unique_fd fd; + unique_fd fd; bool received_fd = msg.msg_controllen == sizeof(cmsg_buf); if (received_fd) { fd.reset(*reinterpret_cast<int*>(CMSG_DATA(cmsg))); @@ -85,7 +89,7 @@ ssize_t recv_fd(int sockfd, void* _Nonnull data, size_t len, return result; } -bool Pipe(android::base::unique_fd* read, android::base::unique_fd* write) { +bool Pipe(unique_fd* read, unique_fd* write) { int pipefds[2]; if (pipe(pipefds) != 0) { return false; |