From 83658e0d36a80d227c527796f48bff9c4da78bfe Mon Sep 17 00:00:00 2001 From: Akilesh Kailash Date: Tue, 27 Apr 2021 02:30:39 +0000 Subject: [PATCH] libsnapshot: Pass MSG_NOSIGNAL socket flags If one end of the communication socket is closed for some reason, there is no need to terminate the daemon or the client. Mask the SIGPIPE using MSG_NOSIGNAL flag - we will still get EPIPE error but process will not be terminated. Bug: 186213024 Test: Full OTA Signed-off-by: Akilesh Kailash Change-Id: Iaa53545c0c4059618f6b49afb9ec24ea5372c7e0 --- fs_mgr/libsnapshot/snapuserd_client.cpp | 2 +- fs_mgr/libsnapshot/snapuserd_server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs_mgr/libsnapshot/snapuserd_client.cpp b/fs_mgr/libsnapshot/snapuserd_client.cpp index 16d02e424..41ab34409 100644 --- a/fs_mgr/libsnapshot/snapuserd_client.cpp +++ b/fs_mgr/libsnapshot/snapuserd_client.cpp @@ -113,7 +113,7 @@ bool SnapuserdClient::ValidateConnection() { bool SnapuserdClient::Sendmsg(const std::string& msg) { LOG(DEBUG) << "Sendmsg: msg " << msg << " sockfd: " << sockfd_; - ssize_t numBytesSent = TEMP_FAILURE_RETRY(send(sockfd_, msg.data(), msg.size(), 0)); + ssize_t numBytesSent = TEMP_FAILURE_RETRY(send(sockfd_, msg.data(), msg.size(), MSG_NOSIGNAL)); if (numBytesSent < 0) { PLOG(ERROR) << "Send failed"; return false; diff --git a/fs_mgr/libsnapshot/snapuserd_server.cpp b/fs_mgr/libsnapshot/snapuserd_server.cpp index 64332d191..5bbcc660f 100644 --- a/fs_mgr/libsnapshot/snapuserd_server.cpp +++ b/fs_mgr/libsnapshot/snapuserd_server.cpp @@ -81,7 +81,7 @@ DmUserHandler::DmUserHandler(std::shared_ptr snapuserd) : snapuserd_(snapuserd), misc_name_(snapuserd_->GetMiscName()) {} bool SnapuserdServer::Sendmsg(android::base::borrowed_fd fd, const std::string& msg) { - ssize_t ret = TEMP_FAILURE_RETRY(send(fd.get(), msg.data(), msg.size(), 0)); + ssize_t ret = TEMP_FAILURE_RETRY(send(fd.get(), msg.data(), msg.size(), MSG_NOSIGNAL)); if (ret < 0) { PLOG(ERROR) << "Snapuserd:server: send() failed"; return false;